Linux 7.2 Slab 변경 사항에 더 많은 성능 최적화 포함
요약
Linux 7.2 커널의 Slab 할당기 성능 최적화 사항을 다룹니다. freelist 구축 지연 및 partial slab 배치 처리 개선을 통해 할당 성능을 높였으며, LLVM Clang의 할당 토큰 지원을 통한 kmalloc 캐시 분할 최적화도 포함됩니다.
핵심 포인트
- freelist 구축을 벌크 할당 이후로 연기하여 객체당 처리 시간 대폭 감소
- partial slab의 배치 단위 분리 및 재부착을 통해 mmap 성능 2~5% 향상
- LLVM Clang 22++의 할당 토큰을 활용한 kmalloc 캐시 분할 최적화
Linux 7.2 Slab 변경 사항에 더 많은 성능 최적화 포함

Linux 7.2를 위한 흥미로운 slab 성능 작업 중에는 새로운 slab으로부터 벌크 할당 (bulk allocation)이 이루어진 이후까지 freelist 구축을 연기하도록 하는 변경 사항이 있습니다. ZTE의 Shengming Hu는 해당 변경 사항에서 다음과 같이 언급했습니다:
"slub_bulk_bench에서, CONFIG_SLAB_FREELIST_RANDOM=n일 때는 객체당 시간이 약 42%에서 70% 감소하며, CONFIG_SLAB_FREELIST_RANDOM=y일 때는 약 58%에서 69% 감소합니다. 이 벤치마크는 이 변경 사항으로 인해 제거된 비용을 격리하기 위해 설계되었습니다: 각 반복은 새로운 slab으로부터 정확히 slab->objects만큼을 할당합니다. 이는 연기된 freelist 구축(deferred freelist construction)에 있어 거의 최상의 시나리오를 만듭니다. 왜냐하면 이전 경로는 객체가 남아있지 않을 때도 전체 freelist를 구축했지만, 새로운 경로는 해당 작업을 피하기 때문입니다. 실제 워크로드(workloads)에서는 할당이 이 새로운 slab 리필 경로에 얼마나 자주 도달하는지에 따라 더 작은 엔드 투 엔드(end-to-end) 이득을 볼 수 있습니다."
SLUB 할당기(allocator)를 위한 또 다른 흥미로운 변경 사항은 부분 slab(partial slabs)을 배치(batch) 단위로 분리 및 재부착하는 것입니다. Hao Li는 이를 통해 mmap()에서 작은 성능 이점을 확인했다고 언급했습니다:
"will-it-scale mmap 벤치마크는 이 패치를 적용한 후 2% ~ 5%의 성능 향상을 보여줍니다."
이후 병합된 Linux 7.2를 위한 slab pull request는 또한 할당된 객체 유형에 따라 kmalloc 캐시를 더 스마트하게 분할하기 위해, LLVM Clang 22++의 컴파일러 기능으로서 할당 토큰(allocation tokens) 지원을 추가합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Phoronix의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기