Релиз ядра 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