Релиз ядра Linux 6.3

После двух месяцев разработки Линус Торвальдс представил релиз ядра 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.



Источник: http://www.opennet.ru/opennews/art.shtml? num=59022

© OpenNet