Жуткий своппинг (BTRFS) [Решено]

Изображение пользователя Eugene.

Приветствую!
Довольно давно наблюдаю одну неприятную проблему на последнем дистрибутиве Kubuntu. При исчерпании свободной памяти при попытке вытеснить данные в своп машина просто встает колом. Виснет даже курсор и изображение на экране. Только изредка интерфейс кратковременно оживает...
Данная проблема проявляется на двух совершенно разных машинах. Объединяет их только два фактора. Это SSD и файловая система BTRFS для корня. Так что не думаю, что это проблема по железу. Причем совершенно неважно на SSD находится раздел со свопом или нет (на второй машинке дополнительно есть еще HDD). sysctl.conf абсолютно дефолтный. Своп явно задействован и отображается по команде free -h.
Ума не приложу в чем дело. Может кто подскажет куда копать?

UPD 12.09.19:
В последнее время проблема широко обсуждается в узких кругах. Много жалоб именно на связку с BTRFS, народ массово рапортует о решении проблем со своппингом при откате на ext4. Даже предлагается очередной патч ядра для решения проблем со свопом.
Я тоже долго жил с этой проблемой, но в конце концов, перед окончательным откатом на ext4 решил предпринять последнюю попытку найти решение и решение нашлось! Собственно, для "потомков" оставлю это здесь:
Очевидно, что BTRS фундаментально отличается по внутренней структуре от классических файловых систем и не в последнюю очередь требованиями к памяти и работе с ней. По всей видимости, это и стало причиной множества проблем. При попытке выделения большого объема памяти, превышающего физически доступную, ОС начинает интенсивно сокращать файловый кеш, а затем агрессивно вытесняет страницы памяти с низким приоритетом в своп. Вот тут-то и кроется проблема! Важно в КАКОЙ момент это происходит. В общем случае, при дефолтных настройках системы, это происходит слишком поздно и для нормальной работы файловой системы просто не остается достаточных ресурсов в виде оперативной памяти и файлового кэша. В моем случае машина могла не выйти из своппинга и за всю ночь! Если же физической памяти недостаточно, но ее выделение выполняется маленькими объемами, то машина еще справляется, наглухо подвисая на 1-10 минут до освобождения необходимого объема памяти...
Отсюда следует, что надо заставить ядро выгружать память в своп несколько раньше, чем системе поплохеет. Иными словами, отрегулировать агрессивность своппинга. А какой параметр у нас отвечает за это? Неправильно! Это не vm.swappiness вопреки распространенному заблуждению!
Собственно, большое количество дезы в сети на предмет настройки работы с памятью в Linux-системах и завело меня в тупик. А надо было просто читать официальную документацию...
Томить не буду, ларчик просто открывается. За то, когда будет вызываться kswapd и, соответственно, насколько агрессивно будет выполняться выгрузка памяти в своп в большей степени отвечает параметр vm.watermark_scale_factor. По умолчанию его значение 10, это означает, что воркер ядра, ответственный за выгрузку памяти в своп, включается только тогда, когда осталось всего 0,1% свободной физической памяти и в нашем случае, при интенсивном выделении памяти, этого оказалось катастрофически мало...
Максимальное значение этого параметра 1000, что равно 10% свободной физической памяти, но такое значение я рекомендую выставлять только при медленном свопе и малом объеме памяти. На машине со свопом на SSD будет более чем достаточно значения в 5000. Собственно, именно при таком значении моя проблема была полностью решена. Теперь машина может лишь изредка фризить при активном задействовании свопа, что совершенно нормально!
Хочу также заметить, что при дополнительном использовании ZRAM картина становится еще лучше, редкие фризы пропадают почти полностью! А вот ZWSAP почему-то в значительной степени нивелирует эффект от принятых мер, но тем не менее ситуация остается далека от той, что была при дефолтных настройках системы.
Как итог, я опять могу беззаботно открывать десятки и сотни вкладок в браузере, параллельно работать в виртуалке и спокойно крутить в Блендере модели с миллионами полигонов.
Enjoy Linux!

UPD_2:
Полезные ссылки:
1) Справка по опциям sysctl для менеджера памяти https://www.kernel.org/doc/Documentation/sysctl/vm.txt
2) Обсуждение бага на kernel.org + ссылки на патчи https://bugzilla.kernel.org/show_bug.cgi?id=196729
3) Некоторое количество полезной информации также найдено в статье на Хабре и комментариях https://habr.com/ru/post/344836/#comment_10569644

0
dm - 11 Декабрь, 2018 - 19:25
Изображение пользователя dm.

Предполагаю, что дело в BTRFS. Имею два ноутбука оба с SSD на одном 18.04 x32 на другом 18.10, указанных проблем не замечал ни разу. Файловая система на обоих F2FS, отдельного раздела под своп нет, пишет в файл.

0
Eugene - 12 Декабрь, 2018 - 00:00
Изображение пользователя Eugene.

Так дело в том, что, на первый взгляд, BTRFS при вытеснении данных из памяти в своп на отдельном разделе никак не задействована... Очень уж не хочется от нее отказываться. Снапшоты совершенно незаменимы в моем случае.
Казалось бы, на машине 8 ГБ памяти, но стоит при запущенном браузере с десятком вкладок запустить еще виртуальную машину или, к примеру, тот же GIMP с большой картинкой, все... Как только в htop память будет занята под 100% и в своп попадет буквально 500 КБ данных, пиши пропало. Помогает только жёсткий ресет.

0
lord_i - 12 Декабрь, 2018 - 13:35
Изображение пользователя lord_i.

Может имеет смысл попробовать убрать своп раздел и использовать swapspace?

0
Eugene - 12 Декабрь, 2018 - 21:38
Изображение пользователя Eugene.

Увы, файлы подкачки нельзя размещать на btrfs.

0
lord_i - 14 Декабрь, 2018 - 16:00
Изображение пользователя lord_i.

Старая темка Но может что то даст.
Последнее время тоже испытываю со свопом напряг - вот поставил себе буду наблюдать.

0
Eugene - 17 Декабрь, 2018 - 16:32
Изображение пользователя Eugene.

С zram знаком. Его тоже пробовал. Результат аналогичен. При попытке системы вытеснить данные в своп система встает колом.
Чуть лучше системе становится, если поиграться с параметром vm.min_free_kbytes, но это не решение. При резком выделение большого куска памяти, например, при запуске виртуальной машины система все так же виснет.

0
lord_i - 17 Декабрь, 2018 - 17:51
Изображение пользователя lord_i.

Я три дня вот еду на zram впечатления исключительно положительные. Колом не становится, нормально переживает ждущий режим, распухания свопа не наблюдаю. Значительно лучше стало чем чем только со свопспейсом.
Вот так выгляжит своп:
# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/zram0                              partition       1010244 480856  5
/dev/zram1                              partition       1010244 482660  5
/dev/zram2                              partition       1010244 492808  5
/dev/zram3                              partition       1010244 486444  5
/home/swap/1                            file            1745252 0       -2

Может у Вас просто озу недостаточно под используемые задачи?

0
Eugene - 18 Декабрь, 2018 - 18:12
Изображение пользователя Eugene.

ОЗУ более чем. 8GB для браузера и виртуалки с 2GB выделенной памяти должно вполне хватить. Своп при этом пустой же. Машина виснет едва только в него начинают вытеснятся данные.

0
Жюстина - 20 Сентябрь, 2019 - 16:37
Изображение пользователя Жюстина.

это было описано лет назад и от свопа не зависит никак

0
Bogdan - 1 Январь, 2019 - 22:04

Может хрень сейчас скажу, но я сделал своп через файл, т.е. не раздел. Обычный файл. Тормозов не наблюдаю. Ну и сами понимаете как устроен привод головок. Одна(1) стойка, ездить по пластине...

0
kot040188 - 2 Январь, 2019 - 00:15
Изображение пользователя kot040188.

В 18.04 по умолчанию swap в файле. Да, сказал хрень…

0
Жюстина - 20 Сентябрь, 2019 - 16:42
Изображение пользователя Жюстина.

я могу это сделать BTRFS или иное не важно, значит.... не решено )

+1
Eugene - 6 Январь, 2019 - 13:29
Изображение пользователя Eugene.

В общем, промежуточные итоги таковы: во всем виновна btrfs. Однако, чем конкретно это вызвано пока неизвестно.
Утверждение подтверждено экспериментально. Текущая установка ОС была перенесена копированием файлов на ext4, разумеется, с последующей правкой grub. Как итог система летает. Теперь в своп практически без тормозов может быть вытеснено значительное кол-во данных.

0
kot040188 - 6 Январь, 2019 - 20:40
Изображение пользователя kot040188.

Ну кто бы сомневался. Не зря я в свое время сбежал с опенсуси. Там теперь ро умолчанию btrfs…

0
Eugene - 12 Сентябрь, 2019 - 15:40
Изображение пользователя Eugene.

Проблема решена. Подробное описание для страждущих в верхнем посте.

0
Жюстина - 20 Сентябрь, 2019 - 16:23
Изображение пользователя Жюстина.

проблема не решена, вы про своп? )

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры