Хорошо, когда новинки выходят быстро, а не спустя полгода-год. В этот раз мы радуемся ядру Linux 6.10, в котором немало изменений. В частности — обновленный драйвер ntsync c примитивами синхронизации Windows NT, компоненты DRM Panic, появление возможности шифрованного обмена данными с устройствами TPM и новый драйвер для GPU Mali. Есть, конечно, и другие изменения, о чем можно узнать под катом.
Системные сервисы и память
- Одно из важнейших нововведений — появление начального варианта драйвера ntsync. Он реализует символьное устройство /dev/ntsync и набор примитивов для синхронизации, которые используются в ядре Windows NT. В итоге повышается — и весьма существенно — производительность игр под Windows, которые запускаются посредством Wine. Отдельный драйвер для Linux объясняется проблемами с корректной реализацией API синхронизации NT поверх уже имеющихся примитивов в ядре. Сейчас драйвер отключен, но в следующей ветке его обещают привести в чувство и сделать активным.
- В новом релизе продолжается процесс переноса изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра. Поддержка Rust не активна по умолчанию и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру. Так, уже осуществлен переход на использование выпуска Rust 1.78, который позволяет переключиться на использование штатной библиотеки alloc. Добавлены также абстракции для работы со временем в ядре.
- Для 32-разрядных ARM добавлена поддержка сборки ядра компилятором Clang с активированным режимом защиты CFI (Control Flow Integrity). Он блокирует нарушения нормального порядка выполнения в результате применения эксплоитов, которые меняют хранимые в памяти указатели на функции.
- Есть изменения и для субархитектуры x32, которая предоставляет гибридный x86_64 ABI. Для нее добавлена поддержка механизма Shadow Stack, который позволяет блокировать работу большого количества эксплоитов. Все это — благодаря аппаратным возможностям процессоров Intel для защиты от перезаписи адреса возврата из функции в случае переполнения буфера в стеке.
- На системах с архитектурой ARM64 в системном вызове userfaultfd(), дающем возможность создавать обработчики обращений к невыделенным страницам памяти (page faults) в пространстве пользователя, реализованы возможности, связанные с защитой от записи областей памяти и элементов таблицы страниц памяти.
- Удален код для поддержки выпускаемых с 1995 года процессоров Alpha 21164 (EV5) и более ранних серий.
Безопасность с виртуализацией
- Появилась, как и говорилось в анонсе, поддержка шифрованного обмена данными TPM-устройствами, а также проверка целостности транзакций.
- Еще одно нововведение — опция 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 подсистемы. Также добавлена возможность объединения нескольких буферов для операций отправки и приема данных.
- Полностью переписан код сборки мусора, который применялся при отправке файловых дескрипторов через Unix-сокеты с использованием сообщений SCM_RIGHTS. Это изменение позволяет решить проблему с накоплением зацикленных счетчиков ссылок.
- Появилась возможность установки фильтров для протокола PFCP, который используется в сетях 4G и 5G.
- Появилась поддержка опции сетевых сокетов SO_PEEK_OFF, которая по аналогии с такой же опцией для Unix-сокетов позволяет определить смещение данных в очереди.
- Предложена реализация PoE (Power over Ethernet), основанная на ранее доступном коде для поддержки PoDL (Power over Data Line) и совместимая с PoE-контроллерами Microchip PD692x0 и TI TPS23881.
- Для протоколов TCP, DCCP и MPTC добавлена поддержка механизма rstreason, позволяющего определять причину отправки RST-пакетов (например, NO_SOCKET).
Дисковая подсистема, файловые системы
- Здесь много изменений, включая, например, подсистему FUSE. Она применяется для реализации файловых систем в пространстве пользователя. Также реализована новая возможность — механизм fs-verity для проверки целостности и подлинности файлов.
- Для файловой системы XFS продолжена работа над реализацией возможности использования fsck, которая нужна для проверки и исправления обнаруженных проблем без отмонтирования файловой системы.
- В Btrfs появилась поддержка урезания незакрепленных карт экстентов. Это может быть полезным для снижения потребления памяти — например, когда ресурса в системе не хватает.
- В Ext4 добавлена поддержка ioctl FS_IOC_GETFSSYSFSPATH для определения местоположения заданной примонтированной ФС в иерархии /sys/fs.
- Файловые системы OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX и FREEVXFS переведены на использование нового API монтирования разделов.
- В файловую систему OverlayFS добавлена поддержка создания временных файлов, используя опцию O_TMPFILE.
Оборудования
- Наконец, в разделе оборудования тоже много новинок. Например, в драйвере AMDGPU добавлена поддержка SMU 14.0 (System Management Unit). А еще — возможность использования новых GPU AMD на системах с архитектурой RISC-V.
- В i915 добавлены PCI-идентификаторы новых дискретных видеокарт Intel Arc (DG2/Alchemist).
- Также появился panthor для 10 поколения GPU Mali (G310, G510, G710). В нем применяется технология CSF (Сommand Stream Frontend). Она выносит на сторону прошивки ряд функций драйвера для уменьшения нагрузки на CPU.
- Добавлена поддержка экранных панелей 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.
- Добавлена поддержка 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.
В новой версии появилось 14 564 исправлений от 1 989 разработчиков. Размер патча составляет 41 МБ: изменения затронули 12 509 файлов, добавлено 547 663 строк кода, удалено — 312 464 строк. Как всегда, вышел релиз полностью свободного ядра 6.10 — Linux-libre 6.10-gnu. В нем нет элементов прошивки и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем.