머지된 코드는 git log로 쉽게 볼 수 있다. 반면 앞으로 무엇이 들어올지는 메일링 리스트, 학회 발표, 메인테이너의 반응을 함께 봐야 알 수 있다. 기여할 주제를 고르려면 바로 이 “아직 머지되지 않은 부분”을 알아야 한다. 이미 합의된 방향에 맞춰 작은 패치를 보낼지, 논쟁 중인 설계에 리뷰로 참여할지가 여기서 갈린다.
이 글에서는 2026년 8월 말부터 10월 말까지 linux-mm에 올라온 주요 패치 시리즈를 정리한다. 2026년 5월 LSFMM+BPF 서밋의 mm 트랙 논의도 함께 다룬다. 패치 목록은 LWN 주간판의 “Memory management” 패치 목록 10주치에서 뽑았다. 상태는 2026년 10월 30일 mm 트리 기준이다.
이 시리즈의 다른 글
지금 mm-new에 들어온 것
7.4 머지 윈도우가 열려 있는 지금도 mm-new에는 7.5를 노리는 시리즈가 들어오기 시작했다. 기능성 변경만 골라 보면 아래와 같다.
git log --no-merges --format='%h %an | %s' mm/mm-unstable..mm/mm-new \
| grep -E "zswap|memcg|vmemmap|page table alloc|lruvec|deferred split"4edea482853 Alexandre Ghiti | mm/zswap: plug the writeback IO of an LRU walk
958d78e9ede Alexandre Ghiti | mm/zswap: batch the writeback IO of consecutive entries
7d4b0924bb8 Muchun Song | mm: generalize PUD page table allocation
9878b985447 Muchun Song | mm: generalize PMD page table allocation
1b30fcb9e1d Tal Zussman | mm: memcontrol: remove page_memcg_check()
f9ed365ca32 Tal Zussman | mm: memcontrol: remove mod_memcg_page_state()
2b18f1710dc Joanne Koong | memcg: don't go through the lruvec for folio and kmem lruvec stat updates
2fa7d358692 Joanne Koong | memcg: reduce cacheline contention between lruvec stat updates and LRU lists
d05d5e554be Siddharth Chintamaneni | mm: multi-gen LRU: remove get_lruvec()
391382b32d1 Siddharth Chintamaneni | mm: multi-gen LRU: use mem_cgroup_lruvec() in get_lruvec()
acb9108c488 Muchun Song | mm/hugetlb_vmemmap: remove hugetlb_vmemmap_optimize_bootmem_folios()
2491a8cb256 Muchun Song | mm/hugetlb_vmemmap: remove vmemmap_wrprotect_hvo()
4b539bb4816 Muchun Song | powerpc/mm: map shared vmemmap tail pages as read-only
078daddbfc6 Muchun Song | mm/sparse-vmemmap: map shared vmemmap tail pages as read-only
b0d310822a9 Kuniyuki Iwashima | memcg: uncharge pages outside memcg_stock.lock in refill_stock()
79e87bae4d5 Kuniyuki Iwashima | memcg: annotate slow paths in consume_stock() and refill_stock()
ea1ef8f162f Kuniyuki Iwashima | memcg: reduce nesting in consume_stock() and refill_stock()
e650205fdc6 Kuniyuki Iwashima | memcg: remove unnecessary READ_ONCE() under memcg_stock.lock
70482ade80b Joanne Koong | mm: unqueue deferred split folios outside the lruvec lock
Muchun Song의 페이지 테이블 할당 일반화는 10월 14일 리스트에 올라왔고 2주 만에 mm-new에 들어왔다. 아래 주제들은 이보다 크고 논쟁적이라 아직 리스트 단계에 있다.
스왑 공간 가상화: vswap 대 xswap
지금 가장 뜨거운 쟁점이다. 현재 zswap에 저장된 folio도 물리 스왑 장치의 슬롯을 하나씩 차지한다. 그래서 데이터센터에서는 실제로 쓰지 않는 플래시 공간을 대량으로 잡아 둬야 한다. 해법이 두 갈래로 경쟁한다.
| 항목 | vswap (Virtual Swap Space) | xswap (extendable swap) |
|---|---|---|
| 작성자 | Nhat Pham | Baoquan He, Chris Li |
| 최근 게시 | “Swap Table Edition”, 10월 20일 | phase I~III 세 시리즈, 10월 3일 |
| 구조 | 스왑 캐시 위에 가상 슬롯 계층. 슬롯이 물리 스왑, zswap, 0 페이지 중 하나를 가리킨다 | 백킹 저장소가 없는 가상 스왑 장치. zswap folio에 “물리” 슬롯을 내준다 |
| 메타데이터 | xarray. 크기가 동적으로 변한다 | 희소 매핑(VM_SPARSE) 배열. 최대 크기를 미리 예약한다 |
| 지지 측 주장 | Johannes Weiner: zswap에 담을 수 있는 양은 압축률에 달려 있어 관리자가 크기를 정할 수 없다 | Baoquan He: 희소 배열은 나중에 붙일 최적화가 아니라 구조적 선택이다. Kairui Song도 같은 의견 |
| 남은 문제 | 두 시리즈의 공통 부분을 어느 순서로 넣을지 미정 | 초기판에 물리 장치 writeback이 없었다(phase II에서 추가) |
논쟁의 밑바닥에는 스왑 제한(memcg memory.swap.max 등)의 의미 차이가 있다. 프로세스의 가상 크기를 제한하는 용도라면 zswap도 과금해야 한다. 물리 스왑 공간만 제한하는 용도라면 과금하지 않아야 한다. 어느 쪽을 택하든 한쪽 사용자는 불만이 남는다.
| 관련 스왑 시리즈 | 작성자 | 목적 |
|---|---|---|
| mm/swap: priority-based swap tiers with per-cgroup selection | Youngjun Park | cgroup별로 속도가 다른 스왑 장치 선택 |
| mm/swap: introduce priority queues for swap device allocation | Lian Wang | 우선순위별 스왑 장치 할당 큐 |
| mm/swap: reserve swap areas for deliberate offload | Matthias Goergens | 의도적 오프로드용 스왑 영역 예약 |
| mm: PMD-level swap entries for anonymous THPs | Usama Arif | 익명 THP를 쪼개지 않고 스왑 |
| Batched zswap_store() framework with compression batching | Kanchana P. Sridhar | 압축 가속기용 일괄 저장 |
| zram: redesign zcomp and rework backends | Sergey Senozhatsky | zram 압축 백엔드 재설계 |
MGLRU와 회수 경로 통합
커널에는 회수 알고리즘이 두 개 있다. 전통 LRU와 MGLRU다. Shakeel Butt는 LSFMM+BPF에서 “mm/vmscan.c가 8,000줄을 넘고 그중 40%가 MGLRU 전용”이라며 통합을 제안했다. 현재 메인라인의 mm/vmscan.c는 8,282줄이다.
| 제안 | 작성자 | 상태·쟁점 |
|---|---|---|
| 두 구현을 파일로 분리하고 공통 기능을 찾아 하나로 합치는 4단계 계획 | Shakeel Butt, Emil Tsalapatis | 방향은 대체로 합의. 분리 시점은 Kairui Song의 진행 중 작업이 머지된 뒤로 미루자는 의견 |
| MGLRU-FG: frequency guided promotion and flag cleanup | Kairui Song | 9월 11일, 10월 3일, 10월 16일 게시. 페이지 캐시 working set 탐지 개선, 페이지 플래그 4비트→3비트 |
| mm: mglru: fix swappiness behavior | Barry Song | 10월 23일 게시 |
| mm: multi-gen LRU: reduce memcg rotation overhead | Max Kellermann | 10월 12일 게시 |
| mm/vmscan: adaptive multi-threaded kswapd | Ehab Ababneh | NUMA 노드별 kswapd 다중 스레드화 |
Android 측 요구도 있다. HONOR는 약 7,000만 대 기기에 MGLRU를 켰다. 이 회사는 회수를 8.3ms 안에 끝내야 하고, 포그라운드 앱을 건너뛰는 훅이 필요하다고 발표했다. 지금은 벤더별 훅으로 해결하고 있어 공통 인터페이스가 요구된다.
THP: 1GB, 자동 모드, 분할
| 제안 | 작성자 | 상태·쟁점 |
|---|---|---|
| 1GB(PUD) 투명 huge page | Usama Arif | RFC 단계. Hildenbrand는 1GB 페이지를 쪼개지 말고 먼저 shmem에만 적용하자고 제안. khugepaged로 1GB를 만들지는 않기로 함 |
| mm: reliable 1GB page allocation (super page block) | Rik van Riel | 10월 4일 새 버전. 1GB 단위로 이동 불가 할당을 모은다. 이전 40패치판은 LLM 생성 코드 품질 문제로 재작성 요구를 받았다 |
| keep non-movable pages out of movable pageblocks for THP | Rik van Riel | 10월 6일 게시 |
| auto THP 모드 | Nico Pache | 메모리 사용량이 임계치 아래면 always, 위면 defer처럼 동작. 임계치 기준(PSI, refault 비율)은 미정 |
| mm: split underused anonymous mTHP folios | Joanne Koong | 9월 16일 게시. 덜 쓰는 mTHP를 쪼갠다 |
| add shmem mTHP collapse support | Baolin Wang | 9월 18일 게시 |
| mm: thp: always enable mTHP support | Luiz Capitulino | 8월 31일, 9월 17일 게시 |
| mm: compaction: mTHP-friendly memory compaction | Bo Zhang | 8월 25일, 10월 1일 게시 |
| deferred split 리스트 재설계 | David Hildenbrand | 모든 THP를 리스트에 두고 주기적으로 스캔하는 안. 아직 아이디어 단계 |
struct page와 folio의 다음 단계
| 주제 | 담당 | 현재 위치 |
|---|---|---|
| mapcount 제거 | David Hildenbrand | CONFIG_NO_PAGE_MAPCOUNT(6.15부터, 실험적)를 기본값으로 바꾸려 한다. 부분 매핑 folio에서 Pss, /proc/kpagecount 정밀도가 떨어진다 |
| 메모리 디스크립터(memdesc) | Vishal Moola, Matthew Wilcox | CONFIG_MEMDESC 도입 제안. 시험 구현에서 struct page를 32바이트로 줄였다. 페이지 마이그레이션이 가장 큰 걸림돌 |
eliminate &folio->page references in mm/ | Nilay Vaish | 9월 29일 게시. folio와 page의 결합을 끊는 정리 |
| distinguish HW PTE pointers from SW PTE value pointers | Muhammad Usama Anjum | 9월 3일, 22일 게시 |
| 익명 rmap을 “COW context”로 재작성 | Lorenzo Stoakes | 연구 단계. VMA 단위 anon_vma를 mm_struct 단위 구조로 바꾼다 |
페이지 캐시와 refcount 확장성
10월에는 같은 문제를 겨냥한 시리즈가 세 개 나왔다. 읽기 경로에서 folio refcount를 올리고 내리는 원자 연산이 많은 코어에서 병목이 되는 문제다.
| 시리즈 | 작성자 | 접근 |
|---|---|---|
| mm: improve folio refcount scalability | Ilya Gladyshev | 9월 12일 게시 |
| Improve page refcount scalability | Linus Torvalds | 10월 13일 게시. hot folio의 해제를 RCU 기간 뒤로 미루고, refcount 없이 RCU 안에서 데이터를 복사한다. read() 벤치마크에서 10배 빨라졌다. 리뷰에서 경쟁 조건이 발견됐다. LLM 도움을 받은 첫 리누스 시리즈 |
| mm: read the page cache without folio references | Kiryl Shutsemau | 10월 19일 게시 |
memcg와 BPF
BPF로 mm 정책을 바꾸려는 제안은 많지만 아직 메인라인에 들어간 것은 없다. Hildenbrand는 ABI 안정성을 가장 큰 장애물로 꼽았다. 훅을 한번 열면 몇 년 뒤 설계를 바꾸기 어렵다는 이유다.
| 시리즈 | 작성자 | 내용 |
|---|---|---|
| memcg_ext: memcg policy through cgroup-attached struct_ops | Shakeel Butt | cgroup에 붙는 struct_ops로 memcg 정책 구현. 7.4에 “struct_ops를 cgroup에 붙이는 공통 방법”이 BPF 트리로 먼저 들어갔다 |
| memcg_ext: dynamic memory.low and memory.min protection | Hui Zhu | 10월 27일 게시 |
| bpf: BPF-driven proactive memcg reclaim / bpf_proactive_reclaim kfunc | Hui Zhu | 8~9월 반복 게시 |
| cache_ext | Tal Zussman | sched_ext처럼 페이지 캐시 축출 정책을 BPF로 교체. 금융 DB에서 처리량 70% 향상 보고 |
| mm/page_owner: add bpf_iter and kfuncs | Zhen Ni | 10월 게시 |
| mm/page_counter: move stock from mem_cgroup to page_counter | Joshua Hahn | 9~10월 세 번 게시 |
| cgroup: charge kernel work to the cgroup it is done for | Shakeel Butt | 9월 24일 게시 |
| mm: memcontrol: implement the memsw limit on cgroup v2 | Jingxiang Zeng | 9월 18일 게시 |
티어드 메모리, CXL, 디바이스 메모리
| 제안 | 작성자 | 상태·쟁점 |
|---|---|---|
pghot: hot page 탐지·승격과 kmigrated 스레드 | Bharata B Rao | 8번째 리비전까지 리뷰 태그 0개. Wilcox는 “고객이 원하는 기능이 아니다”라며 반대했다. DAMON으로 대체할 수 있는지가 쟁점 |
티어 인식 memcg 한도(memory.toptier_*) | Joshua Hahn | 경쟁안(Qiqi Liu)의 작성자도 Hahn 안을 지지. 다만 Michal Hocko는 티어 단위 제어 자체에 의문을 제기 |
private memory node와 __GFP_PRIVATE | Gregory Price | 버디 할당자가 디바이스 메모리로 fallback하지 않게 한다. GFP 플래그 추가에 반대 의견 |
__GFP_UNMAPPED와 mermap | Brendan Jackman | direct map에서 뺀 메모리를 할당하는 API. 주소 공간 격리(ASI)의 일부. 리뷰 부족이 병목 |
| cxl, mm: Keep device-reported poison out of the page allocator | Shaikh Kamaluddin | 10월 10일 게시 |
| migrate on fault for device pages | Mika Penttilä | v14까지 진행 |
| guest_memfd in-place conversion, memory providers | Ackerley Tng, Fred Griffoul | 8~10월 게시. 기밀 컴퓨팅 VM용 |
그 밖의 장기 과제
| 주제 | 담당 | 요점 |
|---|---|---|
| mshare (페이지 테이블 공유) | Anthony Yznaga | API를 mshare_create(), mshare_attach() 등 시스템 콜 묶음으로 되돌렸다. 머지되면 hugetlbfs의 PMD 공유를 없앨 수 있다 |
| per-CPU 할당자 확장성 | Harry Yoo, Mathieu Desnoyers | RSS 카운터 초기화 비용 문제. 서밋에서는 per-mm 동시성 ID(mm_cid)로 인덱싱하는 안에 무게가 실렸다. 별도로 “Hierarchical Percpu Counters for RSS”가 게시됐다 |
| major fault의 mmap_lock 경합 | Barry Song | I/O 완료 뒤 재시도를 VMA 락으로 하자는 제안. 익명 페이지부터 적용하는 안이 나왔다 |
| 4KB 커널에서 64KB 페이지 | Ryan Roberts, Dev Jain, Kiryl Shutsemau | 프로세스별 페이지 크기(arm64)와 x86 64KB 안. 둘 다 반응이 미지근했다 |
| slab 설정의 부팅 파라미터화 | Vlastimil Babka, Chris Down | CONFIG_SLUB_TINY를 slab_tiny 부팅 파라미터로 대체, 하드닝 기능을 부팅 시 선택 |
| mm: arm64: Add kernel replication feature | Nikita Panov | NUMA 노드별 커널 텍스트 복제 |
관심사별 참여 지점
| 관심사 | 먼저 볼 시리즈 | 참여 방법 |
|---|---|---|
| 스왑·zswap | vswap, xswap phase I~III | 두 안을 같은 워크로드로 돌려 메모리·성능 수치를 리스트에 공유 |
| 회수·MGLRU | MGLRU-FG | 페이지 캐시 위주 워크로드에서 전통 LRU와 비교 테스트 |
| THP·mTHP | split underused mTHP, shmem mTHP collapse | 7.4에 들어온 khugepaged selftest를 확장 |
| memcg·BPF | memcg_ext | struct_ops 인터페이스가 실제 정책을 표현할 수 있는지 사례로 검증 |
| folio·memdesc | &folio->page 제거 | 남은 struct page 필드 사용처 찾기. Wilcox가 말한 “긴 꼬리” 문제 |
| 임베디드·Android | swap tiers, MGLRU 인터페이스 | 벤더 훅으로 해결한 문제를 일반 인터페이스 제안으로 정리 |
주의사항
- 이 글의 상태 정보는 2026년 10월 30일 기준이다. 리스트의 최신 리비전과 메인테이너 답장을 다시 확인할 것. mm 시리즈는 리비전 사이에 설계가 크게 바뀌기도 한다.
- 경쟁 중인 두 안 중 한쪽을 택해 그 위에 패치를 쌓지 말 것. vswap/xswap처럼 결론이 나지 않은 주제는 리뷰나 벤치마크로 참여하는 편이 안전하다.
- 새 GFP 플래그나 페이지 플래그를 요구하는 설계는 피할 것. 두 자원 모두 부족해
__GFP_PRIVATE,__GFP_UNMAPPED도 반대에 부딪혔다. - BPF 훅 제안은 ABI 문제부터 답할 것. 훅을 트리 안 BPF 프로그램으로만 쓰게 할지, 언제 없앨 수 있는지를 커버 레터에 적는다.
마무리
2026년 가을 mm의 쟁점은 네 가지로 모인다. 스왑 가상화의 설계 선택, 회수 알고리즘 통합, 1GB와 mTHP를 포함한 THP 자동화, BPF 정책 훅의 ABI 문제다. 어느 주제든 리뷰어가 부족하다. 관심 주제의 시리즈를 받아 빌드하고 테스트 결과를 답장하는 것부터 시작하면 된다.
참고
- The [vx]swap showdown (LWN)
- What is to be done about MGLRU? (LWN)
- Scaling transparent huge pages to 1GB (LWN)
- Better automatic management of transparent huge pages (LWN)
- Further progress toward removing the page map count (LWN)
- Separating memory descriptors from struct page (LWN)
- Controlling memory management with BPF (LWN)
- Recent work in memory tiering (LWN)
- Support for private memory nodes (LWN)
- Two LLM-assisted memory-management patch sets (LWN)