Linux 7.3: быстрее Btrfs и ext4, AF_ALG ограничен по умолчанию, VRAM защищают через cgroup

Обложка: Linux 7.3, релиз ядра 18 октября 2026

18 октября Линус Торвальдс выпустил Linux 7.3: анонс ушёл в рассылку ядра LKML, а тег v7.3 появился в его дереве на git.kernel.org. По Москве это была уже ночь на 19 октября. После 7.3-rc7 неделя прошла спокойно, и релиз вышел точно по плану.

В этот раз Линус не перепутал дни недели и релиз не задержал, о чём сам пишет с иронией. С 19 октября открыто окно слияния 7.4, но Линус в ежегодном семейном отпуске: в первый день он почти всё время проведёт на лодке и под водой, а слиянием займётся после обеда. Поэтому окно может растянуться на лишнюю неделю. Опоздавшие pull request он при этом брать не обещает: всё, что идёт в 7.4, должно быть готово до открытия окна, а не дописываться по ходу.

Полный список изменений собрали на KernelNewbies. Дальше главное для тех, кто держит серверы, и для обычного Linux на десктопе.

Видеокарты с малой VRAM: защита памяти через dmem cgroup

Самое заметное для десктопа касается видеокарт, которым не хватает видеопамяти. Раньше, если две программы занимали много VRAM, та, что запустилась позже, могла не получить свою долю, даже с более высоким приоритетом, и уезжала в GTT, то есть в системную память, доступную видеокарте. В 7.3 контроллер dmem в cgroup научился реально защищать память: ядро не отступает сразу, а вытесняет незащищённые буферы и освобождает место под защищённые. Программа получает тот объём, который ей выделила система, и буферы не гоняются туда и обратно.

На практике это помогает играм и тяжёлым графическим программам на картах с небольшим объёмом видеопамяти: главную программу можно защитить через cgroup, а фоновые уступят ей место.

Планировщик: свой BPF-планировщик для каждой cgroup

Доделали вложенные планировщики sched_ext. Теперь у каждой cgroup может быть свой планировщик задач на BPF, и разные группы процессов живут по разным правилам. Родительский планировщик выдаёт дочерним права на конкретные процессоры и может их забрать. Если у планировщика задачи нет доступа к нужным ей CPU, ядро больше не ждёт, пока watchdog выкинет весь планировщик: такую задачу оно запускает само в рамках небольшого бюджета времени.

Обычный планировщик тоже переделали для cgroup. Появилась настройка cgroup_mode с режимами up, max, concur и tasks, по умолчанию concur: он самый точный и самый дорогой по накладным расходам. Планирование групп перевели на одну очередь выполнения (runqueue), а задачам с коротким квантом времени уменьшили задержки. Для серверов с контейнерами это более ровное деление CPU между группами, но латентность после обновления лучше проверить на своей нагрузке.

Песочницы: failfs, fchroot() и ядерные потоки в nullfs

Для изоляции процессов добавили псевдофайловую систему failfs и системный вызов fchroot(2). Процесс, который перенёс корень в failfs, больше не может открыть ни один абсолютный путь: такие обращения и абсолютные симлинки возвращают EOPNOTSUPP. Работать он может только от заранее открытых дескрипторов каталогов. Сам fchroot() это chroot() по файловому дескриптору: путь не разбирается повторно, и нет гонки между проверкой каталога и сменой корня.

Ядерные потоки теперь стартуют в отдельном пустом nullfs, а PID 1 (обычно systemd) получает своё собственное состояние файловой системы. Раньше они его делили, и pivot_root() мог переписать корень сразу всем ядерным потокам. В Landlock появился флаг LANDLOCK_RESTRICT_SELF_NO_NEW_PRIVS: один вызов вместо пары prctl(PR_SET_NO_NEW_PRIVS) и landlock_restrict_self(). Всё это больше для авторов песочниц и рантаймов контейнеров, чем для повседневной настройки сервера.

Btrfs и ext4 быстрее, а кэш v1 в Btrfs отключён

Btrfs вернул скорость прямого ввода-вывода (Direct I/O). Из-за прошлых компромиссов ради корректности он выдавал примерно 50% от теоретического максимума, теперь около 95%. В режиме для дисков без SSD убрали лишнюю задержку в один jiffy при журналировании, и на тестовой нагрузке с fsync пропускная способность выросла примерно в 5 раз. Полный fsync для файлов без дыр и с большим числом экстентов тоже стал быстрее примерно в 5 раз.

Для админа важнее другое: старый кэш свободного места v1 отключили. Опции space_cache и space_cache=v1 теперь превращаются в nospace_cache: файловая система монтируется, но без кэша групп блоков и может работать чуть медленнее. Вариант v2 (free space tree) стоит в mkfs по умолчанию со времён btrfs-progs 5.15, так что свежих ФС это не касается. Проверить свои можно так:

grep btrfs /proc/mounts
# в опциях должно быть space_cache=v2
sudo dmesg | grep -i 'space cache'

Если там space_cache без версии или space_cache=v1, переезд на v2 лучше запланировать до обновления ядра. Учтите, что старый кэш при этом удаляется, а новый строится заново: на большой ФС это долго и требует места под метаданные.

У ext4 больше параллельных записей через Direct I/O под общей блокировкой i_rwsem, быстрее работает fallocate(), исправлена регрессия буферизованной записи. Новый короткий путь в iomap для мелкого Direct I/O на тестовой нагрузке поднял ext4 с 1,92 до 2,19 млн IOPS.

AF_ALG по умолчанию ограничен: проверьте cryptsetup

AF_ALG это сокетный интерфейс, через который программы обращаются к криптографии ядра. По словам Эрика Биггерса, автора патча, он регулярно приносит уязвимости и сильно мешает сопровождению: наружу открыто куда больше, чем нужно, особенно для непривилегированных процессов, а свежие эксплойты били по внутренним деталям вроде authencesn, которые программам вообще ни к чему.

В 7.3 появился sysctl /proc/sys/crypto/af_alg_restrict: 0 снимает ограничения, 1 включает список разрешённых алгоритмов, 2 полностью выключает AF_ALG. По умолчанию стоит 1: обычным процессам доступен короткий список, процессам с привилегиями чуть длиннее. iwd и bluez при этом работают. Для cryptsetup в список отдельно добавили xts(camellia), xts(serpent) и xts(twofish), а cryptsetup 2.8.7 и новее умеет обходиться временным отображением dm-crypt, но для этого нужен root.

Если у вас LUKS с нестандартным шифром или софт, который ходит в AF_ALG, после обновления проверьте, что всё открывается:

sysctl crypto.af_alg_restrict
sudo cryptsetup luksDump /dev/sdX | grep -i cipher
# временно вернуть старое поведение, пока разбираетесь
sudo sysctl -w crypto.af_alg_restrict=0

Память: KSM без зависаний и быстрее zram

Для серверов с виртуалками и включённым KSM убрали узкое место в обратном отображении страниц: когда тысячи разделённых областей памяти делят один anon_vma, блокировка держалась больше 500 мс. Теперь худший случай меньше 2 мс, и приложения не замирают при нехватке памяти. В zsmalloc, на котором работают zram и zswap, снизили конкуренцию за блокировку в zs_free(): в микротестах до 1,83 раза быстрее. У zswap появилась проактивная запись на диск для отдельной cgroup.

Новый sysctl vm.panic_on_unrecoverable_memory_failure сразу отправляет ядро в панику при неисправимой ошибке памяти в страницах ядра. Смысл в том, чтобы сохранить контекст ошибки и не получить потом тихую порчу данных. Включается вручную, по умолчанию выключен.

Что ещё и что убрали

  • Встроенный SMB-сервер ksmbd по желанию поддерживает Apple Time Machine, шифрование SMB3 для отдельных шар и шифрование SMB Direct поверх RDMA.
  • Флаг RWF_DONTCACHE теперь работает и для блочных устройств: база данных на сыром диске может не засорять page cache ненужными данными и обойтись без Direct I/O.
  • binfmt_misc умеет выбирать интерпретатор программой на BPF при каждом запуске. Это пригодится NixOS и другим дистрибутивам с перемещаемыми бинарниками.
  • Убрали файловые системы freevxfs и EFS, поддержку старых версий Hyper-V из Windows Server 2012/2012 R2 и Windows 8/8.1, режим ondemand в cachefiles, устаревшие туннельные порты Open vSwitch и старые параметры модулей conntrack.

Linux 7.3 получился релизом про скорость и аккуратность: Btrfs и ext4 быстрее, видеокартам с малой VRAM живётся легче, а AF_ALG наконец прикрыли по умолчанию. Перед обновлением сервера стоит проверить две вещи: нет ли на Btrfs старого space_cache=v1 и не зависит ли LUKS или другой софт от AF_ALG. Ядро 7.3 уже стоит в Ubuntu 26.10, остальные дистрибутивы подтянутся позже.

Источники и ссылки


Комментарии загружаются…