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

да с этим гемом вроде регулярно баги, хз то ли это

кстати без перенаправления в scan anon с низким своппинес OOPS легко воспроизводится. В противном случае - не воспроизводится.

Есть новый патч, буду тестировать. Твой свежий тоже, позже. Посмотрим, легко ли с твоим получить упс.

hakavlad ★★★
()
Ответ на: комментарий от post-factum
	if (!cgroup_reclaim(sc)) {  // Как это понимать?
...
		sc->file_is_tiny =
			file + free <= total_high_wmark &&
			!(sc->may_deactivate & DEACTIVATE_ANON) &&
			anon >> sc->priority;

#if defined(CONFIG_UNEVICTABLE_FILE)
		sc->file_is_low = K(file) < sysctl_unevictable_file_kbytes_low &&
				  K(file) > sysctl_unevictable_file_kbytes_min;

		sc->file_is_min = K(file) <= sysctl_unevictable_file_kbytes_min;
#endif
	}

Вопрос такой: когда бывает cgroup_reclaim(sc) и как это влияет на результат вычисления low, min, tiny?

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

что мешает поменять условие для file_is_tiny

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

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

Собрал пф511, протестирую в течение двух суток.

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

Почему так

		if (file && scan) {
			unsigned long low_scan_granularity = SWAP_CLUSTER_MAX >> sc->priority;
			if (sc->file_is_low && scan > low_scan_granularity)
				scan = low_scan_granularity;
			else if (sc->file_is_min)
				scan = 0;
		}

а не так

		if (file && scan) {
			if (sc->file_is_low)
				scan = min(scan, SWAP_CLUSTER_MAX >> sc->priority);
			else if (sc->file_is_min)
				scan = 0;
		}
anonymous
()
Ответ на: комментарий от post-factum

Вышла новая линейка - le9bb. Остальные отправлены в deprecated.

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

le9bb старается избегать велосипедов и полагается на существующие механизмы.

low и min работают по аналогии с соответствующими memory.low и memory.min из cgroup_v2.

По сравнению с предыдущим le9ba новый le9bb уважает swappiness=0 и лучше документирован.

С алгоритмом le9bb ни разу не получен kernel oops, a Fatal IO error 11 возникают реже, чем с патчами, основанными на классическом le9 c защитой AF.

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

Тест pf511.

Со swappiness=1 под сильным стрессом мягкий порог сильно проседает. - Вот лог с дефолтами:

MA 94.9, BU 6.4, CA 221.1, AA 171.9, IA 7700.4, AF 65.1, IF 62.6, SF 12647.6, SU 36292.5, SH 94.1, SR 127.1
MA 94.2, BU 8.2, CA 206.2, AA 150.1, IA 7739.6, AF 64.3, IF 62.6, SF 13343.9, SU 35596.2, SH 82.1, SR 127.1
MA 95.1, BU 8.3, CA 219.0, AA 196.3, IA 7705.4, AF 64.7, IF 63.4, SF 15573.1, SU 33367.0, SH 93.6, SR 127.0

oops пока не было. Вроде все ок.

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

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

Этим вопросом ребята задавались и в 2010, и даже предлагали вариант решения:

+                       /*
+                        * If the system has low page cache, we slow down
+                        * scanning speed with 1/8 to protect working set.
+                        */
+                       if (low_pagecache)
+                               scan >>= 3;

https://lore.kernel.org/patchwork/patch/222042/

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

5.11.0-pf1

Тест Ташкинова успешно пройдет:

  • Fatal IO error не произошло быстро;
  • Вкладки падали, но таки лаги и высокое IO давление было - min порог для низковат для безлаговости. А вот с min=200000 все летало.

Об устойчивости low порога: достаточно устойчив, кроме случаев с очень низким swappines.

В целом впечатление хорошее, претензий нет. Можно рекомендовать к дальнейшему широкому тестированию.

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

Интересно, что функционально мне казалось, что оно одно и то же с тем, что было в 5.10. В смысле, абсолютно.

Я точно чего-то не понимаю ☺.

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

казалось, что оно одно и то же с тем, что было

А разве нет? Отличие я вижу только в уменьшении числа Fatal IO err.

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

BUG, Oops

5.11.0-pf1

min поднял до дефолтного low, swappiness=1, timeout 30 stress -m 42 --vm-bytes 1G.

MemTotal=9.6G, zwap on zram (disksize=47.8G).

Результат, которого и следовало опасаться:

фев 21 05:03:35 PC kernel: BUG: unable to handle page fault for address: ffffec6ca2000008
фев 21 05:03:35 PC kernel: #PF: supervisor read access in kernel mode
фев 21 05:03:35 PC kernel: #PF: error_code(0x0000) - not-present page
фев 21 05:03:35 PC kernel: PGD 0 P4D 0 
фев 21 05:03:35 PC kernel: Oops: 0000 [#1] SMP PTI
фев 21 05:03:35 PC kernel: CPU: 1 PID: 1441 Comm: Xorg Not tainted 5.11.0-pf1bb0 #1
фев 21 05:03:35 PC kernel: Hardware name: Acer VAG70_HC/VAG70, BIOS V2.16 01/14/2013
фев 21 05:03:35 PC kernel: RIP: 0010:kfree+0x61/0x160
фев 21 05:03:35 PC kernel: Code: 80 48 01 ea 0f 82 0d 01 00 00 48 c7 c0 00 00 00 80 48 2b 05 69 f7 e9 00 48 01 c2 48 c1 ea 0c 48 c1 e2 06 48 03 15 47 f7 e9 00 <48> 8b 42 08 48 8d 48 ff a8 01 48 0f 45 d1 48 8b 4a 08 48 8d 41 ff
фев 21 05:03:35 PC kernel: RSP: 0018:ffffb55f41f3fa50 EFLAGS: 00010086
фев 21 05:03:35 PC kernel: RAX: 00006a1600000000 RBX: 0000000000000206 RCX: 0000000000000008
фев 21 05:03:35 PC kernel: RDX: ffffec6ca2000000 RSI: ffffffffc12f6d3a RDI: 0000000200000000
фев 21 05:03:35 PC kernel: RBP: 0000000200000000 R08: 0000000000000000 R09: 0000000000000000
фев 21 05:03:35 PC kernel: R10: ffff95eb89d37000 R11: 0000000000000400 R12: 0000000000000000
фев 21 05:03:35 PC kernel: R13: ffff95eac611bba8 R14: ffffb55f41f3fb58 R15: ffffb55f41f3fb58
фев 21 05:03:35 PC kernel: FS:  00007ff4890340c0(0000) GS:ffff95ec55440000(0000) knlGS:0000000000000000
фев 21 05:03:35 PC kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
фев 21 05:03:35 PC kernel: CR2: ffffec6ca2000008 CR3: 000000010dbc6001 CR4: 00000000001706e0
фев 21 05:03:35 PC kernel: Call Trace:
фев 21 05:03:35 PC kernel:  eb_relocate_parse_slow+0x40a/0x640 [i915]
фев 21 05:03:35 PC kernel:  i915_gem_do_execbuffer+0x1658/0x1ec0 [i915]
фев 21 05:03:35 PC kernel:  ? do_swap_page+0x3c2/0x770
фев 21 05:03:35 PC kernel:  ? do_user_addr_fault+0x1b6/0x480
фев 21 05:03:35 PC kernel:  ? exc_page_fault+0x80/0x150
фев 21 05:03:35 PC kernel:  i915_gem_execbuffer2_ioctl+0xea/0x200 [i915]
фев 21 05:03:35 PC kernel:  ? i915_gem_execbuffer_ioctl+0x2d0/0x2d0 [i915]
фев 21 05:03:35 PC kernel:  drm_ioctl_kernel+0xae/0xf0 [drm]
фев 21 05:03:35 PC kernel:  drm_ioctl+0x304/0x3b0 [drm]
фев 21 05:03:35 PC kernel:  ? i915_gem_execbuffer_ioctl+0x2d0/0x2d0 [i915]
фев 21 05:03:35 PC kernel:  __x64_sys_ioctl+0x8e/0xd0
фев 21 05:03:35 PC kernel:  do_syscall_64+0x33/0x80
фев 21 05:03:35 PC kernel:  entry_SYSCALL_64_after_hwframe+0x44/0xa9
фев 21 05:03:35 PC kernel: RIP: 0033:0x7ff486a7d017
фев 21 05:03:35 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
фев 21 05:03:35 PC kernel: RSP: 002b:00007ffd7433afc8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
фев 21 05:03:35 PC kernel: RAX: ffffffffffffffda RBX: 0000556ad22c9af0 RCX: 00007ff486a7d017
фев 21 05:03:35 PC kernel: RDX: 00007ffd7433b010 RSI: 0000000040406469 RDI: 000000000000000e
фев 21 05:03:35 PC kernel: RBP: 00007ffd7433b010 R08: 0000000000000000 R09: 0000000000000000
фев 21 05:03:35 PC kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 0000000040406469
фев 21 05:03:35 PC kernel: R13: 000000000000000e R14: 0000556ad2414a40 R15: 0000000000000290
фев 21 05:03:35 PC kernel: Modules linked in: zram zsmalloc ctr ccm nfnetlink_queue nfnetlink_log nfnetlink bnep binfmt_misc nouveau snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio ath3k btusb btrtl btbcm btintel i915 bluetooth uvcvideo jitterentropy_rng videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev drbg ansi_cprng ecdh_generic ath9k ecc intel_rapl_msr mc ath9k_common mxm_wmi iTCO_wdt iTCO_vendor_support drm_ttm_helper intel_rapl_common ath9k_hw ath mac80211 snd_hda_intel snd_intel_dspcfg ttm x86_pkg_temp_thermal intel_powerclamp drm_kms_helper drm coretemp kvm_intel snd_hda_codec cfg80211 snd_hda_core kvm snd_hwdep snd_pcm snd_timer snd irqbypass rapl lpc_ich acer_wmi intel_cstate intel_uncore soundcore evdev joydev at24 mei_me pcspkr serio_raw sparse_keymap libarc4 mei rfkill regmap_i2c mfd_core sg 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
фев 21 05:03:35 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 raid6_pq zstd_compress 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 aesni_intel xhci_pci libata crypto_simd ehci_pci xhci_hcd cryptd ehci_hcd glue_helper atl1c scsi_mod psmouse i2c_i801 usbcore i2c_smbus thermal wmi battery video
фев 21 05:03:35 PC kernel: CR2: ffffec6ca2000008
фев 21 05:03:35 PC kernel: ---[ end trace 0408a6cc42a94137 ]---
фев 21 05:03:35 PC kernel: RIP: 0010:kfree+0x61/0x160
фев 21 05:03:35 PC kernel: Code: 80 48 01 ea 0f 82 0d 01 00 00 48 c7 c0 00 00 00 80 48 2b 05 69 f7 e9 00 48 01 c2 48 c1 ea 0c 48 c1 e2 06 48 03 15 47 f7 e9 00 <48> 8b 42 08 48 8d 48 ff a8 01 48 0f 45 d1 48 8b 4a 08 48 8d 41 ff
фев 21 05:03:35 PC kernel: RSP: 0018:ffffb55f41f3fa50 EFLAGS: 00010086
фев 21 05:03:35 PC kernel: RAX: 00006a1600000000 RBX: 0000000000000206 RCX: 0000000000000008
фев 21 05:03:35 PC kernel: RDX: ffffec6ca2000000 RSI: ffffffffc12f6d3a RDI: 0000000200000000
фев 21 05:03:35 PC kernel: RBP: 0000000200000000 R08: 0000000000000000 R09: 0000000000000000
фев 21 05:03:35 PC kernel: R10: ffff95eb89d37000 R11: 0000000000000400 R12: 0000000000000000
фев 21 05:03:35 PC kernel: R13: ffff95eac611bba8 R14: ffffb55f41f3fb58 R15: ffffb55f41f3fb58
фев 21 05:03:35 PC kernel: FS:  00007ff4890340c0(0000) GS:ffff95ec55440000(0000) knlGS:0000000000000000
фев 21 05:03:35 PC kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
фев 21 05:03:35 PC kernel: CR2: ffffec6ca2000008 CR3: 000000010dbc6001 CR4: 00000000001706e0
фев 21 05:07:06 PC kernel: perf: interrupt took too long (3964 > 3941), lowering kernel.perf_event_max_sample_rate to 50250
...
фев 21 05:09:16 PC kernel: sysrq: SAK
hakavlad ★★★
()
Ответ на: BUG, Oops от hakavlad

– это случилось вне OOM, с достаточным запасом swap free.

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

Ну так есть же версии патча без Этого - с последним bb не воспроизводится. Лечение простое: перенаправление в SCAN_ANON при sc->file_is_min. Патч pf легко улучшить.

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

Вот лекарство:

+	if (sc->file_is_min && swappiness) {
+		scan_balance = SCAN_ANON;
+		goto out;
+	}
hakavlad ★★★
()
Ответ на: комментарий от post-factum

Подъехало объяснение, как увеличение vm.min_free_kbytes препятствует заморозке гуя при swap on zram и стрессах.

tail /dev/zero и картина с vm.min_free_kbytes=10000:

MA 0.0, BU 0.5, CA 20.3, AA 8001.6, IA 946.8, AF 3.0, IF 2.9, SF 28061.0, SU 21058.2, SH 8.8, SR 28.7
MA 0.0, BU 0.8, CA 20.4, AA 7994.4, IA 944.2, AF 3.3, IF 3.1, SF 27244.8, SU 21874.5, SH 8.8, SR 27.3
MA 0.0, BU 0.6, CA 16.6, AA 7936.2, IA 999.8, AF 1.3, IF 1.1, SF 26429.0, SU 22690.3, SH 8.8, SR 22.9
MA 0.0, BU 0.7, CA 21.0, AA 7958.7, IA 952.8, AF 3.5, IF 3.4, SF 25597.2, SU 23522.1, SH 8.8, SR 30.5

вот картина с vm.min_free_kbytes=200000:

MA 0.0, BU 5.2, CA 96.2, AA 7429.0, IA 982.4, AF 24.9, IF 20.4, SF 4987.8, SU 44131.4, SH 50.7, SR 27.2
MA 0.0, BU 5.2, CA 99.2, AA 7416.0, IA 986.1, AF 24.9, IF 20.4, SF 3991.9, SU 45127.3, SH 53.5, SR 27.5
MA 0.0, BU 5.2, CA 98.5, AA 7405.2, IA 984.6, AF 24.9, IF 20.4, SF 3017.4, SU 46101.8, SH 53.0, SR 27.6
MA 0.0, BU 5.5, CA 108.4, AA 7380.8, IA 992.5, AF 25.6, IF 21.2, SF 2014.2, SU 47105.1, SH 61.6, SR 28.1
MA 0.0, BU 5.5, CA 100.2, AA 7370.2, IA 981.9, AF 25.8, IF 21.2, SF 1013.4, SU 48105.9, SH 53.2, SR 33.1

– увеличение vm.min_free_kbytes препятствует полному вытеснению файловых страниц. Во втором случае удерживается 45M файловых страниц, в первом же их объем падает до единиц.

Таким образом, увеличение min_free_kbytes - это le9 для бедных.

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

Погонял еще стрессы с le9bb - oops не воспроизводится. Только Fatal IO err c жестким порогом бывает.

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

This is used to force the Linux VM to keep a minimum number
of kilobytes free.  The VM uses this number to compute a
watermark[WMARK_MIN] value for each lowmem zone in the system.

То есть это влияет на порог WMARK_MIN и, соответственно, на WMARK_HIGH и sc->file_is_tiny и соответственно способствует мягкому резервированию.

hakavlad ★★★
()
Ответ на: комментарий от post-factum
root@PC:~# sysctl -w vm.unevictable_file_kbytes_min=0
vm.unevictable_file_kbytes_min = 0
root@PC:~# sysctl -w vm.unevictable_file_kbytes_min=-1
vm.unevictable_file_kbytes_min = -1 
root@PC:~# sysctl vm.unevictable_file_kbytes_min
vm.unevictable_file_kbytes_min = 0

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

hakavlad ★★★
()
Ответ на: комментарий от post-factum
/*
 * Maximum number of reclaim retries without progress before the OOM
 * killer is consider the only way forward.
 */
#define MAX_RECLAIM_RETRIES 16

Обнуление MAX_RECLAIM_RETRIES достоверно и сильно снижает число ошибок. Побочек при нулевом MAX_RECLAIM_RETRIES не выявлено - фолс-позитивных ООМ, напрмер, не происходит. Это альтернатива выключению шринкера, хотя и менее эффективная.

Каких побочек ждать от низкого MAX_RECLAIM_RETRIES и почему у меня их не было? Не находишь ли, что на десктопе вполне можно ставить и более низкие значения (вместо 16)?

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

Не знаю, смотри 0a0337e0d1d134465778a16f5cbea95086e8e9e0. Как по мне, поскольку это очередная эвристика, её можно хакать как хочешь, от этого менее полезной/вредной она не станет, всё так же оставаясь только лишь эвристикой.

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

Мне интересно, почему там !mem_cgroup_disabled()

С этим условием порог перестает работать. Возможно в хромиум ос подсистема cgroup вообще выключена. Хз зачем это.

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