Facebook открыл код для обработки ситуации нехватки памяти в системе

20 июля 2018 года

Facebook опубликовал (Архивная копия от 25 сентября 2018 на Wayback Machine) собственную реализацию обработчика нехватки памяти в системе (OOM, Out Of Memory), работающую в пространстве пользователя. Как и представленный в начале месяца проект earlyoom, разработка Facebook нацелена на более оперативное и выборочное завершение работы процессов, потребляющих слишком много памяти, на стадии до срабатывания OOM-обработчика ядра Linux. Код oomd написан на языке C++ и поставляется под лицензией GPLv2. Oomd уже используется в инфраструктуре Facebook и хорошо зарекомендовал себя при промышленных нагрузках (в частности, проект позволил почти полностью избавиться от возникновения на серверах длительных livelock-блокировок).

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

Поддерживается подключение различных модулей для определения нехватки памяти (oomdetector) и завершения процессов (oomkiller). В процессе работы для мониторинга за потреблением ресурсов используются cgroup2 и подсистема PSI (Pressure Stall Information), несколько дней назад предложенная для включения в состав ядра Linux. PSI разработан в Facebook и позволяет проанализировать информацию о времени ожидания получения различных аппаратных ресурсов для определённых задач или наборов процессов в cgroup.

В контексте OOM подсистема PSI позволяет выявить начало возникновения задержек из-за нехватки ресурсов на стадии когда система ещё не находится в критическом состоянии и не начинает интенсивно урезать кэш и вытеснять данные в раздел подкачки. Кроме оценки нагрузки на систему памяти в PSI также учитывается нагрузка на CPU и ввод/вывод. По сути PSI можно рассматривать как более информативный индикатор перегрузки и механизм для отслеживания изменения нагрузки во времени, более точно отражающий реальную ситуацию по сравнению с метрикой LA (Load Average).

Проведённые синтетические тесты показали, что реализация OOM-обработчика в пространстве пользователя продемонстрировала более высокую эффективность и надёжность, по сравнению со штатным OOM killer ядра Linux. Ниже на графиках приведено сравнение oomd и OOM killer при тестировании постепенного запроса процессом 2 Гб ОЗУ в течение 120 секунд в условиях нехватки памяти (значения выше 120 следует рассматривать как поведение, приводящее к снижению производительности).

Источники править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Facebook открыл код для обработки ситуации нехватки памяти в системе», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.