После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.3. Среди наиболее заметных изменений: чистка устаревших ARM-платформ и графических драйверов, продолжение интеграции поддержки языка Rust, утилита hwnoise, поддержка древовидных структур red-black в BPF, режим BIG TCP для IPv4, возможность запрета исполнения в memfd, поддержка создания HID-драйверов, используя BPF.
В новую версию принято 15637 исправлений от 2055 разработчиков;
размер патча – 76 МБ (изменения затронули 14296 файлов, добавлено 1023183 строк кода, удалено 883103 строк). Для сравнения в прошлой версии было предложено 16843 исправлений от 2178 разработчиков; размер патча – 62 МБ. Около 39% всех представленных в ядре 6.3 изменений связаны с драйверами устройств, примерно 15% изменений имеют
отношение к обновлению кода, специфичного для аппаратных архитектур, 10% связано с сетевым стеком, 5% – с файловыми системами и 3% c внутренними подсистемами ядра.
Основные новшества в ядре 6.3:
- Память и системные сервисы
- Проведена значительная чистка кода, связанного со старыми и не используемыми ARM-платами, что позволило сократить размер исходных текстов ядра на 150 тысяч строк. Удалено более 40 старых ARM-платформ.
- Реализована возможность создания драйверов для устройств ввода с интерфейсом HID (Human Interface Device), реализуемых в форме BPF-программ.
- Продолжен перенос из ветки Rust-for-Linux дополнительной функциональности, связанной с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра. Поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру. Предложенная в прошлых выпусках функциональность расширена поддержкой типов Arc (реализация указателей со счётчиком ссылок), ScopeGuard (выполняется чистку при выходе за область видимости) и ForeignOwnable (обеспечивает перемещение указателей между кодом на Си и Rust). Из пакета ‘alloc’ удалён модуль ‘borrow’ (тип ‘Cow’ и типаж ‘ToOwned’).
Отмечается, что состояние поддержки Rust в ядре уже близко к тому, чтобы начать принимать в ядро первые модули, написанные на Rust. - В User-mode Linux (запуск ядра как пользовательского процесса) на системах x86-64 реализована поддержка кода, написанного на языке Rust. Добавлена поддержка сборки User-mode Linux при помощи clang с включением оптимизаций на этапе связывания (LTO).
- Добавлен параметр командной строки ядра “cgroup.memory=nobpf”, отключающий учёт потребления памяти для BPF-программ, что может быть полезно для систем с изолированными контейнерми.
- Для BPF-программ предложена реализация структуры данных red-black tree, в которой используются kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) вместо добавления нового типа маппинга.
- В механизм перезапускаемых последовательностей (rseq, restartable sequences) добавлена возможность передачи процессам идентификаторов параллельного выполнения (memory-map concurrency ID), отождествляемые с номером CPU.
Rseq предоставляет средства для быстрого атомарного выполнения операций, которые в случае прерывания другим потоком очищаются и предпринимается повторная попытка выполнения. - На процессорах ARM обеспечена поддержка инструкций SME 2 (Scalable Matrix Extension).
- Для архитектур s390x и RISC-V RV64 реализована поддержка механизма “BPF trampoline”, позволяющего минимизировать накладные расходы при передаче вызовов между ядром и программами BPF.
- На системах с процессорами на базе архитектуры RISC-V реализовано использование инструкций “ZBB” для ускорения операций со строками.
- Для систем на базе архитектуры набора команд LoongArch (применяемой в процессорах Loongson 3 5000 и реализующей новый RISC ISA, похожий на MIPS и RISC-V) реализована поддержка рандомизации адресного пространства ядра (KASLR), изменения размещения ядра в памяти (relocation), аппаратных точек останова и механизма kprobe.
- В механизме DAMOS (Data Access Monitoring-based Operation Schemes), позволяющем высвобождать память с учётом частоты обращения к памяти, реализована поддержка фильтров для исключения из обработки в DAMOS определённых областей памяти.
- В минимальной стандартной Си-библиотеке Nolibc реализована поддержка архитектуры s390 и набора инструкций Arm Thumb1 (в дополнение к поддержке ARM, AArch64, i386, x86_64, RISC-V и MIPS).
- Добавлена утилита hwnoise для отслеживания задержек, вызванных особенностями работы аппаратного обеспечения. Определяются отклонения времени выполнения операций (jitter) при отключении обработки прерываний, превышающие одну микросекунду за 10 минут вычислений.
- Добавлен модуль ядра с реализацией теста производительности Dhrystone, который можно использовать для оценки производительности CPU в конфигурациях без компонентов пространства пользователя (например, на стадии портирования для новых SoC, на которых реализована лишь загрузка ядра).
- Прекращена поддержка сборки ядра компилятором Intel ICC, которая уже длительное время находилась в нерабочем виде и никто не изъявил желание это исправить.
- Дисковая подсистема, ввод/вывод и файловые системы
- В tmpfs реализована поддержка маппинга идентификаторов пользователей примонтированных файловых систем, применяемого для сопоставления файлов определённого пользователя на примонтированном чужом разделе с другим пользователем в текущей системе.
- В Btrfs для уменьшения фрагментации групп блоков обеспечено разделение экстентов по размеру при выделении блоков, т.е. любая группа блоков теперь ограничивается мелкими (до 128KB), средними (до 8 МБ) и крупными экстентами. Проведён рефакторинг реализации raid56. Переработан код для проверки контрольных сумм.Внесены оптимизации производительности, позволившие до 10 раз ускорить операцию send за счёт кэширования utime для каталогов и выполнения команд только при необходимости. В три раза ускорено выполнение операций fiemap за счёт пропуска проверок обратных ссылок для совместно используемых данных (снапшотов). На 10% ускорены операции с метаданными за счёт оптимизации поиска ключей в структурах b-tree.
- Повышена производительность ФС ext4 за счёт возможности одновременного выполнения несколькими процессами операций прямого ввода/вывода в заранее выделенные блоки, используя совместные блокировки inode вместо эксклюзивной блокировки.
- В f2fs проведена работа по улучшению читаемости кода. Решены важные проблемы, связанные с атомарной записью и новым кэшем экстентов.
- В файловой системе EROFS (Enhanced Read-Only File System), предназначенной для использования на разделах, доступных в режиме только для чтения, реализована возможность привязки к CPU операций распаковки сжатого содержимого файлов для сокращения задержек при доступе к данным.
- В планировщик ввода/вывода BFQ добавлена поддержка продвинутых накопителей на вращающихся дисках, например, таких в которых используется несколько раздельно управляемых приводов.
- В реализацию клиента и сервера NFS добавлена поддержка шифрования данных с использованием алгоритма AES-SHA2.
- В подсистему FUSE (Filesystems In User Space) добавлена поддержка механизма расширения запросов, позволяющего помещать в запрос дополнительную информацию. На базе данной возможности реализовано добавление идентификаторов групп к запросу ФС, необходимых для учёта прав доступа при создании объектов в ФС (create, mkdir, symlink, mknod).
- Виртуализация и безопасность
- В гипервизор KVM для систем x86 добавлена поддержка расширенных гипервызовов Hyper-V и их проброс в обработчик, работающий в хост-окружении в пространстве пользователя.
- В KVM упрощено ограничение доступа гостевой системы к событиям pmu, связанным с измерением производительности.
- В механизм memfd, позволяющий идентифицировать область памяти через передаваемый между процессами файловый дескриптор, добавлена возможность создания областей, в которых запрещено исполнение кода (non-executable memfd) и невозможно в будущем выставить права на исполнение.
- Добавлена новая prctl-операция PR_SET_MDWE, блокирующая попытки включения прав доступа к памяти процесса, одновременно разрешающих запись и исполнение.
- Добавлена защита от атак класса Spectre, реализованная на основе предложенного в процессорах AMD автоматического режима IBRS (Enhanced Indirect Branch Restricted Speculation), позволяющего адаптивно разрешать и запрещать спекулятивное выполнение инструкций во время обработки прерываний, системных вызовов и переключений контекста. Предложенная защита приводит к меньшим накладным расходам по сравнению с защитой Retpoline.
- Для систем на базе архитектуры ARM64 добавлена новая сборочная цель “virtconfig”, при выборе которой активируется только минимальный набор компонентов ядра, необходимый для загрузки в системах виртуализации.
- Для архитектуры m68k добавлена поддержка фильтрации системных вызовов при помощи механизма seccomp.
- Сетевая подсистема
- Добавлен netlink-интерфейс для настройки подуровня предотвращения коллизий PLCA (Physical Layer Collision Avoidance), определённого в спецификации IEEE 802.3cg-2019 и используемого в Ethernet-сетях 802.3cg (10Base-T1S), оптимизированных для подключения устройств интернета-вещей и промышленных систем. Применение PLCA позволяет повысить производительность в Ethernet-сетях с разделяемой средой (shared media).
- Прекращена поддержка API “wireless extensions” для управления беспроводными интерфейсами WiFi 7 (802.11be) так как данный API не охватывает все необходимые настройки. При попытке использования API “wireless extensions”, который продолжает поддерживаться как эмулируемый слой, для большинства актуальных устройств теперь будет выводиться предупреждение.
- Подготовлена подробная документация по API netlink (для разработчиков ядра и для разработчиков приложений в пространстве пользователя). Реализована утилита ynl-gen-c для генерации Си-кода на основе YAML-спецификаций протокола Netlink.
- В сетевые сокеты добавлена поддержка опции IP_LOCAL_PORT_RANGE для упрощения осуществления исходящих соединений чрез трансляторы адресов без применения SNAT при использовании одного IP-адреса на нескольких хостах (IP_LOCAL_PORT_RANGE даёт возможность использовать на каждом хосте свой диапазон исходящих сетевых портов, а на шлюзе перенаправлять пакеты на основе номеров портов).
- Для MPTCP (MultiPath TCP) реализована возможность обработки смешанных потоков, в которых используются протоколы IPv4 и IPv6. MPTCP представляет собой расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам.
- Для IPv4 реализована возможность использования расширения BIG TCP, позволяющего увеличить максимальный размер пакета TCP-пакета до 4ГБ для оптимизации работы высокоскоростных внутренних сетей дата-центров. Подобное увеличение размера пакета при 16-битном размере поля в заголовке достигается через реализацию “jumbo”-пакетов, размер в IP-заголовке которых выставляется в 0, а фактический размер передаётся в отдельном 32-разрядном поле в отдельном прикреплённом заголовке.
- Добавлен новый sysctl-параметр default_rps_mask, через который можно задать применяемую по умолчанию конфигурацию RPS (Receive Packet Steering), отвечающую за распределение обработки входящего трафика по ядрам CPU на уровне обработчиков прерываний.
- Прекращена поддержка дисциплин обработки очередей для ограничения трафика CBQ (class-based queuing), ATM (ATM virtual circuits), dsmark (differentiated service marker), tcindex (traffic-control index) и
RSVP (resource reservation protocol). Данные дисциплины длительное время находятся в заброшенном виде и не нашлось желающих продолжить их сопровождение.
- Оборудование
- Удалены все графические драйверы на базе DRI1: i810, mga, r128, savage, sis, tdfx и via), которые были объявлены устаревшими в 2016 году и не поддерживаются в Fedora c 2014 года.
- Удалены устаревшие драйверы фреймбуфера (fbdev) omap1, s3c2410, tmiofb и w100fb.
- Добавлен DRM-драйвер для интегрированных в CPU Intel Meteor Lake (14 поколение) блоков VPU (Versatile Processing Unit), предназначенных для ускорения операций, связанных с компьютерным зрением и машинным обучением. Драйвер реализован с использованием подсистемы “accel”, нацеленной на обеспечение поддержки ускорителей вычислений, которые могут поставляться как в форме отдельных ASIC, так и виде IP-блоков внутри SoC и GPU.
- В драйвере i915 (Intel) расширена поддержка дискретных видеокарт Intel Arc (DG2/Alchemist), реализована предварительная поддержка GPU Meteor Lake, включена поддержка GPU Intel Xe HP 4tile.
- В драйвере amdgpu добавлена поддержка технологии AdaptiveSync и возможность использования с несколькими дисплеями режима защиты от перехвата выводимых на экран данных (Secure Display). Обновлена поддержка DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x и DP 2.1.
- В драйвер msm (GPU Qualcomm Adreno) добавлена поддержка платформ SM8350, SM8450 SM8550, SDM845 и SC8280XP.
- В драйвере Nouveau прекращена поддержка старых вызовов ioctl.
- В драйвер etnaviv добавлена экспериментальная поддержка NPU VerSilicon (VeriSilicon Neural Network Processor).
- Реализован драйвер pata_parport для IDE-накопителей, подключаемых через параллельный порт. Добавленный драйвер позволил удалить из ядра старый драйвер PARIDE и модернизировать подсистему ATA. Ограничением нового драйвера является невозможность одновременного подключения принтера и диска через параллельный порт.
- Добавлена поддержка 46 плат с процессорами на базе архитектуры ARM64, среди которых устройства на базе SoC Qualcomm MSM8953 (Snapdragon 610), SDM450 и SDM632, Rockchips RK3588, RK3568, RK3566 и RK3328, TI K3 (AM642/AM654/AM68/AM69).
Одновременно латиноамериканский Фонд свободного ПО сформировалвариант полностью свободного ядра 6.3 – Linux-libre 6.3-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В выпуске 6.3 проведена чистка блобов в новых драйверах ath12k, aw88395 и peb2466, а также в новых файлах devicetree для устройств qcom на базе архитектуры AArch64. Обновлён код чистки блобов в драйверах и подсистемах amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110, а также в драйверах для DVB-карт с программным декодированием и в предкомпилированных BPF-файлах. Прекращена чистка драйверах mga, r128, tm6000, cpia2 и r8188eu, так как они были удалены из ядра. Улучшена очистка от блобов драйвера i915.