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

good-penguin.png

Один из членов команды разработка социальной сети Facebook, Роман Гущин, предложил в рассылке разработчиков набор из патчей для ядра Linux, направленных на улучшение работы с памятью через реализацию нового контроллера управления оной — slab (slab memory сontroller).

Распределение slab — это механизм управления памятью, предназначенный для более эффективного распределения памяти и устранения значительной фрагментации. Основой этого алгоритма является сохранение выделенной памяти, содержащей объект определенного типа, и повторное использование этой памяти при следующем выделении для объекта того же типа. Этот метод был впервые введен в SunOS Джефом Бонвиком и сейчас широко используется в ядрах многих операционных системах Unix, включая FreeBSD и Linux.

В основе нового контроллера лежит перенос учёта slab с уровня страниц памяти на уровень объектов ядра, что предоставляет возможность совместного использования одной slab-страницы в разных cgroup, вместо выделения отдельного кэша для каждой cgroup.

По результатам испытаний следует, что предложенный метод управления памятью позволяет повысить эффективность использования slab до 45%, сократить использование для механизма памяти, а также понизит общее потребление памяти ядром ОС. Также за счет сокращения количества выделяемых под snab страниц уменьшается фрагментация памяти вцелом, что не может не сказаться на быстродействии системы.

Новый контроллер уже несколько месяцев тестируется на рабочих серверах Facebook, и пока это тестирование можно назвать успешным: при отсутствии потерь в быстродействии и увеличивающегося количества ошибок замечено явное уменьшение расхода памяти — на некоторых серверах до 1Гб. Это число довольно субъективно, так, например, ранее проведенные тесты показали немного меньшие результаты:

  • 650–700 МБ на веб-фронтенде
  • 750–800 МБ на сервере с кэшем баз данных
  • 700 МБ на DNS-сервере

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

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

>>> Подробности

©  Linux.org.ru