Релиз ядра Linux 6.16

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.16. Среди наиболее заметных изменений: драйвер для ускорения OpenVPN, механизм Kexec HandOver, включение по умолчанию пятиуровневых таблицы страниц памяти для x86, удаление протокола DCCP, блочный драйвер zloop, возможность отправки core-дампов через UNIX-сокет, поддержка атомарной записи в XFS, offload-обработка звука для USB-устройств, оптимизации в Ext4, виртуальный драйвер TPM (Trusted Platform Module), полноценная реализация Device Memory TCP, поддержка неименованных каналов в io_uring, подготовка к интеграции DRM-драйвера Asahi, механизм “usermode queue” в драйвере AMDGPU, поддержка Intel TDE (Trusted Domain Extensions) и Intel APE (Advanced Performance Extensions).

В новую версию принято 15924 исправлений от 2145 разработчиков,
размер патча – 50 МБ (изменения затронули 13793 файлов, добавлено 655451 строк кода, удалено 316441 строк). В прошлом выпуске было 15945 исправлений от 2154 разработчиков, размер патча – 59 МБ .
Около 45% всех представленных в 6.16 изменений связаны с драйверами устройств, примерно 16% изменений имеют
отношение к обновлению кода, специфичного для аппаратных архитектур, 13%
связано с сетевым стеком, 4% – с файловыми системами и 3% c внутренними
подсистемами ядра.

Основные новшества в ядре 6.16:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Добавлен драйвер zloop для создания зонированных блочных loopback-устройств, монтируемых в loop-режиме. Драйвер эмулирует работу обычных блочных устройств, используя несколько файлов из существующей файловой системы (по одному файлу для хранения каждой зоны). Данная возможность может быть полезной для тестирования файловых систем, обработчиков device mapper и приложений на предмет поддержки в них зонированных устройств, применяющих разделение на зоны групп блоков или секторов, в которые допускается лишь последовательное добавление данных с обновлением целиком всей группы блоков.
    • В файловой системе XFS реализована поддержка атомарной записи больших порций данных – несколько блоков теперь могут записаны в атомарном режиме (либо все блоки будут записаны успешно, либо ни один блок не будет записан).
    • В файловой системе Ext4 повышена производительность механизма “fast commit”. Добавлена поддержка больших фолиантов страниц памяти (large folios) для обычных файлов, что в проведённых тестах на 37% повысило производительность при интенсивном последовательном вводе/выводе. Добавлена поддержка атомарных операций записи, охватывающих несколько блоков.
    • В драйвере для файловой системы ext2 объявлена устаревшей поддержка механизма DAX, обеспечивающего прямой доступ к ФС в обход страничного кэша. Удаление DAX из драйвера ext2 намечено на конец года. В качестве причины упоминается рассмотрение драйвера ext2 как стабильной эталонной реализации, в которой недопустимо использование специфичных возможностей, не получивших должного распространения.
    • Файловые системы OrangeFS, UFS, BFS и OMFS переведены на использование нового API монтирования разделов.
    • В sysctl добавлена настройка vfs_cache_pressure_denom, для управления числом записей в кэше “dentry” (внутреннее представление элементов каталогов) в условиях нехватки памяти в системе. Чем больше выставлено значение, тем больше может быть вытеснено записей из кэша (меньше записей останется в кэше) при нехватке памяти.
    • В ФС Bcachefs добавлена опция “rebalance_on_ac_only”, запрещающая выполнение операций ребалансировки и фонового сжатия при питании системы от аккумулятора. Ускорены операции удаления снапштов и устройств. Снижено потребление памяти при монтировании в режиме только для чтения. Добавлена возможность запуска некоторых операций восстановления после сбоя в фоновом режиме, не останавливая работу с ФС.
    • Подсистеме управления питанием разрешено самостоятельно выполнять заморозку файловых систем и переменных EFI для ждущего и спящего режимов (если ФС уже заморожены обработчиком в пространстве пользователя повторная заморозка не производится).
    • Добавлена возможность ускорения работы EROFS при помощи встроенного в процессоры Intel ускорителя QAT (QuickAssist Technology), предлагающего средства для ускорения вычислений, связанных со сжатием и шифрованием.
    • В NFS с 1 до 4 МБ увеличен максимальный размер порции данных для операций чтения и записи (по умолчанию выставлено значение 1 МБ, так как не все клиенты поддерживают больший размер).
    • Непривилегированным пользователям, имеющим права CAP_SYS_ADMIN в отдельном пространстве имён идентификаторов пользователя (user namespace), но не имеющим расширенных прав в корневом пространстве имён, предоставлена возможность использования механизма fanotify для отслеживания изменений в файловых системах.
    • Для файловых систем, использующих подсистему FUSE, предоставлена функциональность для очистки разом всех прокэшированных записей о каталогах (dentries). В подсистему FUSE добавлена поддержка больших фолиантов страниц памяти.
    • В ФС ОverlayFS реализована поддержка создания в непривилегированных пространствах имён слоёв с данными, для которых используется контроль целостности на базе модуля dm-verity. Указанная возможность позволяет комбинировать заслуживающие доверия слои с метаданными с не заслуживающими доверия слоями с данными, обрабатываемыми в непривилегированных пространствах имён.
  • Память и системные сервисы
    • Добавлен механизм KHO (Kexec HandOver) для запуска нового ядра из старого без потери состояния системы. До передачи управления новой версии ядра, состояние ключевых подсистем ядра при помощи KHO может быть сериализировано в область памяти, которая не будет затронута дальнейшими операциями. Новое ядро, получив управление, восстанавливает сериализированное состояние обратно. На базе KHO развивается подсистема Live Update Orchestrator (LUO), позволяющая перезагружать ядро без остановки работы устройств.
    • Добавлен параметр сборки ядра CONFIG_X86_NATIVE, позволяющая использовать при компиляции опцию “-march=native” для оптимизации с учётом возможностей процессора на текущей системе.
    • Добавлена поддержка расширения архитектуры набора команд Intel APX (Advanced Performance Extension), предоставляющего 16 дополнительных регистров общего назначения (в дополнение к 16 имеющимся), что позволяет использовать в коде меньше операций чтения и записи в память для повышения производительности и снижения потребления энергии.
    • Добавлен режим автоматической настройки политики распределения памяти в NUMA-системах, при котором все веса узлов пересчитываются при появлении новой информации о пропускной способности во время загрузки или при горячем подключении памяти.
    • В реализации futex-ов появилась поддержка локальной хэш-таблицы процессов (local futex_hash_bucket), которая в отличие от ранее поддерживаемой общей хэш-таблицы для всех процессов, является локальной для отдельного процесса и совместно используется всеми потоками этого процесса. Локальные хэш-таблицы применяются только для futex-операции PROCESS_PRIVATE. Кроме того, в новом выпуске добавлена поддержка опций FUTEX2_NUMA и FUTEX2_MPOL, позволяющих влиять на размещение futex-ов в памяти, для их помещения ближе и процессам, которые их используют.
    • Для систем x86_64 включена постоянная поддержка пятиуровневых таблиц страниц памяти (параметр CONFIG_X86_5LEVEL, управлявший включением пятиуровневых таблиц, удалён).
    • В драйвер intel_pstate, управляющий параметрами энергопотребления (P-state) на системах с процессорами Intel, добавлена поддержка работы планировщика задач с учётом потребления энергии (EAS – Energy Aware Scheduling) на гибридных процессорах, сочетающих высокопроизводительные и энергоэффективные ядра CPU, таких как Intel Lunar Lake.
    • В sysfs добавлены интерфейсы: “/sys/devices/system/cpu/cpuN/cpu_capacity” для получения сведений о возможностях различных CPU в гибридных процессорах и “/sys/devices/system/cpu/cpuidle/intel_c1_demotion” для управления возможностью оставления CPU в более производительном состоянии, даже если ядро пытается перевести CPU в более низкое состояние энергопотребления (например, ядро может запросить переход в состояние энергопотребления C6, но прошивка при большой интенсивности пробуждения CPU может оставить его в состоянии C1).
    • Для архитектуры ARM64 включена поддержка режима ленивого вытеснения задач (PREEMPT_LAZY, lazy preemption), который соответствует режиму полного вытеснения (“full preemption”) для realtime-задач (RR/FIFO/DEADLINE), но задерживает вытеснение обычных задач (SCHED_NORMAL) до границы тика.
    • Для архитектуры ARM64 добавлена поддержка использования расширений SME (Scalable Matrix Extension), включаемая через параметр CONFIG_ARM64_SME.
    • Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). Для модулей, написанных на языке Rust, предоставлена возможность использования configfs. Добавлены абстракции, необходимые для разработки графических драйверов. Расширены возможностей модулей alloc, time, str, list, workqueue и page. Добавлена поддержка макроса “assert!” в тестах на базе KUnit. Добавлен набор абстракций для управления частотой CPU и использования API, связанных с управлением энергопотреблением. Добавлена поддержка структуры данных ‘xarray’.
    • Для архитектуры RISC-V перенесена реализация системного вызова getrandom(), оптимизированная при помощи механизма vDSO (virtual dynamic shared object), дающего возможность перенести обработчик системного вызова из ядра в пространство пользователя и избежать переключений контекста. В проведённых тестах оптимизация ускорила получение случайных чисел в 17 раз. Для RISC-V также реализована поддержка векторных расширений Zicbop, Zabha и Svinval, применяемых в процессорах SiFive.
    • Для архитектуры LoongArch лимит на число CPU в системе поднят с 256 до 2048. Добавлена поддержка планировщика задач SCHED_MC (Multi-core).
    • Добавлена возможность использования Unix-сокетов для передачи файловых дескрипторов. Для отключения подобной возможности приложения могут использовать в setsockopt() флаг SO_PASSRIGHTS.
    • Предоставлена возможность маппинга кольцевого буфера, применяемого для трассировки работы ядра, в память пространства пользователя.
    • Обработчики crash-dump, применяемые для формирования отчёта о проблеме после аварийного завершения работы ядра, теперь могут задействовать использовавшиеся сбойным ядром LUKS-ключи для сохранения crash-дампов в шифрованные ФС.
    • В систему асинхронного ввода/вывода io_uring добавлена операция IORING_OP_PIPE для создания неименованных каналов, которая аналогична системному вызову pipe2, за исключением поддержки фиксированных файловых дескрипторов.
    • Добавлена опция командной строки ядра “rt_group_sched” для управления включением планировщика выполнения групп realtime-задач (SCHED_RR). Опция аналогична настройке RT_GROUP_SCHED в Kconfig.
    • Для устройств на базе шины CXL (Compute Express Link), применяемой для организации высокоскоростного взаимодействия CPU с устройствами памяти, реализована поддержка расширений RAS (Reliability, Availability, Serviceability), позволяющих реализовывать различные схемы определения и коррекции ошибок. CXL позволяет подключать новые области памяти, предоставляемые внешними устройства памяти, и использовать их как дополнительные ресурсы физического адресного пространства для расширения системной оперативной памяти (DDR) или постоянной памяти (PMEM).
    • Необходимая для сборки ядра минимальная версия GCC для всех архитектур поднята до ветки GCC 8. Для сборки теперь также необходима как минимум версия пакета binutils 2.30.
    • Удалён системный вызов uselib(), который уже давно объявлен устаревшим и вместо него для совместного доступа программ к разделяемым библиотекам используется mmap().
  • Виртуализация и безопасность
    • Добавлена начальная поддержка использования механизма Intel TDX (Trusted Domain Extensions) для защиты гостевых систем, работающих под управлением гипервизора KVM, от вмешательства и анализа со стороны администратора хост-системы и физических атак на оборудование. Защита обеспечивается за счёт шифрования памяти виртуальных машин.
    • Добавлен виртуальный драйвер TPM (Trusted Platform Module), позволяющий виртуальным машинам взаимодействовать с TPM-устройствами (Trusted Platform Module), эмулируемыми модулем SVSM (Secure VM Service Module).
    • Возобновлена возможность использования GCC-плагина randstruct, рандомизирующего раскладку структур данных на этапе компиляции для усложнения эксплуатации уязвимостей.
    • Добавлена возможность использования технологии IMA (Integrity Measurement Architecture) для проверки целости при запуске новых ядер при помощи системного вызова kexec.
    • Проведена работа по сокращению влияния на производительность использования SELinux. Для ускорения работы добавлен кэш с результатами проверок доступа к каталогам. В правила genfscon добавлена возможность использования масок.
    • В коде для взаимодействия с EFI предоставлена возможность встраивания секции SBAT (UEFI Secure Boot Advanced Targeting) с метаданными об отозванных версиях загрузочных компонентов.
    • В загружаемых модулях осуществлён перевод секции “.static_call_sites” в режим только для чтения после завершения инициализации.
    • Для 64-разрядных систем ARM в гипервизоре KVM реализована поддержка вложенной виртуализации (отключена по умолчанию).
    • В гипервизоре KVM объявлена стабильной поддержка архитектуры RISC-V.
  • Сетевая подсистема
    • В состав принят драйвер ovpn, позволяющий существенно ускорить производительность OpenVPN за счёт выноса операций шифрования, обработки пакетов и управления каналом связи на сторону ядра Linux. Драйвер позволяет избавиться от накладных расходов, связанных с переключением контекста, даёт возможность оптимизировать работу за счёт прямого обращения к внутренним API ядра и исключает медленную передачу данных между ядром и пространством пользователя (шифрование, расшифровка и маршрутизация выполняется модулем без отправки трафика в обработчик в пространстве пользователя).
      на сторону ядра для избавления от лишних переключений контекста.
    • В механизм Device Memory TCP добавлена поддержка отправки данных из памяти устройства (TX path). Ранее для упрощения интеграции Device Memory TCP в ядро функциональность была ограничена только принятием данных (RX path). Device Memory TCP позволяет использовать сетевые сокеты для прямой отправки содержимого памяти периферийного устройства по сети (режим zero-copy), а также прямого размещения содержимого сетевых пакетов в области памяти устройства на стороне получателя. Передаваемые в пакетах данные передаются от сетевой карты в память периферийного устройства (DMABUF), например, в видеопамять GPU, или из памяти устройства в сетевую карту напрямую, минуя CPU, а заголовки пакетов попадают в обычные буферы ядра.
    • Предоставлена возможность отправки содержимого core-дампов через сокет AF_UNIX, что позволяет создавать в пространстве пользователя более безопасные обработчики core-дампов, не завязанные на вызов ядром привилегированных процессов.
    • Удалена поддержка сетевого протокола DCCP (Datagram Congestion Control Protocol), который не получил распространения и пять лет остаётся в ядре без сопровождения. Удаление DCCP из ядра устранит преграды, мешающие переработать структуру данных inet_connection_sock для повышения эффективности работы стека TCP. Поддержка netfilter-модулей для фильтрации пакетов DCCP сохранена.
    • Для упрощения обработки ошибок при использовании сокетов SO_PEERPIDFD ядро теперь может передавать pidfd для уже завершённых процессов (pidfd связывается с конкретными процессами и в отличие от pid повторно не назначается).
    • При помощи BPF теперь можно создавать обработчики управления очередями пакетов в сетевом стеке (qdiscs) для влияния на порядок обработки сетевых пакетов.
    • В сетевой файловой системе AFS задействован GSSAPI (Generic Security Services API) для управления шифрованием соединений с серверами YFS и OpenAFS.
    • Внесена большая порция оптимизаций. Переработана организация блокировок для таблиц маршрутизации IPv6 (некоторые операции с маршрутами теперь выполняются до 3 раз быстрее). Ускорено программное вычисление контрольных сумм crc32c. На 10% ускорен движок
      GRO для туннелированного UDP трафика. Улучшена автонастройка принимающего буфера для TCP и повышены применяемые по умолчанию лимиты (в проведённых тестах пропускная способность для единичных потоков через 200Gbs канал возросла на 60%).
    • В Netfilter добавлена возможность использования масок в именах сетевых устройств, используемых в netdev и flowtable. В инфраструктуру
      nft trace интегрирована информация об отслеживании соединений (conntrack). Ускорено извлечение таблиц отслеживания соединений (conntrack) через procfs.
  • Оборудование
    • Добавлена поддержка выноса обработки звуковых потоков на сторону звуковых устройств с интерфейсом USB (USB audio offload). Изменение позволяет значительно снизить энергопотребление портативных устройств за счёт продолжения обработки звукового потока во время нахождения остальной системы в спящем режиме. Ранее в ядрах для платформы Android предоставлялась специфичная реализация offload-обработки звука для USB-устройств, а теперь в основном ядре появилась универсальная реализация, которую могут использовать любые проекты.
    • Продолжена интеграция компонентов драйвера Nova для GPU NVIDIA, оснащённых GSP-прошивками, используемыми начиная с серии NVIDIA GeForce RTX 2000 на базе микроархитектуры Turing. Драйвер написан на языке Rust. В дополнение к добавленному в прошлом выпуске компоненту nova-core, реализующему базовый уровень абстракций над программными интерфейсами прошивок GSP, в версии 6.16 в состав включена начальная реализация DRM-драйвера nova-drm (Direct Rendering Manager) для взаимодействия с GPU из пространства пользователя.
    • Начался процесс продвижения в ядро DRM-драйвера Asahi для GPU Apple AGX, применяемых в чипах Apple Silicon. Драйвер написан на Rust. На данном этапе в ядро включены только заголовочные файлы с UAPI от драйвера Asahi, необходимые для Mesa, а основной код драйвера Asahi будет интегрирован позднее.
    • В драйвер Nouveau добавлена поддержка GPU NVIDIA семейства Hopper и Blackwell.
    • Продолжена работа над drm-драйвером (Direct Rendering Manager) Xe для GPU на базе архитектуры Intel Xe, которая используется в видеокартах Intel семейства Arc и интегрированной графике, начиная с процессоров Tiger Lake. Добавлена возможность использования разных файлов прошивок для разных семейств GPU Intel.
    • В драйвере AMDGPU реализована поддержка механизма “usermode queue”, позволяющего создавать собственные очереди работ в пространстве пользователя и отправлять их напрямую в GPU без обращения к планировщику в ядре. Поддержка “usermode queue” включена для GPU Navi 4X и GFX 12.
    • Добавлена поддержка звуковых систем Intel WCL (Whiskey Lake), AMD ACP 7.x (Audio Co-Processor), Cirrus Logic CS35L63 и CS48L32, Everest Semiconductor ES8375 и ES8389, Pioneer DJM-V10, Longsoon-1 AC’97, NVIDIA Tegra264, Richtek ALC203, RT9123 и Rockchip SAI, а также новых платформ Intel AVS.
    • Добавлена поддержка ARM-плат, SoC и устройств:
      Samsung Exynos7870, Qualcomm Snapdragon X1P42100, Qualcomm MSM8926, RK3562, NXP i.MX94, Renesas RZ/V2N, Amlogic S6/S7/S7D, WonderMedia wm8950, Amlogic s805y, Allwinner A523, Toradex Verdin AM62P, ROCK 5B+, Nitrogen8M Plus, Retronix R-Car V4H Sparrow Hawk, MT8186 Ponyta Chromebook, VIA APC Rock/Paper, Renesas rz/t2h, ASUS Transformer Pad LTE TF300TL, LG Nexus 4, Google Pixel 4a, Raspberry Pi 2.
    • Удалён драйвер для плат захвата видео на чипах STA2X11.

Одновременно латиноамериканский Фонд свободного ПО сформировалвариант полностью свободного ядра 6.16Linux-libre 6.16-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В выпуске 6.16 нейтрализована загрузка блобов в новых драйверах Intel qat 6xxx crypto, ST vd55g1 sensor, ath12k AHB wifi, Aeonsemi AS21xxx и MediaTek 25Gb Ethernet. Выполнена чистка имён блобов в dts-файлах (devicetree) для ARM-чипов Qualcomm и MediaTek. Обновлён код чистки блобов в драйверах Nova Core,
Nouveau, Realtek r8169 Ethernet, Qualcomm Iris, Venus, Mediatek mt7996 wifi, Qualcomm ath11k и ath12k wifi, Texas Instruments tas2781 и Renesas R-Car gen4 PCIe.

Release. Ссылка here.