Facebook представил механизм TMO, позволяющий экономить 20-32% памяти на серверах

Инженеры из компании Facebook (запрещена в РФ) опубликовали отчёт о внедрении в прошлом году технологии TMO (Transparent Memory Offloading), позволяющей значительно экономить оперативную память на серверах за счёт вытеснения не требуемых для выполнения работы вторичных данных на более дешёвые накопители, такие как NVMe SSD-диски. По оценке Facebook, применение TMO позволяет экономить от 20 до 32% ОЗУ на каждом сервере. Решение рассчитано на применение в инфраструктурах, в которых приложения запускаются в изолированных контейнерах. Работающие на стороне ядра компоненты TMO уже включены в состав ядра Linux.

На стороне ядра Linux работа технологии обеспечивается подсистемой PSI (Pressure Stall Information), поставляемой начиная с выпуска 4.20.
PSI уже применяется в различных обработчиках нехватки памяти и позволяет проанализировать информацию о времени ожидания получения различных ресурсов (CPU, память, ввод/вывод) для точной оценки уровня загруженности системы и характера замедления работы в случае нехватки ресурсов.

В пространстве пользователя работу TMO обеспечивает компонент Senpai, который через cgroup2 динамически корректирует ограничение памяти для контейнеров приложений на основании данных, полученных из PSI. Senpai анализирует признаки начала нехватки ресурсов через PSI, оценивает чувствительность приложений к замедлению доступа к памяти и пытается определить тот минимально необходимый контейнеру размер памяти, при котором требуемые для работы данные остаются в ОЗУ, а сопутствующие данные, осевшие в кэше и напрямую не используемые в данный момент, вытесняются в раздел подкачки.


Таким образом, суть TMO в том, чтобы держать процессы на строгой диете с точки зрения потребления памяти, принудительно добиваясь переноса в раздел подкачки неиспользуемых страниц памяти, вытеснение которых заметно не влияет на производительность (например, страницы с кодом, используемым только при инициализации и единично используемые данные в дисковом кэше). В отличие от вытеснения информации в раздел подкачки в ответ на нехватку памяти в TMO данные вытесняются на основании упреждающего прогнозирования и с учётом файлового кэша.

В качестве одного из критериев для вытеснения используется отсутствие обращения к странице памяти в течение 5 минут. Подобные страницы именуются холодными (cold memory page) и в среднем составляют около 35% памяти приложений (в зависимости от вида приложений наблюдается разброс от 19% до 65%). При вытеснении также учитывается активность, связанная с анонимными страницами памяти (память, выделяемая приложением) и памятью, используемую при кэшировании файлов (выделяется ядром). В некоторых приложениях основное потребление связано с анонимной памятью, но в других большое значение имеет и файловый кэш. Для того чтобы избежать дисбаланса при вытеснении памяти в кэш в TMO применяется новый алгоритм подкачки, который вытесняет анонимные страницы и страницы, связанные с файловым кэшем, пропорционально.

Вытеснение редко используемых страниц в более медленную память не сказывается сильно на производительности, но позволяет значительно снизить расходы на оборудование. Данные вытесняются на SSD-накопители или в сжатую область подкачки в оперативной памяти. По стоимости хранения байта данных применение NVMe SSD до 10 раз дешевле использования сжатия в оперативной памяти.


Release. Ссылка here.