Роман Гущин (Roman Gushchin) из компании Facebook опубликовал в списке рассылки разработчиков ядра Linux набор патчей с реализацией нового контроллера распределения памяти slab (slab memory controller). Новый контроллер примечателен переносом учёта slab с уровня страниц памяти на уровень объектов ядра, что даёт возможность совместно использовать slab-страницы в разных cgroup, вместо выделения отдельных кэшей slab для каждой cgroup.
Предложенный подход позволяет повысить эффективность использования slab, на 30-45% сократить размер используемой для slab памяти и значительно уменьшить общее потребление памяти ядром. За счёт сокращения числа неперемещаемых slab также наблюдается положительный эффект в области снижения фрагментации памяти. Новый контроллер памяти заметно упрощает код для учёта slab и не требует применения усложнённых алгоритмов динамического создания и удаления slab-кэшей для каждой cgroup. Все cgroup для памяти в новой реализации используют общий набор кэшей slab, а время жизни кэшей slab больше не привязано к времени жизни установленных через cgroup ограничений на использование памяти.
Реализованный в новом контроллере slab более точный учёт ресурсов теоретически должен больше нагружать CPU, но на практике различия оказались несущественными. В частности, новый контроллер slab уже несколько месяцев используется на рабочих серверах Facebook, обрабатывающих разные виды нагрузки, и заметных регрессий пока не выявлено. При этом наблюдается существенное снижение расхода памяти — на некоторых хостах удалось сэкономить до 1ГБ памяти, но данный показатель сильно зависит от характера нагрузки, общего размера ОЗУ, числа CPU и особенностей работы с памятью. Ранее проведённые тесты показали снижение расхода памяти на 650-700 МБ (42% от slab-памяти) на web-фронтэнде, 750-800 МБ (35%) на сервере с кэшем СУБД и 700 МБ (36%) на DNS-сервере.