Новый метод управления памятью от Facebook

Один из членов команды разработки социальной сети 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-сервере

>>> Страничка автора на GitHub


>>> Результаты ранних тестов

Источник: linux.org.ru