Meta 커널 개발자가 Torvalds가 Claude를 이용해 작성한 페이지 캐시(page-cache) 패치를 18개 패치 RFC 시리즈로 재구성하여, LKML에서 ext4 읽기 속도가 약 4.5배 빠르며, 완화 조치(mitigations) 비활성화 시 최대 13배까지 향상된다고 보고했습니다.
주요 내용
- 무슨 일이 있었나: Meta의 Kiryl Shutsemau가 Torvalds가 LLM으로 생성한 10개 패치 개념 증명(proof of concept)을 18개 패치 RFC 시리즈로 재구성하여 LKML에 게시했습니다.
- 성능: ext4에서 약 4.5배 빠른 읽기 속도와 tmpfs에서 43배의 성능 향상을 보였습니다. 완화 조치를 비활성화하면 ext4에서 약 13배까지 빨라지며, 스레드가 하나일 때는 거의 변화가 없습니다.
- 작동 방식: 자주 접근하는 folio의 해제(freeing)를 RCU grace period 이후로 지연함으로써 읽기 과정 중 참조 카운트 연산(reference-count operations)을 제거합니다.
- 현재 상태: 이 패치들은 여전히 RFC 단계에 머물러 있으며, 64비트 제한 및 memcg 계정(accounting)의 공백을 포함한 해결되지 않은 이슈가 7가지 있습니다. 'Assisted-by: LLM' 태그는 메일링 리스트 검토 기준과는 무관합니다.
실험에서 제안으로, 단 일주일 만에
지난주, Linus Torvalds는 리눅스 커널 페이지 캐시 읽기 성능을 개선하는 패치(일본어 사용)를 작성하기 위해 LLM을 사용했습니다. 이 10개 패치 시리즈는 64개의 스레드를 사용할 때 초당 1330만 회에서 3억 4000만 회로 증가하며 약 23배 빠른 읽기 속도를 보여주었습니다. 하지만 Torvalds 자신도 인정했듯이, 이 수치는 CPU가 동일한 파일의 동일 위치를 반복적으로 읽는 극단적인 마이크로벤치마크(microbenchmark)에서 나온 것입니다. 그는 개별 패치를 메일링 리스트에 게시하는 대신 git 브랜치를 공개했습니다.
그로부터 6일 후인 10월 19일, Meta 커널 해커 Kiryl Shutsemau는 Torvalds의 코드를 기반으로 LKML에 18개 패치 RFC 시리즈를 게시했습니다.
Shutsemau는 이 문제에 대해 이전에 작업한 개발자 중 한 명으로, 2025년 10월에 수정된 패치를 게시한 바 있습니다. 새로운 시리즈는 Torvalds가 작성한 10개의 패치와 그가 추가한 11개의 패치를 재구성했습니다. Torvalds가 작성한 원래의 7개 패치 각각에는 Assisted-by: LLM 태그가 붙어 있습니다.
실험적인 AI 작성 코드는 다른 개발자에 의해 다듬어져 커널 메일링 리스트에 공식 검토를 위해 제출되었습니다.
무엇이 느린지, 그리고 이것이 어떻게 더 빠르게 만드나요?
Linux가 파일을 읽을 때, 디스크에서 검색된 데이터는 페이지 캐시(page cache)에 유지됩니다. 동일한 데이터를 나중에 다시 읽으면 디스크로 돌아가지 않고 메모리 내 복사본을 반환합니다.
문제는 여러 CPU가 동시에 같은 파일을 읽을 때 발생합니다. 페이지 캐시의 메모리 관리 장치인 folio는 참조 카운트(reference count)를 통해 관리되며, 이 카운트는 모든 읽기 작업마다 증가하고 감소해야 합니다. 이러한 작업은 원자적 명령어(atomic instructions), 즉 CPU 전반에 걸쳐 일관성을 보장하는 독점 업데이트를 사용합니다. 64개의 CPU가 동시에 동일한 folio의 카운트를 업데이트하려고 하면, 캐시 라인(cache line)이 CPU들 사이에서 계속 바통을 넘기며 성능이 급격히 저하됩니다.
이러한 상황은 메모리 내 파일 시스템인 tmpfs에서 더욱 심각합니다. 각 읽기는 참조 카운트 업데이트뿐만 아니라 folio 락(folio lock)도 획득하기 때문에, 패치 이전에는 64개의 스레드가 단일 스레드와 동일한 속도를 보였습니다.
이 패치들은 참조 카운트 획득 자체를 제거함으로써 문제를 해결합니다. 자주 접근하는 '핫(hot)' folio는 PG_rcu_free 플래그를 받습니다. 그러한 folio가 해제된 후에도, 모든 CPU가 현재 처리를 완료할 수 있도록 허용하는 간격인 RCU 유예 기간(RCU grace period)이 경과하기 전까지는 메모리가 재사용되지 않습니다. 이 기간 동안 리더들은 참조 카운트를 전혀 건드리지 않고 데이터를 복사할 수 있습니다.
이러한 이점은 쓰기 작업이 거의 없는 데이터에 더 큽니다. 스트리밍 읽기나 한 번만 접근하는 데이터는 플래그를 받지 않아, 지연된 해제(deferred freeing)를 통해 유지되는 메모리 양을 적게 유지하는 것으로 알려져 있습니다.
ext4에서 4.5배, tmpfs에서 43배
Shutsemau의 벤치마크는 Linux 7.3-rc7 기반의 AMD Ryzen Threadripper 7975WX (Zen 4)에 64개의 가상 CPU를 사용하는 KVM 게스트 환경에서 수행되었습니다.
64개의 스레드가 오프셋 0에서 16바이트 pread() 호출을 반복적으로 수행하고, 각 스레드가 자체 파일 디스크립터를 사용했을 때의 결과는 파일 시스템별로 상당히 차이를 보였습니다.
Joho no Todai에 따르면, 기본 CPU 취약점 완화(vulnerability mitigations)가 활성화된 상태에서 ext4는 기존 약 1,500만 회/초에서 약 4.5배 향상되어 6,890만7,010만 회/초에 도달했습니다. tmpfs는 160만170만 회/초에서 약 43배 급증하여 7,100만~7,200만 회/초를 기록했습니다. 이전에 folio 잠금(folio lock)이 이미 tmpfs의 64스레드 병렬성을 거의 제거했었다는 점을 고려할 때, 이러한 증가는 얼마나 많은 잠재력이 해제되었는지 보여줍니다.
그림 생략 — 원문 기사 참조
CPU 취약점 완화 기능을 비활성화하면 수치가 더욱 높아집니다. ext4는 초당 2억 1,700만~2억 2,000만 회의 읽기를 기록하며, 이는 약 13배 더 빠른 수준입니다. tmpfs는 초당 2억 3,000만~2억 3,900만 회의 읽기에 도달합니다. 커버 레터(cover letter)에 따르면, 기본 완화 기능은 읽기당 사용자/커널 경계 오버헤드를 약 400나노초 추가하며, 이는 TSA의 경우 약 170나노초, SRSO의 경우 230나노초를 부과하여 성능 상한선을 형성합니다.
XFS와 블록 장치(block devices)는 ext4보다 개선 폭이 적어, 각각 64개 스레드에서 약 1.8배 및 2배 향상을 보였습니다. 두 파일 시스템 모두 읽기 시 공유 i_rwsem 잠금을 획득하기 때문에, 참조 카운트 경합(reference-count contention) 문제가 제거된 후에도 잠금 바운싱(lock bouncing) 현상은 여전히 남아있습니다.
64KB 읽기를 사용하는 대용량 folio 읽기 테스트에서, 64개 스레드와 하나의 파일을 사용했을 때, huge tmpfs는 96100k MiB/s에서 13701390k MiB/s로 향상되었고, ext4는 756775k MiB/s에서 13551373k MiB/s로 상승하여 두 경우 모두 상당한 이득을 보였습니다.
단일 스레드 읽기 성능은 유의미한 변화가 없어, 초당 160만190만 회에서 170만200만 회 호출로 이동했습니다. 참조 카운트 경합이 발생하지 않는 곳에서는 패치의 오버헤드 또한 거의 0에 가깝게 유지됩니다.
여전히 RFC 단계
패치들의 제목 줄에는 [RFC PATCH]라고 되어 있습니다. 커널 개발에서 RFC(Request for Comments)는 설계 방향에 대한 피드백을 구하는 패치를 의미합니다. 이는 병합을 위한 공식 제출물은 아닙니다.
커버레터에는 해결되지 않은 7가지 문제가 나열되어 있습니다. PG_rcu_free 페이지 플래그는 64비트 시스템에서만 사용 가능하며, 대규모 구성에서 MGLRU(Multi-Generational LRU, 페이지 회수 알고리즘)가 사용하는 참조 비트 중 하나를 소모합니다. 다른 문제로는 지연된 해제(deferred freeing)를 기다리는 folio들이 어떤 memcg(memory cgroup)에도 계산되지 않는 유예 기간과, 압축 후 pageblock의 지연 해제가 있습니다.
여러 개발자들이 몇 년 전 Matthew Wilcox가 이를 버퍼링 I/O 확장성 한계로 설명한 이후 페이지 캐시 참조 카운팅에 대해 작업해 왔습니다. Shutsemau는 2025년에 직접 이 문제를 다루었으며, Ilya Gladyshev는 여섯 번의 개정을 거치며 다른 접근 방식을 추구했습니다. 이번 새로운 패치들은 이전 시도들이 해결하지 못한 문제들을 기반으로 구축되었습니다.
Torvalds가 LLM을 이용해 작성한 개념 증명(proof of concept)이 6일 만에 공식 RFC 패치 시리즈가 된 속도는 주목할 만하지만, 이제부터는 코드 설계와 품질이 중요합니다. Assisted-by: LLM 태그는 해당 패치가 메일링 리스트 검토를 통과하는지 여부와는 아무런 관계가 없습니다.
원래 Joho no Todai에 게시되었습니다. 일본어 원문은 여기입니다.