Несколько дней назад мы написали в X, назвав Linux 7.3 одним из самых производительных релизов за последние годы. И теперь, просмотрев, что на самом деле попало в окно слияния, это утверждение, похоже, подтверждается.

Окно слияния для этого релиза открылось сразу после выхода Linux 7.2 и останется открытым до конца этого месяца, если не произойдёт ничего неожиданного, что изменит сроки.

Итак, вот что уже подтверждено для включения в релиз 7.3.

Хранилище получило серьёзный прирост скорости

Btrfs получает сразу несколько изменений. Прямой ввод-вывод теперь выполняется через bounce-буфер IOmap вместо отката к буферизованному вводу-выводу, что поднимает рабочий процесс, который ранее достигал лишь около половины теоретической максимальной пропускной способности, до почти 95 процентов от неё.

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

Кэш свободного пространства по умолчанию также переходит с версии 1 на версию 2, более безопасный и быстрый вариант, который ещё не стал стандартным.

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

Под обеими файловыми системами лежит переработанный слой IOmap, построенный вокруг единственного колбэка-итератора, который компилятор может встроить вместо косвенной диспетчеризации.

Для всего этого ничего не нужно делать. Всё заработает само, как только вы перейдёте на 7.3. Изменение IOmap сильнее всего проявляется на быстрых NVMe, поднимая EXT4 с 1,92 миллиона IOPS до 2,19 миллиона в тестах.

Важные изменения в планировщике

Патчи flatten-the-pick от Петера Зейлстры перерабатывают планирование cgroup вокруг единой очереди запуска вместо старой конструкции, склонной к сбоям. Петер протестировал её на устаревающем компьютере с Sandy Bridge в паре с AMD Radeon RX 580, и как частота кадров, так и стабильность времени кадра улучшились.

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

Гибридные процессоры Intel тоже исправлены. Кластерно-ориентированное планирование плохо справлялось со смесью P-ядер и E-ядер, и работа Рикардо Нери закрывает этот пробел на Alder Lake, Lunar Lake и Panther Lake.

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

Исправления управления памятью

Инженеры ZTE обнаружили ошибку в обратном отображении KSM, на этапе, когда ядро проверяет, какие области памяти указывают на объединённую страницу, прежде чем к ней обратиться. Под высокой нагрузкой одна внутренняя блокировка могла оставаться занятой сотни миллисекунд, замораживая другие процессы, пытающиеся её использовать.

Исправление снижает наихудший случай с примерно 700 мс до менее 2 мс. Проще говоря, это означает меньше случайных зависаний на серверах и в контейнерах при нехватке памяти.

Инженер Xiaomi Вэньчао Хао исправил аналогичное замедление в zsmalloc, который используют zRAM и Zswap для хранения сжатой памяти.

Raspberry Pi 4B показал прирост до 1,83 раза в тестах, 20-ядерная система Intel до 1,4 раза. Говоря простыми словами, вы получаете более отзывчивую работу на бюджетных платах вроде Pi и меньший, но реальный прирост на более мощном железе.

Снижение задержек для задач реального времени

Каждый раз, когда одно ядро CPU использует SMP-код ядра, чтобы попросить другие ядра немедленно выполнить что-то, например сбросить кэши памяти, ядро раньше замораживало всё остальное на этом CPU, пока все остальные ядра не ответят.

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

В тестах с DPDK, фреймворком для быстрой сетевой обработки, наихудшая задержка для самых медленных запросов снизилась с ~17 мс до ~1,5 мс. Большинство пользователей десктопов этого не заметят, но для сетевого и реального времени ПО это важное исправление.

Небольшие изменения

  • RISC-V добавляет поддержку одиннадцати новых расширений ISA.
  • Вызовы EFI runtime теперь завершаются по таймауту, а не зависают на неопределённое время.
  • RAID 5/6 получает более качественный выбор алгоритма на основе бенчмарков при загрузке.
  • Новые API библиотеки AES упорядочивают обработку распространённых режимов шифрования в ядре.

Подводим итоги. Как вы, возможно, недавно читали, Линус Торвальдс потратил 18 загрузок ядра и 24 отладочных патча на поиск однострочной ошибки в драйвере Intel Xe. По пути ему помогал ИИ, и исправление, конечно, уже влито.

Окно слияния для Linux 7.3 останется открытым ещё несколько дней, прежде чем начнут выходить кандидаты в релизы, так что ещё есть место для новых изменений. Стабильный релиз ожидается где-то в октябре.