Linux 7.1

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 7.1. Среди наиболее заметных изменений: новый драйвер ntfsplus, первая стадия прекращения поддержки CPU i486, удаление старых Ethernet-адаптеров, удаление протоколов ISDN и AX.25, включение по умолчанию механизма Intel FRED, поддержка BPF-обработчиков в io_uring, оптимизация подсистемы подкачки, поддержка субпланировщиков в sched_ext, ввод/вывод в режиме zero-copy в драйвере ublk, ioctl-операция shutdown в Btrfs, динамическое переключение режима производительности в драйвере amd-pstate, поддержка xattr для Unix-сокетов.
В новую версию принято 17275 исправлений от 2589 разработчиков, размер патча — 57 МБ (изменения затронули 13528 файлов, добавлено 751785 строк кода, удалено 405916 строк). В прошлом выпуске было 15624 исправлений от 2477 разработчиков, размер патча — 56 МБ. Около 41% всех представленных в 7.1 изменений связаны с драйверами устройств, примерно 12% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 14% связано с сетевым стеком, 5% — с файловыми системами и 3% c внутренними подсистемами ядра.
Основные новшества в ядре 7.1 (kernelnewbies.org, lwn.net, opennet):
Дисковая подсистема, ввод/вывод и файловые системы- В состав принята новая реализация файловой системы NTFS — ntfsplus, основанная на коде удалённого из ядра классического драйвера ntfs. Старый драйвер был переработан, расширен возможностью записи данных и адаптирован для поддержки современных возможностей, таких как использование фолиантов страниц памяти (folios) вместо структуры
buffer_head. В новом драйвере реализовано отложенное выделение блоков, позволившее добиться высокой производительности операций записи и снижения фрагментации. Для буферизированных операций записи/чтения, прямого ввода/вывода, маппинга экстентов и операций страничной записи/чтения задействована библиотека iomap. В тестах iozone драйвер ntfsplus оказался на 3–5% быстрее ntfs3 при записи в однопоточном режиме и на 35–110% при использовании 4 потоков. Скорость чтения ntfsplus и ntfs3 находится примерно на одном уровне. Драйвер ntfs3 остаётся в составе ядра и в него внесены исправления и небольшие улучшения. - Добавлена поддержка генерации и верификации данных проверки целостности T10 (deepwiki.com) на уровне файловой системы, а не блочного устройства, что позволяет добиться повышения производительности операций чтения.
- В драйвер блочных устройств ublk, позволяющий вынести специфичную логику на сторону процесса в пространстве пользователя, добавлена поддержка ввода/вывода через разделяемую память без копирования данных между буферами (режим
zero-copy). - Для самошифруемых блочных устройств SED-OPAL добавлены ioctl для управления режимом Single User и реализована команда
STACK_RESET. - В Btrfs объявлена стабильной поддержка ioctl-операции
shutdown, позволяющей перевести ФС в состояние, при котором предпринимается попытка завершения выполнения уже запущенных операций, но блокируются все новые операции. - В exfat реализована возможность резервированием пустых областей через вызов
fallocate(). - В ФС CIFS добавлена поддержка создания временных файлов с флагом
O_TMPFILE. - В системный вызов fsmount () добавлена опция
FSMOUNT_NAMESPACE, создающая новое пространство имён точек монитирования для монтируемой файловой системы. В системные вызовыclone3()иunshare()добавлены флаги для возвращения нового пространства имён точек монтирования, содержащего только примонтированную пустую ФС-заглушку на базе nullfs, драйвер fs-dax c ФС-интерфейсом к устройствам DAX (Direct Access). - В NFS-сервер добавлена защита от атак по подбору файловых дескрипторов, реализованная через заверение дескрипторов криптографической подписью. Защита включается через опцию монтирования
sign_fh. - Добавлен символьный драйвер
fs-dax, предоставляющий интерфейс для взаимодействия с устройствами DAX (kernel.org) (Direct Access), поддерживающими работу в обход страничного кэша. Указанный интерфейс необходим для интеграции в ядро файловой системы famfs, размещаемой в оперативной памяти. - В файловой системе Ceph реализован сбор метрик о вводе/выводе в привязке к подразделам.
- Принята первая серия изменений для прекращения поддержки процессоров i486. Из Kconfig удалены опции для сборки ядра с поддержкой процессоров 486DX, 486SX и AMD ELAN (
CONFIG_M486,CONFIG_M486SXиCONFIG_MELAN), а из Makefile исключены опции компиляции для систем i486 (-march=i486). Код для фактической поддержки работы на процессорах i486 пока оставлен в ядре, но сборка для подобных систем теперь потребует применения патчей к сборочным файлам. Причины удаления поддержки процессоров i486 обусловлены желанием избавить ядро от усложнённого кода, эмулирующего некоторые аппаратные операции, такие как CX8 (сравнить и обменять 8 байт) и TSC (счётчик циклов CPU, используемый в планировщике задач). - В драйвере amd-pstate, применяемом для управления энергопотреблением на системах с процессорами AMD, реализовано динамическое переключение настроек производительности и изменение поведения управления питанием в зависимости от работы от стационарного питания или аккумулятора. При стационарном подключении теперь активируется режим
performance, а при работе от аккумулятора —balance_performance. - Задействован по умолчанию механизм Intel FRED (
Flexible Return and Event Delivery), позволяющий повысить эффективность и надёжность доставки информации о низкоуровневых событиях. Повышение производительности и сокращение задержек обеспечивается благодаря возвращению событий при помощи процессорной инструкции IRET вместо передачи событий через таблицу IDT (Interrupt Descriptor Table). Повышение надёжности достигается благодаря раздельной обработке поступления события в контексте ядра и контексте пользователя, защиты от вложенного выполнения NMI и сохранения в расширенном кадре стека всех связанных с исключением регистров CPU. - В подсистему perf добавлена поддержка блоков мониторинга производительности памяти (PMU —
Performance Monitoring Unit), используемых в SoC NVIDIA Tegra410. - Ускорено выполнение операций
futexна системах ARM, благодаря задействованию инструкций Arm 9.6 LSUI, позволяющих ядру обращаться к памяти пространства пользователя без предварительного отключения режима защиты PAN (arm.com) (Privileged Access Never). - На системах с процессорами ARM улучшена поддержка расширения архитектуры набора команд MPAM (Memory System Resource Partitioning and Monitoring) и добавлена возможность её использования в пространстве пользователя для управления ресурсами через механизм resctrl. MPAM обеспечивает пометку каждого обращения к памяти идентификатором секции (PARTID, Partition ID) и идентификатором группы мониторинга (PMG, Monitoring Group ID). В привязке к PARTID можно ограничить потребление ресурсов, таких как пропускная способность памяти или размер кэша, что бы какая-то группа задач не заняла все ресурсы. В контексте мониторинга сочетание PMG и PARTID можно использовать для отслеживание потребления ресурсов памяти при определённых видах нагрузки.
- Добавлена возможность использования режима реального времени (
PREEMPT_RT) на 32-разрядных процессорах ARM. Ранее поддержкаPREEMPT_RTбыла обеспечена для архитектур x86 и x86–64, ARM64, RISC-V и LoongArch. - В системный вызов clone3() добавлены новые флаги:
CLONE_NNP— запрет получения новых привилегий в созданном процессе;CLONE_AUTOREAP— автоматическое завершение процесса вместо его превращения в процесс-зомби до выполнения функции wait () родительским процессом;CLONE_PIDFD_AUTOKILL— завершение дочернего процесса в случае закрытия связанного с ним дескриптораpidfd(например, при завершении родительского процесса). - Для каждого модуля ядра в каталог
/sys/moduleдобавлен файлimport_ns, содержащий список импортированных пространств имён символов (symbol namespace). - В систему асинхронного ввода/вывода
io_uringдобавлена поддержка использования подсистемы BPF для создания обработчиков. Например, можно заменить основной цикл диспетчеризации на BPF-программу. - В подсистеме BPF модернизирован анализ использования стека, что значительно ускорило проверку верификатором многих BPF-программ.
- С целью оптимизации производительности переписана подсистема hrtimer (high resolution timer). Планировщик задач теперь может использовать таймеры с высоким разрешением без потери производительности вместо менее точных таймеров.
- Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). До версии 1.85 (поставляется в Debian 13) повышены требования к версии Rust, необходимой для сборки компонентов ядра. Добавлена экспериментальная Kconfig-опция
CONFIG_RUST_INLINE_HELPERSдля встраивания Си-прослоек в Rust-код во время компиляции (оптимизация ускорила работу блочного драйвера null на 2%). Добавлен макрос «const_assert!». Расширены возможности модулейsizes,clk,ptr,sync,error. - В механизм SCHED_EXT, позволяющий использовать BPF для создания планировщиков CPU, добавлена начальная возможность создания вложенных планировщиков (
sub-scheduler), при помощи которых для каждого cgroup можно задействовать собственный планировщик задач. - Продолжена оптимизация подсистемы подкачки (
swap). Удалена старая структураswap_map, заменённая на механизм «Swap Table». Изменение позволило повысить производительность и уменьшить потребление памяти в подсистеме подкачки. - В подсистему DAMON (Data Access MONitor), позволяющую отслеживать доступ процесса к данным в оперативной памяти (например, можно узнать к каким областям памяти обращался процесс, а какие области памяти остались невостребованными), добавлена поддержка разных алгоритмов автоматического тюнинга квот.
- В подсистеме трассировки реализована концепция внешних кольцевых буферов, позволяющая получать данные трассировки из виртуальных машин. Возможность задействована в гипервизорах KVM и nVHE для передачи данных трассировки из гостевой системы на сторону хоста.
- В подсистему RV (kernel.org) (Runtime Verification), предназначенную для проверки корректности работы высоконадёжных систем, добавлены компоненты мониторинга «stall» для отслеживания задач, выполнение которых временно приостановлено или заблокировано, и «deadline» для анализа поведения планировщика задач.
- По умолчанию выставлен флаг PROC_MEM_FORCE_PTRACE, допускающий обход прав доступа к памяти процесса через файл /proc/PID/mem только для процессов, применяющих для отладки системный вызов
ptrace(). - Добавлен новый набор hook-ов для LSM-модулей (Linux Security Module), упрощающий реализацию политик для стековых файловых систем, таких как overlayfs. В LSM также добавлен hook для управления доступом к Unix-сокетам, который задействован в LSM-модуле Landlock для назначения политик доступа к Unix-сокетам.
- Во встроенную криптобиблиотеку lib/crypto, предоставляющую более простые и быстрые функции, чем в традиционном crypto API, добавлена поддержка алгоритмов AES-CMAC, AES-XCBC-MAC, AES-CBC-MAC, GHASH и SM3. Добавлена документация по
lib/crypto. - Реализован режим pKVM (Protected KVM) для строгой изоляции анонимной памяти с использованием расширений виртуализации для архитектуры AArch64. В данном режиме страницы памяти гостевой исключаются из таблицы виртуальных адресов хостовой системы.
- В гипервизор KVM добавлена поддержка пятой версии виртуального контроллера прерываний ARM (
VGICv5—ARM Virtual Generic Interrupt Controller v5).
- Для unix-сокетов, создаваемых функцией socket (), реализована поддержка расширенных атрибутов файлов (
xattr)user.*. Из областей применения отмечается выставление меток через расширенные атрибуты к Unix-сокетам, используемым для IPC Varlink, с целью их выделения из общей массы для инспектирования и отладки работы IPC при помощи BPF-программ. Вsystemd-journaldрасширенные атрибуты намерены использовать для определения формата лога в привязке к сокету/dev/log. - Удалена поддержка протокола UDP-Lite (RFC 3828), допускающего доставку пакетов с неправильной контрольной суммой с расчётом на то, что, например, частично повреждённые аудио и видеоданные могут быть восстановлены на уровне кодека. Протокол удалён так как им никто не пользуется.
- Убрана возможность сборки стека IPv6 в форме модуля ядра, которая не применялась на практике (IPv6 либо встраивают в ядро, либо полностью отключают), но усложняла сопровождение так как при сборке IPv6 модулем ядра (
CONFIG_IPV6=m), множество подсистем вынуждены добавлять бесполезные обработчики на случай выгрузки модуля IPv6.
- В драйвере AMDGPU включён новый дисплейный движок (DC) для APU AMD серии HD 7000 (Sea Islands, GCN 1.1).
- В драйвер Nouveau добавлена начальная поддержка GPU NVIDIA GA100 на базе микроархитектуры Ampere.
- Продолжена работа над drm-драйвером (Direct Rendering Manager) Xe для GPU на базе архитектуры Intel Xe, которая используется в видеокартах Intel семейства Arc и интегрированной графике, начиная с процессоров Tiger Lake. Добавлена поддержка графической подсистемы процессоров Intel Nova Lake-P. Реализованы очищаемые буферные объекты (
Purgeable Buffer Objects). - Продолжена интеграция компонентов драйвера Nova для GPU NVIDIA, оснащённых GSP-прошивками, используемыми начиная с серии NVIDIA GeForce RTX 2000 на базе микроархитектуры Turing. Драйвер написан на языке Rust. Добавлена начальная поддержка GPU на базе микроархитектуры Turing.
- Добавлен DRM-драйвер corebootdrm для вывода графики через фреймбуфер прошивок на базе CoreBoot.
- Добавлена поддержка звуковых ASoC AMD RPL DMIC, Cirrus Logic CS42L43, CS47L47, NVIDIA CPCAP и WM8962. Улучшена поддержка звуковых устройств с интерфейсом USB: Huawei Headset, Focusrite Novation, MV-Silicon, Studio 1824, Arturia AF16Rig, Hotone Audio, Feaulle Rainbow, PreSonus AudioBox, Moondrop Ju Jiu, Scarlett 18i20.
- Добавлен драйвер yogafan для отслеживания скорости вращения кулера на ноутбуках Lenovo Yoga, Legion и IdeaPad.
- Добавлена поддержка ARM-плат, SoC и устройств: Qualcomm Glymur, Qualcomm Mahua, Qualcomm Eliza, Qualcomm IPQ5210, Qualcomm apq8084 и ipq806x, Axis ARTPEC-9, ARM Zena, ARM corstone-1000-a320, Microchip LAN9691, Microchip PIC64GX, Rockchip RV1103B, Renesas RZ/G3L, NXP S32N79.
- Удалена поддержка применяемых в SoC Baikal-T1 контроллеров AHCI SATA и PCIe, а также драйверов таймера, памяти, physmap, шины, hwmon, dwc и bt1-rom. В качестве причины удаления называется отсутствие сопровождения и незавершённая интеграция в состав ядра компонентов платформы Baikal, производство которой в РФ свернули в ноябре 2025 года.
- Удалены 12 драйверов для Ethernet-устройств с интерфейсами ISA и PCMCIA, выпускавшихся до 2002 года, для которых не нашлись пользователи, применяющие их в рабочих системах. Также из ядра исключены подсистема ISDN, реализации протоколов AX.25, CAIF и Bluetooth CMTP (Common ISDN Application Programming Interface Message Transport Protocol), драйверы yellowfin (Yellowfin Gigabit-NIC), hamachi (Hamachi GNIC-II), hamradio (Amateur Radio), inport и logibm (busmouse). Причиной удаления стало отсутствие активных сопровождающих на фоне увеличения числа выявляемых при помощи syzbot и AI-инструментов ошибок, которые никто не берётся исправлять и вся нагрузка нa устранение серьёзных проблем ложится на сопровождающих основные сетевые подсистемы ядра. Всего удалено более 140 тысяч строк кода.
>>> Источник: OpenNET
