LINUX.ORG.RU

Убунтята, не проходите мимо: le9 patch добавлен в linux-xanmod и ваш OOM killer будет вылечен

 , , ,


5

4

Тред https://forum.xanmod.org/thread-4102-post-7572.html

Патч https://github.com/hakavlad/le9-patch

В чем дело?

Линуксы зависают при нехватке памяти: Линукс ядро не может мягко обрабатывать ситуации с нехваткой памяти

Решение: запрет на вытеснение определенного объема файловых страниц. Это обеспечивает этот самый патч, и киллер приходит быстро, система не виснет.

Патч принят в pf-kernel и linux-xanmod. linux-xanmod предоставляет бинарные сборки для deb-дистрибутивов.

Скачать бесплатно https://xanmod.org/

★★★

Последнее исправление: hakavlad (всего исправлений: 1)

На ядре NT, если я правильно понимаю, ситуация обстоит чуть лучше, потому что контроль рабочего набора осуществляется не глобально, а per process.

Каждый раз, когда процессу требуется добавить в рабочий набор страницу, а свободной физической памяти нет, система имеет возможность решить, за счёт чего она будет изыскивать свободную страницу: выполняя откачку памяти из рабочего набора этого конкретного процесса, или же глобально.

В линукс же алгоритм откачки страниц всегда выполняется глобально.

wandrien ★★
()
Ответ на: комментарий от anonymous

ШТО

Ничего. Сегодня мой юмор что-то вообще никто на этом сайте не понимает.

Какое это имеет отношение к тому, что ты выбрал меленную подкачку вместо быстрой?

А какое отношение скорость подкачки имеет к процессам, которые в ней не нуждаются?

wandrien ★★
()
Ответ на: комментарий от anonymous

скорость устройства можно замерить

anonymous
()
Ответ на: комментарий от wandrien

А какое отношение скорость подкачки имеет к процессам, которые в ней не нуждаются?

Все процессы сидят в одной лодке, и в подкачке нуждаются не отдельные процессы, а вся система, ибо доступная память таки общая, и либы в памяти частично общие.

Что касается zram vs HDD: своппинг на zram к тому же многопоточен.

anonymous
()
Ответ на: комментарий от anonymous

Все процессы сидят в одной лодке, и в подкачке нуждаются не отдельные процессы, а вся система, ибо доступная память таки общая, и либы в памяти частично общие.

Я об этом и говорю, что система не разбирает, кто сколько памяти потребляет. А нужно — разбирать.

wandrien ★★
()
Ответ на: комментарий от darkenshvein

не бугурть, тред актуален еще, вскрыта свежая тема

anonymous
()
Ответ на: комментарий от post-factum

создание надуманной проблемы

проблема существует независимо от нас, существует объективно

героическое её решение

не героическое, а лёгкое решение путем легкой правки патча le9

anonymous
()
Ответ на: комментарий от Exmor_RS

Эти худшие практики возникают не на пустом месте.

Применение худших простительно для новичков. Но в данном случае форумчанин сознательно применяет худшие практики когда знает о существовании лучших практик. И жалуется на эти худшие практики, будто бы лучшие практики еще не открыты.

anonymous
()
Ответ на: комментарий от post-factum

Что непонятно? Где что непонятно?

anonymous
()
Ответ на: комментарий от post-factum

…путём рандомного принудительного mlock()’а?

Так там не mlock. Просто патч ПОЗВОЛЯЕТ не вытеснять анонимку, если ее объем начнет угрожать отзывчивости. Если анонимки остается единицы и десятки МБ - отзывчивость падает, хотя и не так сильно, как в случае с файл кэшем. И не РАНДОМНОГО, а на наиболее активную анонимку.

anonymous
()
Ответ на: комментарий от anonymous

Да нет этих лучших практик.

Лучшими их считаешь ты, потому что тебе помогло в твоих конкретных случаях и ты не сталкивался со случаями когда не помогает, вот и всё.
Обыкновенная неспособность понять и принять опыт другого человека.

Exmor_RS ★★★
()
Ответ на: комментарий от wandrien

Такие параметры:

Двое суток использую xanmod ядро с этими параметрами и комбинированным zram/hdd свопом.

Поведение системы под swap-нагрузкой заметно более плавное, чем на ванилле.

Память в основном неконтроллируемо жрет firefox и еще предположительно что-то течет ресурсами, раздувая память в Xorg.

wandrien ★★
()
Ответ на: комментарий от Exmor_RS

Да нет этих лучших практик.

Есть.

hakavlad ★★★
() автор топика
Ответ на: комментарий от wandrien

и да, заголовок 4.2
Линуксы зависают при нехватке памяти:

и при хватке тоже!

darkenshvein ★★★★★
()
Ответ на: комментарий от hakavlad

это патч, помогающий противостоять обнулению анонимки, если разрастается zram в оперативе (документации, правда, в патче нет к новому ключу)

И как это поможет при разрастании zram?

zram вообще каким типом памяти считается?

wandrien ★★
()
Ответ на: комментарий от wandrien

zram вообще каким типом памяти считается?

Память модуля zram не относится к спискам LRU и не отображается в /proc/meminfo. Тёмная ядерная материя, так сказать.

И как это поможет при разрастании zram?

Киллер сработает до того, как размер анонимной памяти уменьшится до околонулевых значений. Последствия:

  • предотвращение бага https://github.com/hakavlad/le9-patch/issues/6 - он как раз проявляется при вытеснении практически всей анонимки в своп. Сохранение некоторого объема анонимки до вызова киллера может предотвращать баг;
  • меньше падает отзывчивость перед ООМ в этих случаях - киллер вызывается до вытеснения рабочего набора в своп. В стандартном le9 защищается только файловая часть рабочего набора. Дополнительная защита анонимной части рабочего набора решает две проблемы.
hakavlad ★★★
() автор топика
Ответ на: комментарий от post-factum

Почему бы все эти ограничения снизу не сделать через cgroups?

Это слишком сложно. Это ж в каждом слайсе memory.min прописывать. Это неудобно. Плюс это не работает без unified cgroup hierarchy. И ты уверен, что memory.min защищает только анонимку?

Способ через патч проверен и работает отлично.

hakavlad ★★★
() автор топика
Ответ на: комментарий от post-factum

Просто реальный пример из жизни.

2 гига памяти, 6 гиг своп на zram. Открываем браузеры, открываем много вкладок, запускаем supertuxkart, продолжает открывать вкладки. zram разрастается, размер списков анонимной памяти уменьшается. При околонулевом размере анонимки происходит OOM. С драйвером i915 ко всему прочему проявляется описанный выше баг - гуй замирает, переходим в соседнюю виртуальную консоль и видим в журнале BUG. Резервация пары сотен МБ анонимки может предотвращать это. ООМ проиходит немного раньше, но зато без BUG и до вытеснения анонимной части рабочего набора в своп.

hakavlad ★★★
() автор топика
Последнее исправление: hakavlad (всего исправлений: 4)
Ответ на: комментарий от anonymous

предотвращать панику с le9 и i915

Не панику, а всего лишь Oops

hakavlad ★★★
() автор топика
Ответ на: комментарий от hakavlad

Поставил zswap на треть ОЗУ, послежу за разницей.

Удалось загнать систему в длительный лаг при помощи запуска штук восьми:

seq -sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1 100000000 | tail &

Если только две запускать, они умирают, похоже, намного раньше, чем начинается выгрузка в реальный своп. Неужели он так эффективно жмет?…

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от wandrien

Если только две запускать, они умирают, похоже, намного раньше

выстави overcommit=1. Они умирают от невозможности выделить виртуальную память скорее всего.

с overcommit=1 1 процесс ушел с своп на 18ГБ и до сих пор не завершился.

~$ oom-sort
oom_score oom_score_adj  UID   PID Name            VmRSS   VmSwap   cmdline
--------- ------------- ---- ----- --------------- ------- -------- -------
      985             0 1000 19199 tail             6766 M  16610 M tail
hakavlad ★★★
() автор топика
Последнее исправление: hakavlad (всего исправлений: 1)
Ответ на: комментарий от wandrien

Удалось загнать систему в длительный лаг

у меня длительного лага не бывает с такими мелочами. Если только собирать ядрос более 500 потоками.

hakavlad ★★★
() автор топика
Ответ на: комментарий от anonymous

Или если я пользователь, то не могу предположить, что например, сервер в конторе может и скувыркнуться под обилием виртуалок?

Если у тебя виртуалки полезли в своп, это плохо, это заметно, и ты добавишь память. Но система не упадёт, так как ты же не пожалел на своп гигов 15-20? Или пожалел? Ну тогда ССЗБ.

AS ★★★★★
()
Ответ на: комментарий от wandrien

Держи синтетику: https://github.com/hakavlad/nohang-extra/blob/master/mem-load/mem-load

Что она делает? Складывает случайные числа в список.

Что можно настраивать?

  • сколько миллионов чисел поместить в список;
  • сколько раз повторить процедуру - после наполнения списка можно перезаписать элементы списка новыми числами;
  • сколько процессов запустить.

Пример:

./mem-load 999 0 8

В этом примере 8 процессов наполнят свою память списками по 999000000 случайных чисел.

Демо с этой же командой: https://www.youtube.com/watch?v=1uhcZwuvXLI

Запускаем этот cтресс, играем с supertux.

Конфиг vm:

vm.anon_min_kbytes=250000
vm.clean_min_kbytes=250000

Mem_total=9.6G, zram mem_used_total=8.7G (пиковое потребление памяти модулем zram), swap total = 38.2G.

В фоне работает nohang в режиме только мониторинга kmsg - уведомляет об OOM.

Степень сжатия получается примерно 2.5:1.

Есть ли на видео длительные лаги?

hakavlad ★★★
() автор топика
Ответ на: комментарий от hakavlad

Там же киллер довольно быстро срабатывает, о чем получаем гуи уведомления. Гуй все время жив.

hakavlad ★★★
() автор топика
Ответ на: комментарий от hakavlad

Mem_total=9.6G, zram mem_used_total=8.7G (пиковое потребление памяти модулем zram)

Опечатка же. mem_used_max=8.7G, а не mem_used_total. mem_used_total постоянно меняется.

hakavlad ★★★
() автор топика
Ответ на: комментарий от hakavlad

Однохренственно. Вот лог с overcommit = 0, но с 1 то же самое:

июл 10 15:46:42 aquila kernel: Mem-Info:
июл 10 15:46:42 aquila kernel: active_anon:218784 inactive_anon:1207783 isolated_anon:32
                                   active_file:20351 inactive_file:16304 isolated_file:0
                                   unevictable:2470 dirty:19 writeback:0
                                   slab_reclaimable:13741 slab_unreclaimable:58796
                                   mapped:31742 shmem:146438 pagetables:10826 bounce:0
                                   free:25575 free_pcp:367 free_cma:0

<SKIP>

июл 10 15:46:42 aquila kernel: Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
июл 10 15:46:42 aquila kernel: 184602 total pagecache pages
июл 10 15:46:42 aquila kernel: 1479 pages in swap cache
июл 10 15:46:42 aquila kernel: Swap cache stats: add 32913749, delete 32914465, find 454223/986500
июл 10 15:46:42 aquila kernel: Free swap  = 0kB
июл 10 15:46:42 aquila kernel: Total swap = 8388604kB
июл 10 15:46:42 aquila kernel: 2075020 pages RAM
июл 10 15:46:42 aquila kernel: 0 pages HighMem/MovableOnly
июл 10 15:46:42 aquila kernel: 60857 pages reserved
июл 10 15:46:42 aquila kernel: 0 pages hwpoisoned

<SKIP>

июл 10 15:46:42 aquila kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=lightdm.service,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1000.slice/session-2.scope,task=tail,pid=23910,uid=1000
июл 10 15:46:42 aquila kernel: Out of memory: Killed process 23910 (tail) total-vm:10050200kB, anon-rss:4844544kB, file-rss:1228kB, shmem-rss:0kB, UID:1000 pgtables:19704kB oom_score_adj:0

wandrien ★★
()
Ответ на: комментарий от ZenitharChampion

Если используешь только zram, достаточно выставить vm.clean_low_kbytes (там по умолчанию уже выставлено).

Если используешь реальный своп, то лучше vm.clean_min_kbytes тоже подкрутить.

wandrien ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.