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)
Ответ на: комментарий от hakavlad

где эти клоуны видели, чтобы DMA был disabled?

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

Есть ли смысл при жестком резервировании вместо scan = 0; писать

		scan_balance = SCAN_ANON;
		goto out;

? Или это ничего принципиально не поменяет?

anonymous
()
Ответ на: комментарий от post-factum
#if defined(CONFIG_ACTIVE_FILE_RESERVE)
		if (lru == LRU_ACTIVE_FILE) {
			unsigned long active_file_kbytes =
				K(global_node_page_state(NR_ACTIVE_FILE));
			unsigned long soft_max_scan =
				sysctl_active_file_reserve_soft_max_scan >> sc->priority;

			if (active_file_kbytes <= sysctl_active_file_reserve_hard_kbytes) {
				scan_balance = SCAN_ANON;  //
				goto out;                  // тут раньше было бы scan = 0;
				}
				else if (
				active_file_kbytes <= sysctl_active_file_reserve_soft_kbytes &&
				scan > soft_max_scan
				) 
				scan = soft_max_scan;
		}
#endif
anonymous
()
Ответ на: комментарий от post-factum

Выходом из цикла будет ООМ, это нам и нужно. Впрочем, нужно проверять. Хотя и так все ок, кроме встройки интел.

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

В чатике le9 test day, получаю сообщения о page allocation failure и падениях даже с гибидом с включенной nvidia.

Так что прошу присмотреться к выключателю шринкера.

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

Я пас. Если шринкер нужно фиксить, катай багрепорт на i915, воспроизведя проблему на непатченном ядре (а она там, ИМХО, должна тоже быть).

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

Я ж не наркоман в 3д играть на встройке интел.

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

Кстати, не желаешь ли применять патч из хромос вместо le9?

Там у них min_filelist_kbytes создан с типом int. Это нормально вообще?

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

Охереть логика

Со шринкером проблемы, без шринкера проблем не обнаружено.

Ну и где тут нарушение логики?

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

3d игры несколько часов попробуй погонять

Сейчас ребята поиграют и расскажут о результатах. Ядро https://copr.fedorainfracloud.org/coprs/atim/kernel-futex/ собрано https://copr.fedorainfracloud.org/coprs/atim/kernel-futex/build/1929181/ без шринкера:

Applying: Disable DRM/i915 GEM shrinker

https://download.copr.fedorainfracloud.org/results/atim/kernel-futex/fedora-33-x86_64/01929181-kernel/builder-live.log.gz

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

Вроде никто не жалуется, все ок.

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

Вынести

#if defined(CONFIG_UNEVICTABLE_ACTIVEFILE)
extern unsigned long sysctl_unevictable_activefile_kbytes_low;
extern unsigned long sysctl_unevictable_activefile_kbytes_min;
#endif

в mm.h - плохая идея или хорошая? Так сделано в хоромос. Просто обычно вижу экстерны в заголовочных файлах, а не в функциях.

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

Задирание ручки min_free_kbytes не приводит к ошибкам. К ошибкам ведет mlock разделяемых либ и резервирование файловых страниц

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

Не, зачем мне хромось.

Они же ПРОФЕССИОНЫЛЫ и ПЕРВОПРОХОДЦЫ, на десять лет опередившие время.

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

Давайте отключать всё, что глючит

Хирурги так и делают.

Вообще если можно без чего-то обойтись - то лучше таки удалить это.

Пока польза от отключения (с включенным резервированием AF страниц) превышает потенциальный вред от выключения шринкера (а вред сводится к разрастанию объема памяти, занимаемой видео). Нет?

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

Собрал 5.10.2 с патчем из хромос https://chromium.googlesource.com/chromiumos/third_party/kernel-next/+/545e2917dbd863760a51379de8c26631e667c563%5E!/. Патч наложился без проблем, сборка без ошибок.

По умолчанию резерва нет: vm.min_filelist_kbytes = 0.

Выставил 250000:

# sysctl -w vm.min_filelist_kbytes=250000
vm.min_filelist_kbytes = 250000
# cat /proc/sys/vm/min_filelist_kbytes
250000

Эффекта нет. Без свопа:

MA 2130.6, BU 15.6, CA 392.3, AA 4.0, IA 7130.8, AF 33.8, IF 166.5, SF 0.0, SU 0.0, SH 201.8, SR 24.6
MA 1800.1, BU 15.6, CA 392.3, AA 4.0, IA 7459.7, AF 33.8, IF 166.5, SF 0.0, SU 0.0, SH 201.8, SR 24.6
MA 1430.9, BU 15.6, CA 392.3, AA 4.0, IA 7828.9, AF 33.8, IF 166.5, SF 0.0, SU 0.0, SH 201.8, SR 24.6
MA 1075.0, BU 15.6, CA 395.6, AA 4.0, IA 8184.3, AF 33.8, IF 169.8, SF 0.0, SU 0.0, SH 201.8, SR 24.6
MA 724.0, BU 15.6, CA 392.3, AA 4.0, IA 8530.8, AF 33.8, IF 166.5, SF 0.0, SU 0.0, SH 201.8, SR 24.6
MA 362.1, BU 15.6, CA 392.3, AA 4.0, IA 8892.2, AF 33.8, IF 166.5, SF 0.0, SU 0.0, SH 201.8, SR 24.6
MA 82.7, BU 14.8, CA 371.9, AA 4.0, IA 9190.8, AF 95.1, IF 93.2, SF 0.0, SU 0.0, SH 192.7, SR 24.6
MA 62.5, BU 2.9, CA 290.4, AA 4.0, IA 9252.2, AF 61.0, IF 33.5, SF 0.0, SU 0.0, SH 192.4, SR 24.2
MA 0.0, BU 0.5, CA 202.6, AA 4.0, IA 9375.0, AF 1.7, IF 3.0, SF 0.0, SU 0.0, SH 192.6, SR 24.1
MA 2812.5, BU 0.5, CA 202.7, AA 4.0, IA 6540.3, AF 1.5, IF 3.0, SF 0.0, SU 0.0, SH 192.6, SR 24.1
MA 7693.4, BU 0.5, CA 202.8, AA 4.0, IA 1674.6, AF 1.6, IF 3.3, SF 0.0, SU 0.0, SH 192.3, SR 24.1
MA 7693.9, BU 0.5, CA 202.9, AA 4.0, IA 1674.6, AF 2.0, IF 3.3, SF 0.0, SU 0.0, SH 192.3, SR 24.1
MA 7693.9, BU 0.5, CA 202.9, AA 4.0, IA 1674.6, AF 2.0, IF 3.3, SF 0.0, SU 0.0, SH 192.3, SR 24.1
MA 7694.2, BU 0.5, CA 202.9, AA 4.0, IA 1674.6, AF 2.0, IF 3.3, SF 0.0, SU 0.0, SH 192.3, SR 24.1

– AF падает до единиц.

Со свопом также:

# mem2log
Starting mem2log with interval 2s
Process memory locked with MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT
All values are in mebibytes
MemTotal: 9788.1, SwapTotal: 9788.1
--
MA is MemAvailable, BU is Buffers, CA is Cached
AA is Active(anon), IA is Inactive(anon), AF is Active(file), IF is Inactive(file)
SF is SwapFree, SU is `SwapTotal - SwapFree`, SH is Shmem, SR is SReclaimable
--
MA 7597.1, BU 14.8, CA 410.0, AA 4.0, IA 1604.1, AF 21.3, IF 161.0, SF 9788.1, SU 0.0, SH 236.9, SR 23.6
MA 7604.7, BU 15.1, CA 402.6, AA 4.0, IA 1602.7, AF 21.7, IF 161.0, SF 9788.1, SU 0.0, SH 229.4, SR 23.6
MA 7605.3, BU 15.1, CA 403.1, AA 4.0, IA 1602.0, AF 21.7, IF 161.0, SF 9788.1, SU 0.0, SH 229.9, SR 23.6
MA 7239.1, BU 15.2, CA 403.0, AA 4.0, IA 1968.3, AF 22.0, IF 161.0, SF 9788.1, SU 0.0, SH 229.8, SR 23.6
MA 876.8, BU 15.2, CA 402.6, AA 4.0, IA 8319.6, AF 22.4, IF 160.7, SF 9788.1, SU 0.0, SH 229.1, SR 23.6
MA 0.0, BU 0.6, CA 185.9, AA 136.2, IA 8909.0, AF 16.3, IF 12.0, SF 8593.3, SU 1194.8, SH 152.1, SR 24.8
MA 0.0, BU 0.6, CA 167.2, AA 131.2, IA 8847.0, AF 16.6, IF 5.4, SF 5593.1, SU 4195.0, SH 139.8, SR 31.6
MA 0.0, BU 0.6, CA 154.6, AA 126.0, IA 8826.1, AF 16.8, IF 8.0, SF 2450.3, SU 7337.8, SH 124.5, SR 38.6
MA 0.0, BU 0.5, CA 121.3, AA 121.3, IA 8783.9, AF 7.0, IF 2.5, SF 3.6, SU 9784.5, SH 106.6, SR 43.9
MA 8766.5, BU 0.6, CA 127.2, AA 120.6, IA 27.6, AF 9.7, IF 7.3, SF 8213.3, SU 1574.8, SH 105.1, SR 29.3
MA 8743.3, BU 0.8, CA 148.8, AA 120.7, IA 50.5, AF 10.1, IF 28.6, SF 8235.8, SU 1552.3, SH 105.2, SR 29.1
MA 8728.4, BU 1.1, CA 165.4, AA 120.8, IA 57.9, AF 10.4, IF 45.1, SF 8240.0, SU 1548.0, SH 105.3, SR 29.0

Разумеется, и гуй замерзал.

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

очевидно лучше что-то, что жрёт очень много видеопамяти

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

Все так. С тем кодом происходит жесткое зависание.

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

Нашел альтернативный способ мягкого резервирования файловых страниц. Вот картина:

MA 333.2, BU 48.8, CA 395.0, AA 435.2, IA 7838.9, AF 146.5, IF 185.5, SF 3076.1, SU 45864.2, SH 106.0, SR 131.4
MA 334.5, BU 48.8, CA 390.8, AA 439.1, IA 7836.0, AF 146.5, IF 185.7, SF 767.1, SU 48173.3, SH 101.9, SR 135.3
MA 324.7, BU 48.8, CA 378.4, AA 536.4, IA 7749.4, AF 172.9, IF 142.0, SF 0.0, SU 48940.3, SH 106.1, SR 136.6
MA 315.2, BU 48.8, CA 370.7, AA 566.4, IA 7737.5, AF 158.0, IF 138.4, SF 0.4, SU 48939.9, SH 117.4, SR 136.2
MA 61.3, BU 0.5, CA 113.1, AA 630.8, IA 8103.8, AF 9.1, IF 0.5, SF 9955.6, SU 38984.8, SH 98.0, SR 121.8
MA 66.8, BU 0.5, CA 136.0, AA 630.1, IA 8104.2, AF 27.6, IF 4.8, SF 38826.3, SU 10114.0, SH 98.0, SR 73.6
MA 8349.2, BU 0.5, CA 151.1, AA 431.4, IA 136.6, AF 41.7, IF 5.6, SF 48119.0, SU 821.3, SH 98.0, SR 45.6
MA 8339.6, BU 0.8, CA 170.8, AA 431.1, IA 137.6, AF 60.3, IF 6.9, SF 48120.5, SU 819.8, SH 98.2, SR 45.4

код

		sc->file_is_tiny =
			file + free <= sysctl_file_reserve;
	}

вместо


		sc->file_is_tiny =
			file + free <= total_high_wmark &&
			!(sc->may_deactivate & DEACTIVATE_ANON) &&
			anon >> sc->priority;
	}
hakavlad ★★★
()
Последнее исправление: hakavlad (всего исправлений: 2)
Ответ на: комментарий от post-factum

А теперь внимание вопрос: что мешает поменять условие для file_is_tiny, чтобы добиться того же, только с менее идиотскими правками в коде и (частично) отвязав его от watermark’ов?

Так и сделал, только получилось мягкое резервирование файловых (active, inactive). Как сделать жесткий резерв столь же элегантно - хз.

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

Вот вариант для жесткого резервирования (в дополнение к коду выше):

#if defined(CONFIG_FILE_RESERVE)
		if (lru == LRU_ACTIVE_FILE || lru == LRU_INACTIVE_FILE) {
			if (sc->file_is_tiny)
				scan = 0;
		}
#endif

Fatal IO error также бывает и с этим.

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

__GFP_IO was one of the new flags. If it was set, then get_free_pages() was allowed to call shm_swap() to write some pages out to swap. If shm_swap() needed to allocate any buffer_head structures to complete the writeout, it would be careful not to set __GFP_IO. Without this protection, an infinite recursion could easily happen, which would quickly exhaust the stack and cause the kernel to crash.

Может поэтому как раз без этого флага и бывал fatal IO error 11 и даже Oops.

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

Буду билдить. Ожидайте ответа в течение суток, а скорее всего в течение 6 часов.

hakavlad ★★★
()
Ответ на: комментарий от post-factum
#if defined(CONFIG_PROTECT_ACTIVE_FILE)
		if (lru == LRU_ACTIVE_FILE) {
			unsigned long active_file_kbytes =
				K(global_node_page_state(NR_ACTIVE_FILE));
			unsigned long active_file_low_max_scan =
				sysctl_active_file_low_max_scan >> sc->priority;
			if (active_file_kbytes <= sysctl_active_file_min_kbytes &&
				(sc->gfp_mask & __GFP_IO))
				scan = 0;
			else if (active_file_kbytes <= sysctl_active_file_low_kbytes &&
				scan > active_file_low_max_scan) 
				scan = active_file_low_max_scan;
		}
#endif

итог:

фев 10 20:38:35 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=1474,uid=1000
фев 10 20:38:35 PC kernel: Out of memory: Killed process 1474 (tail) total-vm:9175312kB, anon-rss:9169500kB, file-rss:1516kB, shmem-rss:0kB, UID:1000 pgtables:17996kB oom_score_adj:0
фев 10 20:38:35 PC kernel: oom_reaper: reaped process 1474 (tail), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
фев 10 20:38:35 PC polkitd(authority=local)[844]: Unregistered Authentication Agent for unix-session:4 (system bus name :1.25, object path /org/mate/PolicyKit1/AuthenticationAgent, locale ru_RU.UTF-8) (disconnected from bus)
фев 10 20:38:36 PC org.a11y.atspi.Registry[1212]: XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
фев 10 20:38:36 PC org.a11y.atspi.Registry[1212]:       after 99 requests (99 known processed) with 0 events remaining.
фев 10 20:38:35 PC unknown[1295]: notification-area-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 10 20:38:35 PC sudo[1451]: pam_unix(sudo:session): session closed for user root
фев 10 20:38:35 PC unknown[1309]: mate-sensors-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 10 20:38:35 PC lightdm[1148]: pam_unix(lightdm:session): session closed for user user
фев 10 20:38:35 PC unknown[1290]: wnck-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 10 20:38:35 PC unknown[1382]: clock-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 10 20:38:35 PC unknown[1307]: mate-brightness-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 10 20:38:35 PC unknown[1305]: mate-multiload-applet: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 10 20:38:36 PC kernel: nouveau 0000:01:00.0: Enabling HDA controller
фев 10 20:38:35 PC unknown[1422]: mate-system-monitor: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.
фев 10 20:38:35 PC systemd-logind[760]: Removed session 4.

Какие еще есть варианты?

hakavlad ★★★
()
Ответ на: комментарий от post-factum
				/* reclaim and warn, but no oom */
				gfp = mapping_gfp_mask(mapping);

				/*
				 * Our bo are always dirty and so we require
				 * kswapd to reclaim our pages (direct reclaim
				 * does not effectively begin pageout of our
				 * buffers on its own). However, direct reclaim
				 * only waits for kswapd when under allocation
				 * congestion. So as a result __GFP_RECLAIM is
				 * unreliable and fails to actually reclaim our
				 * dirty pages -- unless you try over and over
				 * again with !__GFP_NORETRY. However, we still
				 * want to fail this allocation rather than
				 * trigger the out-of-memory killer and for
				 * this we want __GFP_RETRY_MAYFAIL.
				 */
				gfp |= __GFP_RETRY_MAYFAIL;

https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/i915/gem/i915_gem_shmem.c#L114

Может && !(sc->gfp_mask & __GFP_RETRY_MAYFAIL)?

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

4 способа определения числа файловых страниц. Какой использовать предпочтительнее и почему?

// 1)
		file = node_page_state(pgdat, NR_ACTIVE_FILE) +
			   node_page_state(pgdat, NR_INACTIVE_FILE);
// https://github.com/torvalds/linux/blob/v5.11-rc7/mm/vmscan.c#L2756

// 2)
+	size = node_page_state(lruvec_pgdat(lruvec), NR_ACTIVE_FILE);
+	size += node_page_state(lruvec_pgdat(lruvec), NR_INACTIVE_FILE);
// https://chromium.googlesource.com/chromiumos/third_party/kernel-next/+/545e2917dbd863760a51379de8c26631e667c563%5E!/

// 3)
	file  = lruvec_lru_size(lruvec, LRU_ACTIVE_FILE, MAX_NR_ZONES) +
		lruvec_lru_size(lruvec, LRU_INACTIVE_FILE, MAX_NR_ZONES);
// https://github.com/torvalds/linux/blob/v5.4/mm/vmscan.c#L2427

// 4)
active_file_now=global_node_page_state(NR_ACTIVE_FILE)
// https://github.com/hakavlad/le9-patch/blob/main/rebase-5.9/le9g-5.9.patch#L22
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.