LINUX.ORG.RU

Очередной псевдо-12309

 , ,


1

3

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

Сразу скажу. Если и приходил 12309, то я не понял, что это был именно он. Так что, можно считать, что с 12309 я не общался.

Глухие висяки при свопинге были, но сейчас их нет. То ли замена HDD на SSD, то ли пятое ядро, которое позволило правда отключить системный планировщик ввода-вывода... То ли у меня просто получилось-таки подстроить как надо... Нет сейчас этих висяков. Память заполняется, своп заполняется, все идет как надо. Oom killer мне не нужен. Доставлю памяти, сколько возможно, растяну своп раздел (я предусмотрел такую нужду и обеспечил возможность).

Но есть одно НО. Я все же хочу промоделировать ситуацию, когда хорошо настроенной системой на десктопе сможет пользоваться простой человек, который внезапно запустит что-то жадное, а Alt+SysRq+F не знает.

Итак, я запускаю Firefox и Chrome. Ну, многие же говорят, что это самые известные жруны. И начинаю открывать много вкладок с разной толстой фигнёй. Пока не начнется свопинг. После этого я могу заниматься тем же еще долго, все будет нормально. А могу запустить VirtualBox, а на нем Андроид, и тогда все встанет колом при →100% загруженном процессоре. Тогда я делаю Alt+SysRq+F (несколько раз, если нужно) и Андроид на виртуалке начинает работать. После этого можно перезагрузить вкладки, побитые Alt+SysRq+F и продолжать заниматься фигней с броузерами. Все снова будет нормально, своп будет постепенно заполняться. Пока снова не будет запущено что-то очень жадное.

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

Вот только как это сделать - сам я не знаю. vm.swappiness=100 уже сделано, vm.vfs_cache_pressure=50. vm.min_free_kbytes, как я понял, это про то, что пользовательским процессам просто вообще трогать нельзя, ни при каких раскладах.

Вот как такой «амортизатор» в памяти сделать?

★★★

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

Освой поиск по форуму. Остальное ты уже написал.

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

earlyoom

Это не то. Тут не надо, чтобы что-то «жало Alt+SysRq+F автоматом». Надо, чтобы в свопе толстело и толстело.

Про юзерспейсовые киллеры я-то читал. А как раз с earlyoom игрался. Кстати, так и не понял, если ему указать, например, -m20 -s20 то он будет срабатывать при условии, что заполнено 80% памяти или 80% свопа? Или если заполнено 80% памяти и 80% свопа? Если срабатывает по и, то в такой ситуации он не особо полезнее родного киллера.

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

У меня так же, и то же самое. Видимо, проблема в BTRFS. Отслеживайте тут: https://bugzilla.kernel.org/show_bug.cgi?id=196729 и тут: https://forum.rosalinux.ru/viewtopic.php?t=9387

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

Отслеживайте тут ... и тут...

Спасибо.

Где-то после ядра 5.2.7 стало лучше.

Ну вот. Возможно, мне сто́ит как-то сунуть свежее ядро в LTS, а не заниматься самопальными хитростями... Как-то так сунуть, чтобы еще и wi-fi и прочее не отвалилось.

Dementy ★★★
() автор топика
Ответ на: комментарий от quantum-troll

А я где-то совсем недавно про это говорил. Что zram сначала, да, создает иллюзию растянувшейся оперативки, а потом зато кусок, занятый этим пожатым, вообще выпадает из жизни. И что zswap отодвигает во времени момент начала свопинга, но зато делает этот момент не просто лютым, а еще люче.

А здесь, прямо в начале, надо было сказать, что клинить у меня перестало еще и после того, как я совсем отказался от экспериментов с zram и zswap. А я забыл, извиняюсь.

Тут же я добился не временного иллюзорного увеличения RAM. Тут уже пошла иллюзия бесконечной памяти. Нарушается она при внезапных больших нагрузкам. При просто внезапных или просто больших уже́ всё ровно.

Dementy ★★★
() автор топика

https://unix.stackexchange.com/questions/34334/how-to-create-a-user-with-limi... — урежь своему пользователю лимит на память. Вуаля, система не виснет. Правда тормозит, но сама ОС не рухнет.

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

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

Да система, как понимаю, и сейчас не виснет, если клавиши рабортают. Не может дозапуститься жирная программа и в это время подмерзает DE.

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

Я так понял, срабатывает по и.

Вот у меня такое же ощущние. Попробую на досуге с -s99, просто чтобы удостовериться.

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

cgroups

Это чтобы огородить некоторые из процессов? Чтобы внутри ограничения жрали и не более? Но это же опять не то.

---------- Да, я вижу, что на форуме в последнее время обсуждается похожее, что есть несколько свежих тем. Я и на Редит заглядывал, где ядро не может:). Но всё почему-то сводится к введению ограничений, а не к избавлению от узких мест. Которых, кстати, остается всё меньше.

Dementy ★★★
() автор топика

watermark_scale_factor делает как раз то, что тебе нужно. Значение в 10000 заставит свопинг освобождать 10% оперативки, если свободно менее 10%.

chaos_dremel ★★
()

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

min_free_kbytes раньше влиял на то, когда начинается свопинг и сколько он будет свопить. Это было четверть от min_free_kbytes, что было весьма тупо и поэтому запилили watermark_scale_factor

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

Спасибо!

Вот сейчас и попробую с watermark_scale_factor. Сюда https://www.kernel.org/doc/Documentation/sysctl/vm.txt только что глянул. Только там написано, что The maximum value is 1000, or 10% of memory.

Про vm.swappiness я где-то когда-то прочитал, что его значение - это типа просьба, а не приказ админа к системе. Что моё 100 позволяет мне надеяться, что анонимные страницы и файловый кеш будут свопиться поровну. А системное значение 60 - это чтобы выкидывалось побольше файловых страниц и поменьше анонимных. А я крутил и пробовал, чтобы начало свопинга было наименее заметным. Вот, опытным путем на 100 и остановился.

Dementy ★★★
() автор топика

Провел опыты с watermark_scale_factor=1000. Не помогло. Одно из двух. Или 10% резерва мало. Или вообще не резерве или его отсутствии дело, на что толсто намекает эксперимент со свежим ядром.

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

Где-то после ядра 5.2.7 стало лучше.

Попробовал 5.2.14 - самое свежее из стабильных на данный момент. И всё, ушла проблема. Но не одна, а вместе с проприетарной nvidia. А у меня же optimus, bumblebee, Дактейбл с Гимпом. И еще опять эта неопределенность. Проблема исчезла, потому что это в новых ядрах пофикшено, или просто потому, без nvidia легче?

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

Когда ты уже на две звёзды нафлудить успел-то?

anonymous
()

Вот как такой «амортизатор» в памяти сделать?

Не говоря того о том, этот твой «амортизатор» бред ответ на твой вопрос простой - никак.

Несуществующий 12309 ты для чего сюда приплёл?

Потом сам процесс исчерпания памяти при помощи открыванию страничек в хроме это зачёт! Сколько весит средняя страничка html со всеми данными? А озу сейчас вон даже в самых всратых смартфонах на андроиде и то 4Гб не новость а уже давно нижняя граница. На ноутах 16Гб как нечего делать а уж на десктопах…

За своп в 21м веке зачёт! Его реальное применение - пространство чтоб „спать“ систему и/или тот неловкий момент когда в работе крайне необходим глючный текущий софт написанный левой пяткой индуса.

То что озу всегда чем то занято нормальная ситуация.

init_6 ★★★★★
()

…продолжаем разговор. Ты про Ultra Kernel Samepage Merging, zRam слышал? Или тебе всё равно и этого мало? А физчески озу добавить религия не позволяет? Тогда выход либо урезать свои потребности в открывании кучи страничек в хроме либо сменить железо.

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

Вообще, ТС Kernel Samepage Merging в телефоне с гигом оперативки использует. Но, увидев Ваше предположение, что ТС и про zram не слышал и тому подобное, ТС, в свою очередь, предположил, что Вам тема не интересна, а написа́ли Вы просто от скуки.

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

а написа́ли Вы просто от скуки

А вы нет? Вот оно чо! То то я вижу конкретную задачу а не флеймообразующую тему для толксов которую отчего то не перенесли в толксы.

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

It appeared in kernel 5.3 and was backported to 4.19.62 and Ubuntu kernel 4.15.0-59 ... and to 5.2.3

А в Ubuntu 18.04 сейчас 5.0.0... Странно как-то... Может и нам бекпорт будет, но послезавтра:)

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

Для толкосов - так для толксов. Вы здесь гораздо дольше, чем я, а значит такое Вам виднее.

Задачу я, вобщем-то сформулировал, но, вроде как, в этом Очередной псевдо-12309 (комментарий) посте указал, что решение этой задачи не привело к решению проблемы.

А решена (опять же, вроде бы решена) проблема в новом ядре и есть бекпорты для старых.

Лично у меня теперь два варианта удостовериться. Дождаться обновления ядра (можно ждать до апреля месяца). Самостоятельно сделать работать мой optimus с новым ядром.

Еще вариант - просто поверить, что с новыми ядрами (и со старыми, для которых бекпорты есть) можно валить в swap, пока место есть, и ничего теперь за это не будет.

Dementy ★★★
() автор топика

Продолжил эксперименты.

Клин при запуске просто «чего-то очень жадного» прошел, когда я отключил /swap на ssd (на котором / и /home) и включил /swap на hdd. Hdd (Seagate Samsung ST320LM001 HN-M320MBB) не из самых угрюмых, но, подозреваю, если бы вместо него был еще ssd, стало бы еще веселее.

А вот при запуске виртуальной машины, а не просто «чего-то очень жадного» клин остался. Причем, перенос swap на другое устройство с собственной зелененькой лампочкой позволил заставил заметить, что свопать оно даже не пытается. Процессор занят, ssd занят, hdd свободен. Alt+SysRq+F (несколько раз), и виртуальная машина продолжает запускаться и таки запускается, во время запуска что-то сбрасывается в swap.

Стал пытаться думать, что из двух трудных задач труднее. Читать образ машины с диска, искать, какие из страниц можно сбросить в swap, или распаковывать образ машины.

Решил попробовать «облегчить» чтение. Сам тоже в который раз занялся чтением. До этого много видел о том, что планировщик ввода-вывода для ssd не нужен, ибо его контроллер сам всё планирует (поэтому, как только увидел возможность вообще отключить планировщик, радостно ею воспользовался).

Теперь, для начала, поискал, какое именно «всё» планирует контроллер. Удивительно, но прочитать об этом удалось прямо на сайте у тех, чей логотип нарисован на корпусе ssd. Контроллер делает (или сразу сделал) резервирование ячеек - вот та неразмеченная область, которую советуют оставлять, оказывается, уже́ есть, но видит ее только контроллер. Однако, думаю, если добавить резерва самостоятельно при разметке - хуже не станет. Контроллер занимается выравнивание износа. Контроллер делает очистку ячеек. А вот очередями он не занимается.

Значит, для ssd нужен-таки планировщик ввода-вывода, который «для ssd не нужен». Занялся чтением про планировщики. Из того, что прочиталось, получается, что «для ssd не нужен» CFQ, который пытается облегчить поиск секторов на блинах. А вот те планировщики, которые сделаны для работы с ssd, как раз нужны. Это логично, их же не ради смеха делали...

cat /sys/block/sd*/queue/scheduler
mq-deadline [none]
[mq-deadline] none

Вот так у меня стало, когда прилетело пятое ядро, и я отключил планировщик для ssd

cat /sys/block/sd*/queue/scheduler
[mq-deadline] none
[mq-deadline] none

А вот так было, когда ядро только прилетело, и я еще пальцами не полазил. Это я и вернул, когда понял, что планировщик всё же нужен. После этого клины стали стали появляться позже, когда на виртуальной машине уже вот-вот Андроид ланчер покажет.

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

А swap на ssd вернул.

Вот и выходит, что в моем конкретном случае проблему я себе сделал сам. На половину тем, что сам «оптимизировал», обмазавшись несвежими советами. На вторую половину тем, что даже не попытался осознанно подкрутить virtualbox.

Но, с другой-то стороны, пока я это всё читал и крутил, вышло ядро 5.3, которое, кстати, в Ubuntu RTS вкинули за неделю до официального выпуска, с поправленными похожими проблемами. А в Ubuntu LTS прилетело 5.0.0-29 с очередными закрытыми уязвимостями и еще чем-то.

P.S. Пока читал про планировщики, понравилось, что пишут про Kyber. Но нет его у нас.

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

Кстати, по моему случаю (HP Stream 7 с 1 ГБ ОЗУ; проблемы нет на 4.11.0, проблема есть на 4.12.0) бисект привёл к https://github.com/torvalds/linux/commit/4a6ef8e37c4d9a40f09438068da1734fd965... но пока не было времени все тщательно перепроверить на предыдущем, этом и следующем коммитах.

RussianNeuroMancer ★★★★★
()
18 января 2020 г.
Ответ на: комментарий от Dementy

Или если заполнено 80% памяти и 80% свопа?

Это.

Если срабатывает по и, то в такой ситуации он не особо полезнее родного киллера.

Он полезнее родного киллера:

https://www.reddit.com/r/linux/comments/ee6szk/killing_the_elephant_in_the_room_the_userspace/

https://www.reddit.com/r/linux/comments/ee6szk/killing_the_elephant_in_the_room_the_userspace/fcj0qjr/

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

урежь своему пользователю лимит на память

Ограничение виртуальной памяти - отвратительная идея. Хорошая идея - контролировать реально используемую память - MemoryMax, MemorySwapMax, MemAvailable, SwapFree.

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

Вот у меня такое же ощущние. Попробую на досуге с -s99, просто чтобы удостовериться.

Полагайтесь на документацию. В документации AND. Пробовать можно с -s 100 - при этом демон будет реагировать на MemAvailable при любом уровне SwapFree.

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

Спасибо. Я тогда так и понял, так и попробовал, так и оставил. Работало, пользу приносило. Такую пользу, что «само по себе жмакалось Alt+SysRq+F» в ситуациях, когда его всё равно пришлось бы пальцами жмакать.

Потом я поставил 12 гигов памяти. earlyoom сработал один раз, когда я по ошибке запустил в обработку пачку фоток не с тем параметром.

Dementy ★★★
() автор топика
21 апреля 2021 г.

Надо как-то держать пару гигов RAM свободными

vm.clean_min_kbytes=2000000

так-то 2 гига многовато, пары сотен может быть достаточно.

https://github.com/hakavlad/le9-patch

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