LINUX.ORG.RU

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

 , , ,


4

3

Тред 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/

Ответ на: комментарий от ValdikSS
Your post was removed because it has been identified as either blog-spam, a link aggregator, or an otherwise low-effort news site. Your submission contains re-hosted content, usually paired with privacy-invading ads, without adding to the discussion.

Please re-post your submission using the original source with the original title. If there's another discussion on the topic, your link is welcome to be submitted as a top level comment to aid the previous discussion.

Вариант - перенести пост на известную площадку (github pages? - там и комментировать удобно будет) и уже потом разнести по реддитам.

hakavlad ★★ ()

А в ядре есть готовый алгоритм для того, чтобы сканировать адресное пространство конкретного процесса (для поиска страниц-кандидатов на откачку)?

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

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

А как вам такое:

В Linux можно включать и отключать OOM-Killer (хотя последнее не рекомендуется). Для включения и отключения используйте параметр vm.oom-kill

https://habr.com/ru/company/southbridge/blog/464245/

Параметра vm.oom-kill вообще не существует. Где они этот бред находят?

hakavlad ★★ ()

Не убунтята , а линуксоиды есть вообще только три вида систем в зоопарке юникса остальное только названия компаний сусе , редхат , кде все это корпорации так что есть всего три оси линукс , андроид и хромиум он же хром

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

тейл не вытесняет анонимку (точнее не раздувает zram настолько, что в своп вытесняется значительная часть анонимки), зачем с ним тестить. Тестить стоит с чем-то малосжимаемым. Ко всему прочему рекомендуется следить за показателями через mem2log.

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

https://notes.valdikss.org.ru/linux-for-old-pc-from-2007/

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

Подходят при любом размере. Ибо можно настраивать пороги - хоть в 0 выставить. earlyoom полезен на малинке.

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

Спасибо за сборку. Протестировал на двух унылых системах с квадкорами (c2q и amd a8) и 2 и 3 гигами памяти. При моем привычном использовании забило всю память, свапилось как ни в себя, но работало без проблем.

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

Вот прямо сейчас гоняю rpi3 с самосборным ядром с le9 патчем.
Система больше не встаёт колом, свапится адекватно, вкладки в хроме открываются, музыка фоном играет без прерываний)

https://imgur.com/a/aU9joHf

// Поставил на zram сжатие zstd, 722 метров свапа ужало в 185. Моё почтение.

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

Для снижения потребления памяти в Firefox установите опцию Максимальное число процессов контента = 2 (Content process limit = 2) в настройках производительности браузера.

Почему не 1? Разве не лучше экономить больше?

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

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

кстати https://docs.microsoft.com/en-us/sysinternals/downloads/cacheset

Published: November 1, 2006

CacheSet is an applet that allows you to manipulate the working-set parameters of the system file cache.

Винда очень давно научилась защищать рабочий набор.

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

Мы проверяем CONFIG опции на неотрицательные значения во время компиляции:

#if CONFIG_CLEAN_LOW_KBYTES < 0
#error "CONFIG_CLEAN_LOW_KBYTES must be >= 0"
#endif

А нужно делать это до компиляции, через Kconfig, опция range. Например:

config CLEAN_MIN_KBYTES
	int "Default value for vm.clean_min_kbytes"
	depends on SYSCTL
	range 0 4294967295
	default 0

Вопросы такие:

Какой диапазон range задать, чтоб все было ок?

Еще вопрос по обработке sysctl. У нас так:

		.proc_handler	= proc_doulongvec_minmax,

Что позволяет задавать sysctl до 18 446 744 073 709 551 615.

В то время как unsigned long обычно ограничен 4 294 967 295. То есть у нас:

unsigned long sysctl_clean_low_kbytes __read_mostly = CONFIG_CLEAN_LOW_KBYTES;

Может ли это привести к аномалиям?

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

Чем плох такой вариант?

sysctl кнопки имеют макс размер ULONG_MAX:

config CLEAN_LOW_KBYTES
	int "Default value for vm.clean_low_kbytes"
	depends on SYSCTL
	range 0 18446744073709551615
	default 0

config CLEAN_MIN_KBYTES
	int "Default value for vm.clean_min_kbytes"
	depends on SYSCTL
	range 0 18446744073709551615
	default 0

проверяем на всякий случай верхнюю границу, а не нижнюю - на случай нестандартных архитектур и компиляторов.

#if CONFIG_CLEAN_LOW_KBYTES > ULONG_MAX
#error "CONFIG_CLEAN_LOW_KBYTES must be <= ULONG_MAX"
#endif

#if CONFIG_CLEAN_MIN_KBYTES > ULONG_MAX
#error "CONFIG_CLEAN_MIN_KBYTES must be <= ULONG_MAX"
#endif

здесь форсируем границы в пределах 0 - ULONG_MAX:

	{
		.procname	= "clean_low_kbytes",
		.data		= &sysctl_clean_low_kbytes,
		.maxlen		= sizeof(unsigned long),
		.mode		= 0644,
		.proc_handler	= proc_doulongvec_minmax,
		.extra1		= &zero_ul,
		.extra2		= &long_max,
	},
	{
		.procname	= "clean_min_kbytes",
		.data		= &sysctl_clean_min_kbytes,
		.maxlen		= sizeof(unsigned long),
		.mode		= 0644,
		.proc_handler	= proc_doulongvec_minmax,
		.extra1		= &zero_ul,
		.extra2		= &long_max,
	},

Есть ошибки?

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

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

Нет уж, я подожду решения от дистрибьюторов.

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

И итоговое решение:

config CLEAN_LOW_KBYTES
	int "Default value for vm.clean_low_kbytes"
	depends on SYSCTL
	range 0 4294967295
	default 0

Здесь на этапе конфигурирования мы уверены, что число влезет в UL.

	{
		.procname	= "clean_low_kbytes",
		.data		= &sysctl_clean_low_kbytes,
		.maxlen		= sizeof(unsigned long),
		.mode		= 0644,
		.proc_handler	= proc_doulongvec_minmax,
	},

Дополнительные .extra не нужны - proc_doulongvec_minmax уже делает проверки:

 Reads/writes up to table->maxlen/sizeof(unsigned long) unsigned long values from/to the user buffer, treated as an ASCII string.

This routine will ensure the values are within the range specified by table->extra1 (min) and table->extra2 (max). 

https://www.kernel.org/doc/htmldocs/filesystems/API-proc-doulongvec-minmax.html

И валидация CONFIG опций при сборке тогда тоже не нужны.

anonymous ()

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

К слову, Винда, 8ка (может даже и 7ка так могла, но я ей не пользовался), при нехватке памяти заблаговременно предлагает пользователю закрыть приложение (причем говорит какое именно вскоре приведет к полной растрате всей памяти), чтобы не потерять данные. Все работает быстро, без зависаний, лишь с незначительными лагами. В Linux оом килеер похоже действительно киллер, без диалога...

Ну и в принципе из коробки подсистема подкачки работает адекватнее, выгружая неактивные страницы из озу, даже когда в озу куча места. Это политику можно назвать «всегда готов», т.к. в Винде память более готова к запуску больших приложений, а Linux может это повергнуть во временный шок, когда нужно срочно выкачать в споп неактивные страницы, чтобы какой-нить 100мегапиксельный raw загрузить например...

Впрочем говорят и в Linuxе можно такую политику работы с неактивными страницами получить, но нужно какие-то конфиги править... Я не пробовал, но то что это в 2021 массово не применяется - намекает о том что с этим есть какие-то проблемы...

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

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

Ага. В итоге винда тормозит одновременно от сваппинга и io и до кучи жалуется на нехватку ОЗУ.
Адекватность уровня Редмонт.

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

Вообще, винда странно себя ведёт подчас. Может она там память оптимизирует или что, но если винду оставить в покое, то через некоторое время процесс «System» начинает грузить одно ядро, и это может продолжаться минут 20. Что там происходит, я не знаю. Но это очень раздражает на лэптопе, потому что он сразу начинает гудеть вентиляторами.

rupert ★★★★★ ()