Linux 7.2 Slab 변경 사항에 더 많은 성능 최적화 포함
LINUX KERNEL
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) 지원을 추가합니다.