После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.10. Среди наиболее заметных изменений: драйвер ntsync c примитивами синхронизации Windows NT, компоненты DRM Panic для реализации аналога “синего экрана смерти”, прекращение поддержки старых CPU Alpha, возможность верификации целостности в ФС на базе FUSE, ограничение доступа к ioctl через механизм Landlock, подсистема для профилирования операций выделения памяти, системный вызов mseal(), возможность шифрованного обмена данными с устройствами TPM, поддержка высокоприоритетных рабочих очередей в dm-crypt, драйвер panthor для десятого поколения GPU Mali.
В новую версию принято 14564 исправлений от 1989 разработчиков,
размер патча – 41 МБ (изменения затронули 12509 файлов, добавлено 547663 строк кода, удалено 312464 строк). В прошлом выпуске было 15680 исправлений от 2106 разработчиков, размер патча – 54 МБ. Около 41% всех представленных в 6.10
изменений связаны с драйверами устройств, примерно 15% изменений имеют
отношение к обновлению кода, специфичного для аппаратных архитектур, 13%
связано с сетевым стеком, 5% – с файловыми системами и 4% c внутренними
подсистемами ядра.
Основные новшества в ядре 6.9:
- Дисковая подсистема, ввод/вывод и файловые системы
- Добавлена новая fcntl-операция F_DUPFD_QUERY, при помощи которой процесс может определить, что два разных файловых дескриптора ссылаются на один и тот же файла. В отличие от похожих возможностей, предоставляемых системным вызовом kcmp(), F_DUPFD_QUERY не приводит к раскрытию лишней информации и работает на системах с отключённым kcmp().
- В подсистеме FUSE, применяемой для реализации файловых систем в пространстве пользователя, реализована возможность применения механизма fs-verity для проверки целостности и подлинности файлов.
- В модуль dm-crypt, применяемый для шифрования блочных устройств, добавлена опция “high_priority”, позволяющая задействовать высокоприоритетные рабочие очереди для повышения производительности на мощных серверах. По умолчанию режим выключен, так как он может приводить на обычных ПК к повышению задержек при выполнении работ не связанных с шифрованием, таких как обработка звука.
- Добавлен основанный на netlink протокол для управления NFS-сервером в ядре. В пространстве пользователя на базе данного протокола подготовлена утилита nfsdctl. Отключена по умолчанию поддержка монтирования NFS v2 (в утилите mount.nfs поддержка NFS v2 бвла прекращена ещё в 2021 году).
- В файловой системе XFS продолжена работа над реализацией возможности применения утилиты fsck для проверки и исправления выявленных проблем в online-режиме, без отмонтирования файловой системы. Добавлен ioctl XFS_IOC_EXCHANGE_RANGE для обмена байтовыми диапазонами между двумя файлами в атомарном режиме.
- В Btrfs реализована поддержка урезания (shrinker) незекреплённых карт экстентов, что может оказаться полезным для сокращения потребления памяти в условиях нехватки памяти в системе. Код для сжатия данных и функция put_file_data() переведены на использование фолиантов страниц памяти (page folios). Переработан механизм блокировки экстентов при выполнении операций обратной записи.
- В ФС Ext4 добавлена поддержка ioctl FS_IOC_GETFSSYSFSPATH для определения местоположения заданной примонтированной ФС в иерархии /sys/fs.
- Файловые системы OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX и FREEVXFS переведены на использование нового API монтирования разделов.
- В файловой системе EROFS (Extendable Read-Only File System), предназначенной для использования на разделах, доступных в режиме только для чтения, добавлена поддержка алгоритма сжатия Zstandard.
- В Bcachefs проведена подготовка к выполнению fsck без отмонтирования раздела (online-проверка). Добавлены изменения и исправления для повышения надёжности работы. Предложен режим “nochnages” для тестирования работы fsck и восстановления после сбоев, при котором метаданные не сбрасываются на диск и отключены операции записи.
- В файловую систему OverlayFS добавлена поддержка создания временных файлов, используя опцию O_TMPFILE.
- Прекращена поддержка механизма ограничения пропускной способности блочных устройств “CONFIG_BLK_DEV_THROTTLING_LOW”, который с 2017 года сохранил статус экспериментального, не получил распространения на практике и затрудняет сопровождения подсистемы блочных устройств.
- Память и системные сервисы
- Добавлен, но отключён при сборке, драйвер ntsync, реализующий символьное устройство /dev/ntsync и набор примитивов для синхронизации, применяемых в ядре Windows NT. Реализация подобных примитивов на уровне ядра позволяет существенно поднять производительность Windows-игр, запускаемых при помощи Wine. Прирост производительности достигается благодаря избавлению от накладных расходов, связанных с применением RPC в пространстве пользователя. Создание отдельного драйвера для ядра Linux объясняется проблематичностью корректной реализации API синхронизации NT поверх существующих примитивов в ядре.
- Добавлена подсистема для профилирования операций выделения памяти в ядре Linux, позволяющая выявлять утечки памяти в ядре и упрощающая проведение оптимизаций потребления памяти. Подсистема обеспечивает низкие накладные расходы, что позволяет использовать её не только в отладочных сборках ядра, но на рабочих системах.
- Добавлена начальная реализация обработчика аварийных ситуаций в ядре – DRM Panic, использующего подсистему DRM (Direct Rendering Manager) для отображения наглядного цветного отчёта в стиле “синего экрана смерти”. В следующем выпуске планируется добавить возможность показа логотипа и QR-кода на экране при возникновении аварийного состояния.
- Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). Осуществлён переход на использование выпуска Rust 1.78, позволивший переключиться на использование штатной библиотеки alloc, вместо собственного ответвления. Добавлены абстракции для работы со временем в ядре (обвязка над структурой ktime_t). Добавлена поддержка использования компонентов ядра на языке Rust на системах с архитектурой RISC-V.
- В BPF-программах реализована возможность использования очередей ожидания (wait queue) в ядре. Добавлены функции bpf_preempt_disable и bpf_preempt_enable, позволяющие создавать не прерываемые планировщиком задач секции с кодом. Предоставлена возможность доступа BPF-программ к криптографическим функциям ядра (crypto). Реализована поддержка JIT-компиляции BPF-программ на системах с 32-разрядными процессорами ARCv2.
- Для 32-разрядных систем ARM реализована поддержка сборки ядра компилятором Clang с включённым режимом защиты CFI (Control Flow Integrity), блокирующим нарушения нормального порядка выполнения (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции.
- Добавлена возможность прямого отражения через mmap() кольцевых буферов трассировки для передачи их содержимого в пространство пользователя без дополнительного копирования.
- Добавлен системный вызов “mseal”, позволяющий процессам выставлять блокировку на изменение определённых частей своего адресного пространства. На практике новый системный вызов планируется использоваться в браузере Chrome для усиления sandbox-изоляции.
- Для субархитектуры x32, которая предоставляет гибридный x86_64 ABI, позволяющий использовать на 64-разрядных системах 32-разрядную модель адресации памяти (процессор работает в 64-разрядном режиме, но использует 32-разрядные указатели и арифметические операции), добавлена поддержка механизма Shadow Stack, который позволяет блокировать работу многих эксплоитов, используя аппаратные возможности процессоров Intel для защиты от перезаписи адреса возврата из функции в случае переполнения буфера в стеке.
- На системах с архитектурой ARM64 в системном вызове userfaultfd(), дающем возможность создавать обработчики обращений к невыделенным страницам памяти (page faults) в пространстве пользователя, реализованы возможности, связанные с защитой от записи областей памяти и элементов таблицы страниц памяти.
- Удалён код для поддержки выпускаемых с 1995 года процессоров Alpha 21164 (EV5) и более ранних серий. Сопровождение кода для данных процессоров было усложнено из-за отсутствия в них возможности доступа к памяти на уровне отдельных байтов. Alpha была первой архитектурой, на которой было портировано ядро Linux, изначально доступное только для систем x86.
- Виртуализация и безопасность
- Добавлена поддержка шифрованного обмена данными с устройствами TPM (Trusted Platform Module).
- В LSM-модуль Landlock, позволяющий ограничить взаимодействие группы процессов с внешним окружением, добавлена возможность применения правил для ограничения доступа к вызовам ioctl().
- Предложена выставляемая на этапе загрузки опция init_mlocked_on_free, обеспечивающая обнуление содержимого памяти, защищённой от вытеснения в раздел подкачки при помощи вызова mlock(), если данная память будет освобождена без разблокировки вызовом munlock(). Использование данной опция позволяет исключить оседание криптографических ключей в памяти в случае аварийного завершения, работающего с ними приложения.
- В подсистеме crypto ускорено выполнение операций дискового шифрования с использованием алгоритма AES-XTS на системах x86_64 с процессорами Intel и AMD, поддерживающими расширения VAES, AVX2, VPCLMULQDQ, AVX10 или AVX512.
- Удалена возможность сбора статистики об использовании криптоподсистемы ядра (CONFIG_CRYPTO_STATS). Данная возможность не использовалась на практике и приводила к значительному снижению производительности, а также создавала ощутимую дополнительную нагрузку на сопровождающих.
- Сетевая подсистема
- Значительно повышена производительность операций отправки данных в режиме zero-copy при использовании подсистемы io_uring. Добавлена возможность объединения (“bundle”) нескольких буферов для операций отправки и приёма данных.
- Переписан код сборки мусора, применяемый при отправке файловых дескрипторов через Unix-сокеты c использованием сообщений SCM_RIGHTS. Изменение позволяет решить проблему с накоплением зацикленных счётчиков ссылок.
- Добавлена возможность установки фильтров для протокола PFCP (Packet Forwarding Control Protocol), используемого в сетях 4G и 5G.
- Добавлена поддержка опции сетевых сокетов SO_PEEK_OFF, которая по аналогии с такой же опцией для Unix-сокетов позволяет определить смещение данных в очереди, используемое системным вызовом recv при указании флага MSG_PEEK (помечает данные непрочитанными и они будут опять выданы при следующем вызове recv).
- В подсистему io_uring добавлена поддержка операции IORING_CQE_F_SOCK_NONEMPTY, позволяющей определить у сетевого сокета наличие запросов на соединение, ожидающих обработки.
- Предложена реализация технологии PoE (Power over Ethernet), основанная на ранее доступном коде для поддержки PoDL (Power over Data Line) и совместимая с PoE-контроллерами Microchip PD692x0 и TI TPS23881.
- Оборудование
- В состав включён драйвер panthor для десятого поколения GPU Mali (G310, G510, G710), в котором применяется технология CSF (Сommand Stream Frontend), выносящая на сторону прошивки некоторые функции драйвера для снижения нагрузки на CPU и предлагающая новую модель организации выполнения работ на GPU. Изменения для поддержки нового драйвера также приняты в Mesa и включены в состав Gallium-драйвера panfrost для GPU Mali.
- В драйвер i915 добавлены PCI-идентификаторы новых дискретных видеокарт Intel Arc (DG2/Alchemist).
- Продолжена работа над drm-драйвером (Direct Rendering Manager) Xe для GPU на базе архитектуры Intel Xe, которая используется в видеокартах Intel семейства Arc и интегрированной графике, начиная с процессоров Tiger Lake. Добавлена поддержка CPU Arrow Lake H. Продолжена реализация поддержки процессоров Lunar Lake. Добавлена начальная поддержка механизма SR-IOV (Single Root I/O Virtualization).
- В драйвере AMDGPU добавлена поддержка SMU 14.0 (System Management Unit). Добавлена возможность использования новых GPU AMD на системах с архитектурой RISC-V.
- Добавлен драйвер для ускорителя криптографических операций Tegra Security Engine, который можно использовать для ускорения AES и различных алгоритмов хэширования.
- Добавлена поддержка экранных панелей LG SW43408, Innolux G121XCE-L01 LVDS, RK3326 GameForce Chi, Crystal Clear CMT430B19N00, POWERTIP PH128800T006-ZHC01, Startek KD050HDFIA020-C020A, Pixel 3a, Khadas TS050 V2, Raydium RM69380,BOE NT116WHM-N44, CMN N116BCA-EA1 и AUO B120XAN01.0.
- Добавлена поддержка звуковой подсистемы ноутбуков Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 13X и ASUS Zenbook 2024 HN7306W. Добавлена поддержка внешних звуковых карт Vocaster One и Vocaster Two. Добавлен драйвер для усилителей NAU8325 от компании Nuvoton Technology.
- В драйвер HID-Steam добавлена поддержка IMU (Inertial Measurement Unit) игрового контроллера Steam Deck, позволяющая использовать отдельный узел evdev для доступа к данным гироскопа и акселерометра.
- Включены изменения для поддержки ARM SoC Snapdragon X Elite, в котором используется собственный 12-ядерный CPU Qualcomm Oryon и GPU Qualcomm Adreno. Чип нацелен на использование в ноутбуках и ПК, и опережает во многих тестах производительности чипы Apple M3 и Intel Core Ultra 155H.
- Добавлена поддержка ARM-плат, SoC и устройств: PocketBook 614 Plus, Sony Xperia Z3, Xperia 1 V, Samsung Galaxy S5 China, Motorola Moto G, RK3326 GameForce Chi,
Anbernic RG35XX (Plus/H/2024), Airoha EN7581, Radxa ROCK 3C, ArmSom Sige7, Tanix TX1, Toradex Colibri iMX8DX, Renesas RZ/V2H, Forlinx OK3588-C, Protonic MECSBC, Emcraft Systems NavQ+, NXP S32G3, Wolfvision pf5, Amlogic A4/A5, ASUS RT-AC3200, ASUS RT-AC5300, ASrock E3C256D4I, IBM system1 BMC, Meta Harma BMC(AST2600), ASRock X570D4U BMC, Au-Zone Maivin AI Vision Starter Kit. - Добавлена поддержка плат Milkv Mars, использующих SoC Starfive JH7110 на базе архитектуры RISC-V.
Одновременно латиноамериканский Фонд свободного ПО сформировалвариант полностью свободного ядра 6.10 – Linux-libre 6.10-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В выпуске 6.10 обновлён код чистки блобов в драйверах Intel i915, rtl8xxxu, qla2xxx и QCAI sahara. Проведена чистка имён блобов в dts-файлах (devicetree) для архитектуры Aarch64. Очищены от блобов новые файлы, добавленные в драйверах Adreno, Intel IPU3 и PRUEth. Проведена чистка новых драйверов Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID и pcm6240. Прекращена чистка USB-драйвера Prism2.5/3 USB, который был удалён из ядра.