URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 114872
[ Назад ]

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

Отправлено opennews , 20-Июл-18 13:04 
Facebook опубликовал (https://code.fb.com/production-engineering/open-sourcing-oom... собственную реализацию обработчика нехватки памяти в системе (OOM, Out Of Memory), работающую в пространстве пользователя. Как и представленный (https://www.opennet.dev/opennews/art.shtml?num=48927) в начале месяца проект earlyoom (https://github.com/rfjakob/earlyoom/), разработка Facebook нацелена на более оперативное и выборочное завершение работы процессов, потребляющих слишком много памяти, на стадии до срабатывания OOM-обработчика  ядра Linux. Код oomd написан на языке C++ и поставляется (https://github.com/facebookincubator/oomd) под лицензией GPLv2. Oomd уже используется в инфраструктуре Facebook и хорошо зарекомендовал себя при промышленных нагрузках (в частности, проект позволил почти полностью избавиться от возникновения на серверах длительных livelock-блокировок (https://en.wikipedia.org/wiki/Deadlock#Livelock)).


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


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


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

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

URL: https://code.fb.com/production-engineering/open-sourcing-oom.../
Новость: https://www.opennet.dev/opennews/art.shtml?num=48994


Содержание

Сообщения в этом обсуждении
"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 13:04 
Ну вот, а в прошлой новости earlyoom кто-то костылями называл. А оказывается метод вполне годный. Особенно вкусен PSI, удивительно, что раньше никто не додумался такое сделать. Если, что и называть костылём, так это LA, который на многопроцессорных системах бесполезное сферическое состояние в вакууме показывает.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено нах , 20-Июл-18 14:26 
Ну вот, а в прошлой новости earlyoom кто-то костылями называл. А оказывается на таких костылях САМ Пейсбук ковыляет!

поправил, не благодарите.


"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:18 
У вас, видимо, галлюцинации - вы не можете отличить задачу от её решения, и решения друг от друга. Да, earlyoom костыль. Нет, это не значит что сабж костыль.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:47 
Оба - костыли. И оба хороши, так как плзволяют пациенту вылечить баг с плохой обработкой OOM.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 19:43 
Оба костыли. И вообще ЭВМ - набор костылей.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено iPony , 20-Июл-18 13:05 
Вот это годно, и интересно.

А то как посмотрел "Как и представленный в начале месяца проект earlyoom" - у меня грива встала от такого плохого кода...


"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 15:42 
Тем не менее, earlyoom прекрасно справляется со своей задачей.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:18 
Earlyoom вообще не справляется. А это очень даже может быть.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:26 
>Earlyoom вообще не справляется

Дичь втираешь


"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено 123 , 20-Июл-18 13:28 
Под правильной лицензией.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 13:39 
Так предложенная же для включения в состав ядра Linux.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 13:53 
столман считает GPLv2 не бого угодно, тут же столько дыр .. так что стоит писать - "не под той лицензией выпустили!"

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 21-Июл-18 11:14 
Под неправильной. Правильные - BSD/MIT, а не это.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Michael Shigorin , 21-Июл-18 19:24 
> Под неправильной. Правильные - BSD/MIT, а не это.

О, у нас очередной желающий потратить кучу времени и написать вместо глупого комментария что-нить полезное в http://wiki.opennet.ru/LicenseComparison :)


"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 25-Июл-18 11:55 
Но позвольте, в сравнении нет столбика "правильная лицензия".

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено ryoken , 20-Июл-18 13:29 
Что-то сегодня прут новсти про работу с памятью. День что ли такой? :)

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 19:19 
День памяти!

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Тот еще аноним , 20-Июл-18 13:38 
Из-за нехватки памяти Facebook открыл код для обработки ситуации нехватки памяти.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 14:05 
Зришь в корень, мой брат от другой матери. Сначала создадут проблему индусо-кодом, а потом изобретают решение для нее. Но, исходная-то проблема жива!

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 13-Янв-21 12:05 
Это называется абстракции :)
И да, любую проблему можно решить абстракциями, кроме проблемы слишком большого числа абстракций :)))

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 15:08 
Сейчас придет Торвальдс и обзовет всех кто разрабатывал все эти костыли.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:49 
пускай чинит ядерный оомк

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 19:45 
Чтобы его починить надо половину ядра перелопатить. Потому что там не один баг и не одна подсистема глючит.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 23:53 
Зачем теперь чинить ядро, если уже появились прекрасные костыли^W юзерспейсные предотвратители OOM?

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 15:28 
А подводные камни есть?

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Вареник , 20-Июл-18 18:29 
Ну какие могут быть подводные камни в killянии серверных программ...

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 15:51 
Netflix решил проблемы без oom, у них  есть большой спец по прокладке и профилированию.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Cloud , 20-Июл-18 17:06 
Brendan Greg ?

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 17:15 
В точку! 😁

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Anonim , 20-Июл-18 23:41 
напишите пожалуйста еще ссылки на годные блоги ;)

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 15:53 
Почему то в FreeBSD с ARC таких проблем нет

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:19 
Нет памяти, нет проблем.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено . , 20-Июл-18 16:29 
> Почему то в FreeBSD с ARC таких проблем нет

угу, там просто мертво виснет вся система. А люди, имеющие права коммита, уже второй год старательно игнорируют работающее (хотя и частичное) решение. При этом своей квалификации у них нет - вся "работа" - копипаста из апстрима.

Последний раз кто-то даже сжалился, и принудительно назначил еще одного ревьюера...и тишина...


"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено abi , 23-Июл-18 12:18 
На FreeBSD все гораздо веселее. У меня дома сервер с виртуалками и, значит, если виртуалка запущена и ничего не делает, то ее память через сутки оказывается целиком в свопе. Покуда своп есть, а свободная память идет под ARC. И, стало быть, виртуалки резко оживают, ARC не успевает сократиться, своп забит, в итоге - OOM.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 15:57 
Building and installing

Note that oomd requires PSI to function. This kernel feature has not yet been upstreamed (as of 7/18/18).

oomd currently depends on meson, libfolly, and jsoncpp. The dependency on folly will soon be removed (as of 7/18/18).

Можете объяснить что это - PSI, meson, libfolly?


"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:12 
Psi - xmpp

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено имя , 21-Июл-18 17:05 
Про PSI написано в новости, да и вообще там, откуда ты это скопипастил, есть ссылки на всё.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:07 
Понабрали пхпшников, а потом память течет

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:32 
hhvm течет всегда и не только pho но и hacklang

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 16:36 
Вместо open пусть в ядро запишут gc

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 17:22 
Странно, что фейсбук не ввел лайки для процессов. Чем больше лайков - тем выше приоритет :)

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено vantoo , 20-Июл-18 17:48 
То есть теперь на десктропе будут как на Андроиде закрываться программы, которые давно не использовались?

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 18:04 
Да, час бездействия - получает SIGKILL.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 20-Июл-18 23:55 
Верно ли, что эта штука не запустится на стабильных дистрибутивах, потому что в них еще не завезли PKI?

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 21-Июл-18 00:13 
PSI конечно же я имел в виду.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 21-Июл-18 02:00 
Мне одному кажется, что проблема не в OOM, а в нерабочем свапе в новых ядрах?

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 21-Июл-18 08:23 
В насколько новых? В 4.9 все прекрасно свопится.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноне , 21-Июл-18 10:37 
Тем временем отлаживал прогу в VS на оффтопике, где цикл уходил в бесконечность - приложение скушало всю память, и, традиционно, система зависла на минут 7, потом очень долго отмораживалась и выбросила наконец-то исключение.
А под линью без свопа просто останавливается, почему-то не убивает процессы.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 21-Июл-18 10:47 
А разгадка проста:

With or without swap it still freezes before the OOM killer gets run automatically. This is really a kernel bug that should be fixed (i.e. run OOM killer earlier, before dropping all disk cache). Unfortunately kernel developers and a lot of other folk fail to see the problem. Common suggestions such as disable/enable swap, buy more RAM, run less processes, set limits etc. do not address the underlying problem that the kernel's low memory handling sucks camel's balls.


"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 21-Июл-18 16:36 
> А разгадка проста:
> With or without swap it still freezes before the OOM killer gets
> run automatically.

Да ладно. Я без свопа сижу и фриз иногда даже не заметен.
Всего-то нужно vm.pageout_oom_seq выставить на 2-3 вместо 10 по умолчанию.


"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено iPony , 21-Июл-18 12:52 
А вот если под линуксом был своп, то уже — пришлось бы делать хард ребут

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 21-Июл-18 14:12 
Alt + SysRq + K обычно хорошо срабатывает (если предварительно включена поддержка).

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено letsmac , 22-Июл-18 16:47 
Пройтись статическим анализатором по оффтопику?

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 22-Июл-18 17:02 
Нет.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноне , 22-Июл-18 22:18 
Я не за оффтопик. Я про зависон.

"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено Аноним , 22-Июл-18 21:58 
> Код oomd написан на языке C++

Фи, как не современно!


"Facebook открыл код для обработки ситуации нехватки памяти в..."
Отправлено ымыныны , 23-Июл-18 16:37 
Зато очень современно - писать с ошибками.