Facebook запропонував новий механізм керування пам'яттю slab для ядра Linux

Роман Гущин (Roman Gushchin) з компанії Facebook опублікував у списку розсилки розробників ядра Linux набір патчів з реалізацією нового контролера розподілу пам'яті плита (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-сервері.

Джерело: opennet.ru

Додати коментар або відгук