LINUX.ORG.RU

Linux 5.10

 ,


1

3

Тихо и незаметно состоялся релиз ядра версии 5.10. По признанию самого Торвальдса, ядро «состоит из по большей части новых драйверов с вкраплениями из патчей», что неудивительно, ибо ядро получило статус LTS.

Из нового:

  • Поддержка fast_commit в файловой системе Ext4. Теперь приложения будут писать в кэш меньше метаданных, что ускорит запись! Правда, её надо явно включить при создании ФС.

  • Дополнительные настройки доступа через интерфейс io_uring, которые позволяют безопасно давать доступ к ресурсам колец дочерним приложениям.

  • Введён системный вызов process_madvise, позволяющий давать ядру информацию об ожидаемом поведении целевого приложения. Аналогичная система, кстати, используется в Android (демон ActivityManagerService).

  • Исправлена проблема 2038 года для файловой системы XFS.

и многое другое.

Также стоит отметить, что тут же была выпущена версия 5.10.1, отменяющая два изменения, приводившие к проблемам в подсистемах md и dm raid. Так что да, 0-day-патчи бывают даже для ядра Linux.

Подробнее:

>>> Скачать tarball

★★★★★

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

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

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

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

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

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

Стоит ли нам учитывать NUMA? Похоже что обычно не учитывается - как при нахождении sc->file_is_tiny, так и в патче хромос.

А вот в классическом le9 NUMA учитывается, верно? global_node_page_state(), вот это всё.

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

Я уже повидал багов, которые триггерятся сторонним кодом в ядре, при этом то были таки баги ванильного ядра.

Я думаю, что проблема в драйвере. Change my mind.

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

Вопрос, конечно, интересный. Я думаю, что защита активных файлов — это типа «последний рубеж», когда дипломатические подходы (которые учитывают NUMA) перестали работать, поэтому учитываться должны глобальные значения.

Возможно, конечно, ручку делать нужно и per-node, но я вряд ли смогу протестить преимущества.

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

Посмотри https://github.com/hakavlad/nohang-extra/blob/master/LE9/30.patch

Это лучшее, что у нас есть.

К имеющемуся sc->file_is_tiny по аналогии добавлены sc->file_is_low и sc->file_is_min. А также global_file_is_min.

Это подход близок к подходу ядра. Рядом с определением file_is_tiny задаем дополнительный пороги.

И это отлично работает. low держится пока есть возможность для своппинга.

vm.file_min_kbytes и vm.file_global_min_kbytes - не нашел между ними разницы, оба позволяют держать порог.

Резервируется AF+IF, результат отличный.

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

ручку делать нужно и per-node

Так и сделал. На десктопе разницу не нашел.

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

Я не очень тогда понимаю, зачем нам теперь ТРИ ручки (tiny, low, min). Ведь изначально уже есть одна, file_is_tiny. Может, просто поменять определение того, как она устанавливается? Например, выбросить !(sc->may_deactivate & DEACTIVATE_ANON) && anon >> sc->priority и посмотреть, что будет.

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

Ведь изначально уже есть одна, file_is_tiny

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

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

Если файловых страниц меньше установленного порога, то swappiness отменяется - гуй не замерзает при нулевом swappiness.

vm.file_low_kbytes=20000 достаточно для оживления гуя при swappiness=0. При vm.file_low_kbytes=10000 монитор замерзает и увеличивется some io pressure (под достаточной защитой все io pressure близки к нулю, если своп на zram при стрессах).

С GFP флагами получить достоверно положительный результат (устранение Fatal IO error) не удалось (играл с разными).

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

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

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

Да. Дисковый кэш не вытесняется, если его размер ниже заданного. Эффект: меньше ввода-вывода с медленных носителей, лучше отзывчивость, быстрее приходит киллер при нехватке памяти.

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

Так может апстриму саму идею и результаты тестов предложить, а они «правильную» реализацию пусть делают, если им патч не нравится.

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

Вот вершина le9 патчестроения: https://github.com/hakavlad/le9-patch/blob/main/le9ba0-5.10.patch

2 ручки с краткими именами. Алгоритм приближен к ядерному. file берем уже готовый вычисленный для sc->file_is_tiny. Правда пока документации нет.

Резерва vm.file_min_kbytes=150000 достаточно для обеспечения отзывчивости хрома в известном опыте Ташкинова (mem=4G, noswap, открытие вкладок). С резервом 100000 отзывчивость существенно падает и приход киллера замедляется.

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

При невозможности своппинга file опускается ниже low и не вызывает ошибок. Это безопасный вариант для владельцев встроек интел, позволяющий держать объем файловых страниц во время своппинга.

file не опускается ниже min даже при невозможности своппинга, но может вызывать ошибки вплоть до oops. Поэтому вместо установки min порога предпочитаю использование юзерспейсного киллера (автором которого и являюсь).

Главное в le9 - его уникальная фича - способность повышать производительность I/O bound задач и снижать io pressure при активном своппингe. С этим справляется безопасный low порог. Выше в треде я приводил конкретные цифры влияния на давления - с le9 и без под стрессом.

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

совершенно точно новый le9ba дает меньше ошибок, чем старый (le9a*). Со старым при воспроизведении опыта Ташкинова сессия довольно быстро падала - либо после первого же ООМ, либо через несколько. С новым можно без ошибок открыть все вкладки, при этом большая часть будет убита, но сессия выживает. Со старым приходилось выключать шринкер для воспроизведения опыта https://youtu.be/iU3ikgNgp3M

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

Неубедительно.

Не похоже, что патч дифференцирует low и min, и если он как-то работает, то это случайно.

Давай сначала договоримся о базовых вещах:

  1. защита нужна только для activefile
  2. когда триггерится low, порог не соблюдается, но активность reclaim’а должна быть минимальной
  3. лишняя ручка для min не нужна, у нас уже есть tiny

Посмотри сюда: http://ix.io/2Pq8 и скажи, что думаешь. Я пока не тестил, было бы хорошо, если бы ты попробовал.

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

Не похоже, что патч дифференцирует low и min

Вот дифференциация:

#if defined(CONFIG_PROTECT_FILE)
		if (file && sc->file_is_min)
			scan = 0;
#endif

– при жестком пороге файловые стараницы не вытесняются никогда. При мягком вытесняются, если нет возможности вытеснить анонимные.

если он как-то работает, то это случайно

Никаких случайностей. Выше ясно видно, что scan = 0 только при sc->file_is_min.

защита нужна только для activefile

При защите только activefile при стрессах inactive file падает до нуля - исчезает смысл «active» - получаем просто список файловых страниц. Просто исчезает разделение на активные и неактивные - потому что список inactive уменьшен до нуля. Чтобы определить действительно active страницы - должен существовать inactive список достаточного размера. - Страницы должны задерживаться некоторое в время в inactive, чтобы потом попадать в active. При защите только active списка этот список будет состоять из всего подряд (потому что страницы будут попадать в active практически не задерживаясь в inactive), а не из действительно активных страниц. Так что защита только активных - это не выход, это лишь создает иллюзию защиты активных (по факту получим то же самое - защиту всех файовых страниц, только вместо сбалансированных списков active/inactive будет единый список).

когда триггерится low, порог не соблюдается

При наличии свопа в моем последнем патче объем страниц держится также, как и при min, и уменьшается только при исчерпании свопа (это то, что я получаю на практике).

лишняя ручка для min не нужна, у нас уже есть tiny

Лишних ручек нет. tiny пусть работает, если low и min выставлены в 0.

Давай теперь договоримся о базовых вещах:

  1. защита нужна для обоих списков - active и inactive;
  2. когда триггерится low, порог соблюдается, но только при невозможности вытеснить анонимные страницы;
  3. лишних ручек нет.

Посмотри сюда: http://ix.io/2Pq8 и скажи, что думаешь. Я пока не тестил, было бы хорошо, если бы ты попробовал.

OK.

hakavlad ★★★
()
Ответ на: комментарий от post-factum
  1. ИМХО это неудобно:
# sysctl -w vm.unevictable_activefile_kbytes_low=0
sysctl: setting key "vm.unevictable_activefile_kbytes_low": Недопустимый аргумент
  1. Ну так вот, тест min порога без свопа.
sudo sysctl -w vm.unevictable_activefile_kbytes_low=0
sudo sysctl -w vm.unevictable_activefile_kbytes_min=250000
--
MA 1392.7, BU 75.5, CA 1054.6, AA 1.4, IA 7864.4, AF 361.5, IF 630.8, SF 0.0, SU 0.0, SH 132.0, SR 42.2
MA 1032.3, BU 75.5, CA 1054.6, AA 1.4, IA 8223.8, AF 361.5, IF 630.8, SF 0.0, SU 0.0, SH 132.0, SR 42.2
MA 803.4, BU 75.5, CA 933.1, AA 5.9, IA 8455.8, AF 379.9, IF 520.8, SF 0.0, SU 0.0, SH 101.4, SR 37.4
MA 663.8, BU 75.5, CA 795.7, AA 6.3, IA 8594.0, AF 392.8, IF 368.8, SF 0.0, SU 0.0, SH 103.3, SR 35.8
MA 561.4, BU 75.5, CA 692.2, AA 6.5, IA 8700.2, AF 402.1, IF 258.1, SF 0.0, SU 0.0, SH 100.8, SR 33.1
MA 506.9, BU 75.5, CA 638.4, AA 2177.0, IA 6582.8, AF 408.6, IF 198.7, SF 0.0, SU 0.0, SH 100.4, SR 31.0
MA 459.4, BU 75.5, CA 591.8, AA 4369.4, IA 4438.8, AF 412.9, IF 146.7, SF 0.0, SU 0.0, SH 101.4, SR 30.7
MA 401.3, BU 75.5, CA 533.7, AA 6708.5, IA 2158.4, AF 420.2, IF 81.8, SF 0.0, SU 0.0, SH 100.2, SR 30.7
MA 316.0, BU 74.6, CA 450.8, AA 8588.3, IA 364.7, AF 402.9, IF 14.8, SF 0.0, SU 0.0, SH 102.1, SR 27.6
MA 112.2, BU 74.6, CA 216.1, AA 9115.5, IA 74.6, AF 183.9, IF 2.0, SF 0.0, SU 0.0, SH 98.8, SR 24.9
MA 121.2, BU 74.6, CA 215.6, AA 9124.0, IA 66.7, AF 184.6, IF 1.0, SF 0.0, SU 0.0, SH 98.7, SR 24.6
MA 121.2, BU 74.6, CA 215.6, AA 9124.0, IA 66.7, AF 184.6, IF 1.0, SF 0.0, SU 0.0, SH 98.7, SR 24.6
MA 119.5, BU 74.6, CA 215.6, AA 9124.0, IA 68.2, AF 184.6, IF 1.0, SF 0.0, SU 0.0, SH 98.7, SR 24.6
MA 221.4, BU 74.6, CA 217.1, AA 9072.7, IA 0.1, AF 184.8, IF 0.3, SF 0.0, SU 0.0, SH 100.5, SR 24.4
MA 6387.4, BU 74.6, CA 256.9, AA 2877.8, IA 0.1, AF 184.8, IF 4.1, SF 0.0, SU 0.0, SH 136.1, SR 24.4
MA 8957.1, BU 74.6, CA 258.8, AA 324.4, IA 0.0, AF 184.9, IF 4.9, SF 0.0, SU 0.0, SH 137.3, SR 24.4

min порог в общем работает.

  1. Далее
vm.unevictable_activefile_kbytes_low = 250000
vm.unevictable_activefile_kbytes_min = 0

Включаем своп и музыку в браузере. Итог - https://pastebin.com/Z409N7em.

Мягкий порог работает как жесткий, и даже резервирует выше порога.

hakavlad ★★★
()
Последнее исправление: hakavlad (всего исправлений: 1)
Ответ на: комментарий от post-factum
vm.unevictable_activefile_kbytes_low = 250000
vm.unevictable_activefile_kbytes_min = 0

Без свопа запустил tail /dev/zero - сессия упала:

фев 15 07:12:08 PC kernel: [   2640]  1000  2640   668810    31566  1134592        0             0 Web Content
фев 15 07:12:08 PC kernel: [   2779]  1000  2779   641125    18758   811008        0             0 Web Content
фев 15 07:12:08 PC kernel: [   2892]     0  2892    11095     2535   126976        0             0 python3
фев 15 07:12:08 PC kernel: [   2893]  1000  2893  1910565  1909490 15347712        0             0 tail
фев 15 07:12:08 PC kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1000.slice/session-4.scope,task=tail,pid=2893,uid=1000
фев 15 07:12:08 PC kernel: Out of memory: Killed process 2893 (tail) total-vm:7642260kB, anon-rss:7636464kB, file-rss:1496kB, shmem-rss:0kB, UID:1000 pgtables:14988kB oom_score_adj:0
фев 15 07:12:08 PC kernel: oom_reaper: reaped process 2893 (tail), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
фев 15 07:12:09 PC mate-sensors-ap[1286]: mate-sensors-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 15 07:12:12 PC kernel: nouveau 0000:01:00.0: Enabling HDA controller
фев 15 07:12:09 PC stunnel[827]: LOG5[12]: Connection closed: 49537 byte(s) sent to TLS, 75446 byte(s) sent to socket
фев 15 07:12:12 PC org.a11y.atspi.Registry[1193]: XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
фев 15 07:12:12 PC org.a11y.atspi.Registry[1193]:       after 4131 requests (4131 known processed) with 0 events remaining.
фев 15 07:12:09 PC unknown[1273]: wnck-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 15 07:12:09 PC stunnel[827]: LOG5[208]: Connection closed: 1478 byte(s) sent to TLS, 1056 byte(s) sent to socket
фев 15 07:12:09 PC unknown[1282]: mate-multiload-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 15 07:12:09 PC polkitd(authority=local)[832]: Unregistered Authentication Agent for unix-session:4 (system bus name :1.25, object path /org/mate/PolicyKit1/AuthenticationAgent, locale ru_RU.UTF-8) (disconnec
фев 15 07:12:09 PC unknown[1284]: mate-brightness-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 15 07:12:11 PC sudo[1444]: pam_unix(sudo:session): session closed for user root
фев 15 07:12:09 PC unknown[1417]: mate-system-monitor: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 15 07:12:09 PC unknown[1310]: clock-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 15 07:12:09 PC unknown[1275]: notification-area-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 15 07:12:17 PC lightdm[2920]: pam_unix(lightdm-greeter:session): session opened for user lightdm by (uid=0)
фев 15 07:12:17 PC systemd[1]: Created slice User Slice of lightdm.
фев 15 07:12:17 PC systemd[1]: lvm2-monitor.service: Cannot add dependency job, ignoring: Unit lvm2-monitor.service is masked.
фев 15 07:12:17 PC systemd[1]: lvm2-lvmetad.socket: Cannot add dependency job, ignoring: Unit lvm2-lvmetad.socket is masked.
фев 15 07:12:17 PC systemd[1]: lvm2-lvmpolld.socket: Cannot add dependency job, ignoring: Unit lvm2-lvmpolld.socket is masked.
фев 15 07:12:17 PC systemd[1]: Starting User Manager for UID 111...
фев 15 07:12:17 PC systemd-logind[744]: New session c2 of user lightdm.
фев 15 07:12:17 PC systemd[1]: Started Session c2 of user lightdm.

Итого: мягкий порог работает как жесткий. А жесткий порог дает больше Fatal IO errors, чем в моем патче.

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

И главный вопрос: какие претензии по сущестиву есть к le9ba? Этот патч дает меньше ошибок, чем патчи, основанные на резервировании AF, а его алгоритм прост и приближен к имеющемуся алгоритму, и не производятся лишние вычисления - file уже найдено для sc->file_is_tiny. Зачем что-то еще менять? le9ba уже отлично работает.

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

защита нужна для обоих списков - active и inactive;

ОК, с доводами согласен.

когда триггерится low, порог соблюдается, но только при невозможности вытеснить анонимные страницы;

Т.е., когда нет свопа или он полон, или когда swappiness на нуле? Откуда такое условие? Почему нельзя дропать файловые страницы в любом случае, просто с меньшей интенсивностью?

лишних ручек нет

Об этом я пока думаю.

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

А где же scan = 0?

Выкачу новую версию. Для меня наибольшая проблема в том, что я не знаю, как тестить в твоих условиях, потому что у меня нет i915.

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

Спасибо, интересно.

ИМХО это неудобно:

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

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

Не, то, что у меня выше, работать не будет, и я понял, почему. scan нужно менять независимо от того, какой scan_balance, потому что файловые страницы могут дискардиться и при SCAN_EQUAL, например.

Поэтому, когда будешь пробовать, пробуй вот это: http://ix.io/2Pwq

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

Попытка создать самый минималистичный патч https://pastebin.com/ciD36Djd.

file_is_low ведет к file_is_tiny. file_is_min вынесено в начало get_scan_count() - чтоб была отсылка исключительно к SCAN_ANON под жестким порогом.

Итог - порог держится, но киллер приходит долго - секунд 15-20 https://pastebin.com/EKq7iWma. Интересно, почему?

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

Вообще можно ограничиться тремя вставками в vmscan.c:

#if defined(CONFIG_PROTECT_FILE)
	unsigned int file_is_low:1;
	unsigned int file_is_min:1;
#endif
#if defined(CONFIG_PROTECT_FILE)
		file <<= (PAGE_SHIFT - 10);
		sc->file_is_min = file <= sysctl_file_min_kbytes;
		sc->file_is_low = file <= sysctl_file_low_kbytes;
		if (sc->file_is_low || sc->file_is_min)
			sc->file_is_tiny = true;
#endif
#if defined(CONFIG_PROTECT_FILE)
		if (file && sc->file_is_min)
			scan = 0;
#endif

Это будет работать также, как le9ba https://github.com/hakavlad/le9-patch/blob/main/le9ba0-5.10.patch.

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

Или еще короче:

#if defined(CONFIG_PROTECT_FILE)
	unsigned int file_is_min:1;
#endif
#if defined(CONFIG_PROTECT_FILE)
		file <<= (PAGE_SHIFT - 10);
		sc->file_is_min = file <= sysctl_file_min_kbytes;
		if (file <= sysctl_file_low_kbytes)
			sc->file_is_tiny = true;
#endif
#if defined(CONFIG_PROTECT_FILE)
		if (file && sc->file_is_min)
			scan = 0;
#endif

Под мягким порогом будет перенаправление в SCAN_ANON, а под жестким в любом случае scan = 0.

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

Т.е., когда нет свопа или он полон, или когда swappiness на нуле?

Когда SwapFree=0, или при прочих вариантах невозможности вытеснить анонимные.

Откуда такое условие?

например (!sc->may_swap - нет свопа)

	/* If we have no swap space, do not bother scanning anon pages. */
	if (!sc->may_swap || mem_cgroup_get_nr_swap_pages(memcg) <= 0) {
		scan_balance = SCAN_FILE;
		goto out;
	}

или вот (!sc->priority - близость к OOM)

	 * Do not apply any pressure balancing cleverness when the
	 * system is close to OOM, scan both anon and file equally
	 * (unless the swappiness setting disagrees with swapping).
	 */
	if (!sc->priority && swappiness) {
		scan_balance = SCAN_EQUAL;
		goto out;
	}

– эти условия стоят выше if (sc->file_is_tiny). Если условия выше не выполняются, и (sc->file_is_tiny), то сканируются только анонимные, что и обеспечивает мягкое резервирование (которое перестает работать при невозможности своппинга и при близости к OOM).

Почему нельзя дропать файловые страницы в любом случае, просто с меньшей интенсивностью?

Можно, но зачем? Сейчас file_is_low выполняет задачи, которые перед ним ставились - не вызывает Fatal IO error, устраняет thrashing при использовании свопа на zram, не мешает работе юзерспейсных киллеров. Сейчас патч может иметь самый минималистичный вид и выполнять все, что от него требуется. То, что мы имеем - это лучше, чем патч из хром ос и лучше классического le9.

Резервирование работает при любом swappiness. swappiness работает нормально только в неэкстремальных условиях, и так и задумано. - В ванильном ядре уже есть SCAN_EQUAL и SCAN_ANON, обеспечивающие поведение не в соответствии со swappiness.

file_is_tiny также отменяет обычную работу swappiness путем перенаправления в SCAN_ANON вместо нормального SCAN_FRACTION. file_is_low лишь расширяет границы действия file_is_tiny.

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

Для меня наибольшая проблема в том, что я не знаю, как тестить в твоих условиях, потому что у меня нет i915.

Можешь тестировать:

  • сохранность резервов под разными порогами и разными стрессами
  • влияние патча на производительность, давление io/memory, отзывчивость

i915 может давать ошибки и без шринкера, и без патча. Думаю нам не стоит на нем заострять внимание, а заострить внимание да демо для широкой публики - какие профиты дает патч. Улучшать документацию, подробно описать все эффекты, все плюсы и минусы.

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

Это защита от неправильных порогов

Пороги не могут быть неправильными.

low=0 и min=200M - противоречия нет, просто применяется жесткий порог.

Любые комбинации порогов не проиворечат друг другу. Применение более высокого min порога не отменяет low резервирование, а лишь услиливает резервирование.

Более того, защита эта не работает должным образом - я таки установил low<min. Ко всему прочему так называемая защита усложняет код.

Вот у меня нет защиты, и нет проблем. Ставлю любые пороги, и нет проблем с пониманием как они работают.

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

Для меня наибольшая проблема в том, что я не знаю, как тестить в твоих условиях, потому что у меня нет i915.

Вот человек тестирует без всяких i915 - webkit2gtk3 compilation with zram-fraction=1, max-zram-size=8192 https://youtu.be/d4Sc80TMEtA - своп выжран, зависаний нет. Еще и видеосъемка этого безобразия идет без проблем. Система отзывчива в течение всего процесса.

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

+The default value is 256 MiB +The default value is 128 MiB.

Хороший выбор.

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

мне кажется, что всё говно

Верно подмечено.

кажется, что точно такой же механизм в ядре уже есть

Вот и будем его использовать без лишнего переусложнения. Просто low резерв будет работать как file_is_tiny - последний как раз и работает как мягкий резерв (но что-то не заметно, чтобы он давал хоть какой-то згачимый эффект).

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

чтобы не получилось так, что low < min из-за ошибки юзера

Так это и не ошибка - желание админа протестировать работу чистого min.

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

A value of 0 instructs the kernel not to
initiate swap until the amount of free and file-backed pages is less
than the high water mark in a zone.

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

Теперь это условие нарушено. Но можно вернуть соответствие документации:

#if defined(CONFIG_PROTECT_FILE)
		file <<= (PAGE_SHIFT - 10);
		sc->file_is_min = file <= sysctl_file_min_kbytes;
		sc->file_is_low = file <= sysctl_file_low_kbytes;
		if ((sc->file_is_low || sc->file_is_min) && swappiness)
			sc->file_is_tiny = true;
#endif

– резервирование перестанет работать при нулевом swappiness.

Предагаю описание для file_is_low и друзей:

#if defined(CONFIG_PROTECT_FILE)
	/*
	 * The file pages on the current node are not reclaimed when
	 * their value below vm.file_low_kbytes unless we threaten to
	 * OOM or have no swap space.
	 */
	unsigned int file_is_low:1;

	/*
	 * The file pages on the current node are not reclaimed when
	 * their value below vm.file_min_kbytes.
	 */
	unsigned int file_is_min:1;
#endif
anonymous
()
Ответ на: комментарий от anonymous

Лучше так:

#if defined(CONFIG_PROTECT_FILE)
	/*
	 * The file pages on the current node are not reclaimed when
	 * their value below vm.file_low_kbytes unless we threaten to
	 * OOM or have no swap space or vm.swappiness=0.
	 */
	unsigned int file_is_low:1;

	/*
	 * The file pages on the current node are not reclaimed when
	 * their value below vm.file_min_kbytes.
	 */
	unsigned int file_is_min:1;
#endif
#if defined(CONFIG_PROTECT_FILE)
		file <<= (PAGE_SHIFT - 10);
		sc->file_is_low = file <= sysctl_file_low_kbytes && swappiness;
		sc->file_is_min = file <= sysctl_file_min_kbytes;
		if (sc->file_is_low || sc->file_is_min)
			sc->file_is_tiny = true;
#endif
anonymous
()
Ответ на: комментарий от post-factum
фев 17 06:13:18 PC kernel: BUG: unable to handle page fault for address: ffffdace6cf35cc8
фев 17 06:13:19 PC kernel: #PF: supervisor read access in kernel mode
фев 17 06:13:20 PC kernel: #PF: error_code(0x0000) - not-present page
фев 17 06:13:20 PC kernel: PGD 0 P4D 0 
фев 17 06:13:20 PC kernel: Oops: 0000 [#1] SMP PTI
фев 17 06:13:20 PC kernel: CPU: 3 PID: 1086 Comm: Xorg Not tainted 5.10.5bb0 #2
фев 17 06:13:20 PC kernel: Hardware name: Acer VAG70_HC/VAG70, BIOS V2.16 01/14/2013
фев 17 06:13:20 PC kernel: RIP: 0010:kfree+0x5d/0x120
фев 17 06:13:20 PC kernel: Code: 80 48 01 ea 0f 82 ce 00 00 00 48 c7 c0 00 00 00 80 48 2b 05 35 3d ea 00 48 01 c2 48 c1 ea 0c 48 c1 e2 06 48 03 15 13 3d ea 00 <48> 8b 42 08 48 8d 48 ff a8 01 48 0f 45 d1 48 8b 4a 08 48 8d 41 ff
фев 17 06:13:20 PC kernel: RSP: 0018:ffffb28dc0a07a60 EFLAGS: 00010086
фев 17 06:13:20 PC kernel: RAX: 0000626100000000 RBX: 0000000000000202 RCX: 0000000000000008
фев 17 06:13:20 PC kernel: RDX: ffffdace6cf35cc0 RSI: ffffffffc100a7e3 RDI: 00005639bcd735c0
фев 17 06:13:20 PC kernel: RBP: 00005639bcd735c0 R08: 0000000000000000 R09: 0000000000000000
фев 17 06:13:20 PC kernel: R10: 0000000000000000 R11: ffff9da00fea2280 R12: 0000000000000000
фев 17 06:13:20 PC kernel: R13: ffff9da117e50b20 R14: ffffb28dc0a07b58 R15: ffffb28dc0a07b58
фев 17 06:13:20 PC kernel: FS:  00007f185f6150c0(0000) GS:ffff9da1554c0000(0000) knlGS:0000000000000000
фев 17 06:13:20 PC kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
фев 17 06:13:20 PC kernel: CR2: ffffdace6cf35cc8 CR3: 00000001140e4005 CR4: 00000000001706e0
фев 17 06:13:20 PC kernel: Call Trace:
фев 17 06:13:20 PC kernel:  eb_relocate_parse_slow+0x2c3/0x610 [i915]
фев 17 06:13:20 PC kernel:  i915_gem_do_execbuffer+0x1650/0x1ec0 [i915]
фев 17 06:13:20 PC kernel:  ? exc_page_fault+0x1bf/0x510
фев 17 06:13:20 PC kernel:  ? __zram_bvec_read.constprop.37+0x14f/0x310 [zram]
фев 17 06:13:20 PC kernel:  i915_gem_execbuffer2_ioctl+0xea/0x200 [i915]
фев 17 06:13:20 PC kernel:  ? i915_gem_execbuffer_ioctl+0x2d0/0x2d0 [i915]
фев 17 06:13:20 PC kernel:  drm_ioctl_kernel+0xae/0xf0 [drm]
фев 17 06:13:20 PC kernel:  drm_ioctl+0x304/0x3b0 [drm]
фев 17 06:13:20 PC kernel:  ? i915_gem_execbuffer_ioctl+0x2d0/0x2d0 [i915]
фев 17 06:13:20 PC kernel:  __x64_sys_ioctl+0x8e/0xd0
фев 17 06:13:20 PC kernel:  do_syscall_64+0x33/0x80
фев 17 06:13:20 PC kernel:  entry_SYSCALL_64_after_hwframe+0x44/0xa9
фев 17 06:13:20 PC kernel: RIP: 0033:0x7f185d05e017
фев 17 06:13:20 PC kernel: Code: 00 00 00 48 8b 05 81 7e 2b 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 51 7e 2b 00 f7 d8 64 89 01 48
фев 17 06:13:20 PC kernel: RSP: 002b:00007fff62540bb8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
фев 17 06:13:20 PC kernel: RAX: ffffffffffffffda RBX: 00005639bb5cdaf0 RCX: 00007f185d05e017
фев 17 06:13:20 PC kernel: RDX: 00007fff62540c00 RSI: 0000000040406469 RDI: 000000000000000e
фев 17 06:13:20 PC kernel: RBP: 00007fff62540c00 R08: 0000000000000000 R09: 0000000000000000
фев 17 06:13:20 PC kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 0000000040406469
фев 17 06:13:20 PC kernel: R13: 000000000000000e R14: 00005639bb718a40 R15: 0000000000000278
фев 17 06:13:20 PC kernel: Modules linked in: zram zsmalloc ctr ccm nfnetlink_queue nfnetlink_log nfnetlink bnep nouveau binfmt_misc snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio ath9k ath9k_common i915 ath9k_hw ath mac80211 intel_rapl_msr uvcvideo ath3k btusb btrtl btbcm videobuf2_vmalloc videobuf2_memops btintel videobuf2_v4l2 snd_hda_intel bluetooth videobuf2_common intel_rapl_common snd_intel_dspcfg videodev mc snd_hda_codec x86_pkg_temp_thermal intel_powerclamp jitterentropy_rng drbg ansi_cprng ecdh_generic ecc coretemp kvm_intel snd_hda_core snd_hwdep cfg80211 snd_pcm snd_timer snd kvm mxm_wmi ttm drm_kms_helper drm iTCO_wdt iTCO_vendor_support acer_wmi soundcore sg evdev irqbypass joydev serio_raw sparse_keymap rapl rfkill at24 regmap_i2c lpc_ich mfd_core intel_cstate libarc4 intel_uncore mei_me mei pcspkr i2c_algo_bit wmi_bmof ac button ipt_REJECT nf_reject_ipv4 nf_log_ipv4 nf_log_common xt_LOG xt_limit xt_tcpudp xt_addrtype xt_conntrack ip6_tables
фев 17 06:13:20 PC kernel:  nf_conntrack_netbios_ns nf_conntrack_broadcast nf_nat_ftp nf_nat nf_conntrack_ftp nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_filter ip_tables x_tables autofs4 ext4 crc16 mbcache jbd2 btrfs blake2b_generic xor zstd_compress raid6_pq libcrc32c crc32c_generic algif_skcipher af_alg dm_crypt cbc encrypted_keys dm_mod hid_generic usbhid hid sr_mod sd_mod cdrom t10_pi crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel ahci libahci libata xhci_pci aesni_intel ehci_pci xhci_hcd crypto_simd ehci_hcd cryptd glue_helper i2c_i801 psmouse scsi_mod usbcore i2c_smbus atl1c thermal wmi battery video
фев 17 06:13:20 PC kernel: CR2: ffffdace6cf35cc8
фев 17 06:13:20 PC kernel: ---[ end trace 6ed001c7702e514f ]---
фев 17 06:13:20 PC kernel: RIP: 0010:kfree+0x5d/0x120
фев 17 06:13:20 PC kernel: Code: 80 48 01 ea 0f 82 ce 00 00 00 48 c7 c0 00 00 00 80 48 2b 05 35 3d ea 00 48 01 c2 48 c1 ea 0c 48 c1 e2 06 48 03 15 13 3d ea 00 <48> 8b 42 08 48 8d 48 ff a8 01 48 0f 45 d1 48 8b 4a 08 48 8d 41 ff
фев 17 06:13:20 PC kernel: RSP: 0018:ffffb28dc0a07a60 EFLAGS: 00010086
фев 17 06:13:20 PC kernel: RAX: 0000626100000000 RBX: 0000000000000202 RCX: 0000000000000008
фев 17 06:13:20 PC kernel: RDX: ffffdace6cf35cc0 RSI: ffffffffc100a7e3 RDI: 00005639bcd735c0
фев 17 06:13:20 PC kernel: RBP: 00005639bcd735c0 R08: 0000000000000000 R09: 0000000000000000
фев 17 06:13:20 PC kernel: R10: 0000000000000000 R11: ffff9da00fea2280 R12: 0000000000000000
фев 17 06:13:20 PC kernel: R13: ffff9da117e50b20 R14: ffffb28dc0a07b58 R15: ffffb28dc0a07b58
фев 17 06:13:20 PC kernel: FS:  00007f185f6150c0(0000) GS:ffff9da1554c0000(0000) knlGS:0000000000000000
фев 17 06:13:20 PC kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
фев 17 06:13:20 PC kernel: CR2: ffffdace6cf35cc8 CR3: 00000001140e4005 CR4: 00000000001706e0

Как тебе такое?

hakavlad ★★★
()

раньше было интересно, сейчас не очень, Easy anticheat уже в ядре?

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