리눅스 커널 mm 서브시스템 동향 (3) — 리뷰 중인 패치와 쟁점

머지된 코드는 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 PhamBaoquan 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 selectionYoungjun Parkcgroup별로 속도가 다른 스왑 장치 선택
mm/swap: introduce priority queues for swap device allocationLian Wang우선순위별 스왑 장치 할당 큐
mm/swap: reserve swap areas for deliberate offloadMatthias Goergens의도적 오프로드용 스왑 영역 예약
mm: PMD-level swap entries for anonymous THPsUsama Arif익명 THP를 쪼개지 않고 스왑
Batched zswap_store() framework with compression batchingKanchana P. Sridhar압축 가속기용 일괄 저장
zram: redesign zcomp and rework backendsSergey Senozhatskyzram 압축 백엔드 재설계

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 cleanupKairui Song9월 11일, 10월 3일, 10월 16일 게시. 페이지 캐시 working set 탐지 개선, 페이지 플래그 4비트→3비트
mm: mglru: fix swappiness behaviorBarry Song10월 23일 게시
mm: multi-gen LRU: reduce memcg rotation overheadMax Kellermann10월 12일 게시
mm/vmscan: adaptive multi-threaded kswapdEhab AbabnehNUMA 노드별 kswapd 다중 스레드화

Android 측 요구도 있다. HONOR는 약 7,000만 대 기기에 MGLRU를 켰다. 이 회사는 회수를 8.3ms 안에 끝내야 하고, 포그라운드 앱을 건너뛰는 훅이 필요하다고 발표했다. 지금은 벤더별 훅으로 해결하고 있어 공통 인터페이스가 요구된다.

THP: 1GB, 자동 모드, 분할

제안작성자상태·쟁점
1GB(PUD) 투명 huge pageUsama ArifRFC 단계. Hildenbrand는 1GB 페이지를 쪼개지 말고 먼저 shmem에만 적용하자고 제안. khugepaged로 1GB를 만들지는 않기로 함
mm: reliable 1GB page allocation (super page block)Rik van Riel10월 4일 새 버전. 1GB 단위로 이동 불가 할당을 모은다. 이전 40패치판은 LLM 생성 코드 품질 문제로 재작성 요구를 받았다
keep non-movable pages out of movable pageblocks for THPRik van Riel10월 6일 게시
auto THP 모드Nico Pache메모리 사용량이 임계치 아래면 always, 위면 defer처럼 동작. 임계치 기준(PSI, refault 비율)은 미정
mm: split underused anonymous mTHP foliosJoanne Koong9월 16일 게시. 덜 쓰는 mTHP를 쪼갠다
add shmem mTHP collapse supportBaolin Wang9월 18일 게시
mm: thp: always enable mTHP supportLuiz Capitulino8월 31일, 9월 17일 게시
mm: compaction: mTHP-friendly memory compactionBo Zhang8월 25일, 10월 1일 게시
deferred split 리스트 재설계David Hildenbrand모든 THP를 리스트에 두고 주기적으로 스캔하는 안. 아직 아이디어 단계

struct page와 folio의 다음 단계

주제담당현재 위치
mapcount 제거David HildenbrandCONFIG_NO_PAGE_MAPCOUNT(6.15부터, 실험적)를 기본값으로 바꾸려 한다. 부분 매핑 folio에서 Pss, /proc/kpagecount 정밀도가 떨어진다
메모리 디스크립터(memdesc)Vishal Moola, Matthew WilcoxCONFIG_MEMDESC 도입 제안. 시험 구현에서 struct page를 32바이트로 줄였다. 페이지 마이그레이션이 가장 큰 걸림돌
eliminate &folio->page references in mm/Nilay Vaish9월 29일 게시. folio와 page의 결합을 끊는 정리
distinguish HW PTE pointers from SW PTE value pointersMuhammad Usama Anjum9월 3일, 22일 게시
익명 rmap을 “COW context”로 재작성Lorenzo Stoakes연구 단계. VMA 단위 anon_vma를 mm_struct 단위 구조로 바꾼다

페이지 캐시와 refcount 확장성

10월에는 같은 문제를 겨냥한 시리즈가 세 개 나왔다. 읽기 경로에서 folio refcount를 올리고 내리는 원자 연산이 많은 코어에서 병목이 되는 문제다.

시리즈작성자접근
mm: improve folio refcount scalabilityIlya Gladyshev9월 12일 게시
Improve page refcount scalabilityLinus Torvalds10월 13일 게시. hot folio의 해제를 RCU 기간 뒤로 미루고, refcount 없이 RCU 안에서 데이터를 복사한다. read() 벤치마크에서 10배 빨라졌다. 리뷰에서 경쟁 조건이 발견됐다. LLM 도움을 받은 첫 리누스 시리즈
mm: read the page cache without folio referencesKiryl Shutsemau10월 19일 게시

memcg와 BPF

BPF로 mm 정책을 바꾸려는 제안은 많지만 아직 메인라인에 들어간 것은 없다. Hildenbrand는 ABI 안정성을 가장 큰 장애물로 꼽았다. 훅을 한번 열면 몇 년 뒤 설계를 바꾸기 어렵다는 이유다.

시리즈작성자내용
memcg_ext: memcg policy through cgroup-attached struct_opsShakeel Buttcgroup에 붙는 struct_ops로 memcg 정책 구현. 7.4에 “struct_ops를 cgroup에 붙이는 공통 방법”이 BPF 트리로 먼저 들어갔다
memcg_ext: dynamic memory.low and memory.min protectionHui Zhu10월 27일 게시
bpf: BPF-driven proactive memcg reclaim / bpf_proactive_reclaim kfuncHui Zhu8~9월 반복 게시
cache_extTal Zussmansched_ext처럼 페이지 캐시 축출 정책을 BPF로 교체. 금융 DB에서 처리량 70% 향상 보고
mm/page_owner: add bpf_iter and kfuncsZhen Ni10월 게시
mm/page_counter: move stock from mem_cgroup to page_counterJoshua Hahn9~10월 세 번 게시
cgroup: charge kernel work to the cgroup it is done forShakeel Butt9월 24일 게시
mm: memcontrol: implement the memsw limit on cgroup v2Jingxiang Zeng9월 18일 게시

티어드 메모리, CXL, 디바이스 메모리

제안작성자상태·쟁점
pghot: hot page 탐지·승격과 kmigrated 스레드Bharata B Rao8번째 리비전까지 리뷰 태그 0개. Wilcox는 “고객이 원하는 기능이 아니다”라며 반대했다. DAMON으로 대체할 수 있는지가 쟁점
티어 인식 memcg 한도(memory.toptier_*)Joshua Hahn경쟁안(Qiqi Liu)의 작성자도 Hahn 안을 지지. 다만 Michal Hocko는 티어 단위 제어 자체에 의문을 제기
private memory node와 __GFP_PRIVATEGregory Price버디 할당자가 디바이스 메모리로 fallback하지 않게 한다. GFP 플래그 추가에 반대 의견
__GFP_UNMAPPED와 mermapBrendan Jackmandirect map에서 뺀 메모리를 할당하는 API. 주소 공간 격리(ASI)의 일부. 리뷰 부족이 병목
cxl, mm: Keep device-reported poison out of the page allocatorShaikh Kamaluddin10월 10일 게시
migrate on fault for device pagesMika Penttiläv14까지 진행
guest_memfd in-place conversion, memory providersAckerley Tng, Fred Griffoul8~10월 게시. 기밀 컴퓨팅 VM용

그 밖의 장기 과제

주제담당요점
mshare (페이지 테이블 공유)Anthony YznagaAPI를 mshare_create(), mshare_attach() 등 시스템 콜 묶음으로 되돌렸다. 머지되면 hugetlbfs의 PMD 공유를 없앨 수 있다
per-CPU 할당자 확장성Harry Yoo, Mathieu DesnoyersRSS 카운터 초기화 비용 문제. 서밋에서는 per-mm 동시성 ID(mm_cid)로 인덱싱하는 안에 무게가 실렸다. 별도로 “Hierarchical Percpu Counters for RSS”가 게시됐다
major fault의 mmap_lock 경합Barry SongI/O 완료 뒤 재시도를 VMA 락으로 하자는 제안. 익명 페이지부터 적용하는 안이 나왔다
4KB 커널에서 64KB 페이지Ryan Roberts, Dev Jain, Kiryl Shutsemau프로세스별 페이지 크기(arm64)와 x86 64KB 안. 둘 다 반응이 미지근했다
slab 설정의 부팅 파라미터화Vlastimil Babka, Chris DownCONFIG_SLUB_TINY를 slab_tiny 부팅 파라미터로 대체, 하드닝 기능을 부팅 시 선택
mm: arm64: Add kernel replication featureNikita PanovNUMA 노드별 커널 텍스트 복제

관심사별 참여 지점

관심사먼저 볼 시리즈참여 방법
스왑·zswapvswap, xswap phase I~III두 안을 같은 워크로드로 돌려 메모리·성능 수치를 리스트에 공유
회수·MGLRUMGLRU-FG페이지 캐시 위주 워크로드에서 전통 LRU와 비교 테스트
THP·mTHPsplit underused mTHP, shmem mTHP collapse7.4에 들어온 khugepaged selftest를 확장
memcg·BPFmemcg_extstruct_ops 인터페이스가 실제 정책을 표현할 수 있는지 사례로 검증
folio·memdesc&folio->page 제거남은 struct page 필드 사용처 찾기. Wilcox가 말한 “긴 꼬리” 문제
임베디드·Androidswap tiers, MGLRU 인터페이스벤더 훅으로 해결한 문제를 일반 인터페이스 제안으로 정리

주의사항

  • 이 글의 상태 정보는 2026년 10월 30일 기준이다. 리스트의 최신 리비전과 메인테이너 답장을 다시 확인할 것. mm 시리즈는 리비전 사이에 설계가 크게 바뀌기도 한다.
  • 경쟁 중인 두 안 중 한쪽을 택해 그 위에 패치를 쌓지 말 것. vswap/xswap처럼 결론이 나지 않은 주제는 리뷰나 벤치마크로 참여하는 편이 안전하다.
  • 새 GFP 플래그나 페이지 플래그를 요구하는 설계는 피할 것. 두 자원 모두 부족해 __GFP_PRIVATE, __GFP_UNMAPPED도 반대에 부딪혔다.
  • BPF 훅 제안은 ABI 문제부터 답할 것. 훅을 트리 안 BPF 프로그램으로만 쓰게 할지, 언제 없앨 수 있는지를 커버 레터에 적는다.

마무리

2026년 가을 mm의 쟁점은 네 가지로 모인다. 스왑 가상화의 설계 선택, 회수 알고리즘 통합, 1GB와 mTHP를 포함한 THP 자동화, BPF 정책 훅의 ABI 문제다. 어느 주제든 리뷰어가 부족하다. 관심 주제의 시리즈를 받아 빌드하고 테스트 결과를 답장하는 것부터 시작하면 된다.

참고

답글 남기기