Один із членів команди розробки соціальної мережі Facebook, Роман Гущин, запропонував у розсилці розробників набір з патчів для ядра Linux, спрямованих на поліпшення роботи з пам'яттю через реалізацію нового контролера управління slab (slab memory сontroller).
Розподіл slab - це механізм управління пам'яттю, призначений для більш ефективного розподілу пам'яті та усунення значної фрагментації. Основою цього алгоритму є збереження виділеної пам'яті, що містить об'єкт певного типу, та повторне використання цієї пам'яті при наступному виділенні для об'єкта того самого типу. Цей метод був вперше введений у SunOS Джефом Бонвіком і зараз широко використовується в ядрах багатьох операційних систем Unix, включаючи FreeBSD та Linux.
В основі нового контролера лежить перенесення обліку slab з рівня сторінок пам'яті на рівень об'єктів ядра, що надає можливість спільного використання однієї slab-сторінки в різних cgroup замість виділення окремого кешу для кожної cgroup.
За результатами випробувань слід, що запропонований метод керування пам'яттю дозволяє підвищити ефективність використання slab до 45%, і навіть знизить загальне споживання пам'яті ядром ОС. Також за рахунок скорочення кількості виділених під slab сторінок зменшується фрагментація пам'яті в цілому, що не може не зашкодити швидкодії системи.
Новий контролер вже кілька місяців тестується на робочих серверах Facebook, і поки це тестування можна назвати успішним: за відсутності втрат у швидкодії та збільшення кількості помилок помічено явне зменшення пам'яті — на деяких серверах до 1Гб. Це число досить суб'єктивне, так, наприклад, раніше проведені тести показали трохи менші результати:
- 650-700 МБ на веб-фронтенді
- 750-800 МБ на сервері з кешем баз даних
- 700 МБ на DNS-сервері
Джерело: linux.org.ru