Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

Ядро 6.3

24.04.2023

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.3. Среди наиболее заметных изменений: чистка устаревших ARM-платформ и графических драйверов, продолжение интеграции поддержки языка Rust, утилита hwnoise, поддержка древовидных структур red-black в BPF, режим BIG TCP для IPv4, встроенный тест производительности Dhrystone, возможность запрета исполнения в memfd, поддержка создания HID-драйверов, используя BPF, в Btrfs приняты изменения для уменьшения фрагментации групп блоков.

В новую версию принято 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).
    • Добавлена утилита hwnoise для отслеживания задержек, вызванных особенностями работы аппаратного обеспечения. Определяются отклонения времени выполнения операций (jitter) при отключении обработки прерываний, превышающие одну микросекунду за 10 минут вычислений.
    • Добавлен модуль ядра с реализацией теста производительности Dhrystone, который можно использовать для оценки производительности CPU в конфигурациях без компонентов пространства пользователя (например, на стадии портирования для новых SoC, на которых реализована лишь загрузка ядра).
    • Добавлен параметр командной строки ядра "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).
    • Проведена оптимизация objtool для ускорения сборки ядра и снижения пикового потребления памяти при сборке (при сборке ядра в режиме "allyesconfig" теперь не возникает проблем с принудительным завершением процессов на системах с 32 ГБ ОЗУ).
    • Прекращена поддержка сборки ядра компилятором 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 добавлена поддержка продвинутых накопителей на вращающихся дисках, например, таких в которых используется несколько раздельно управляемых приводов головок (Multi Actuator).
    • В реализацию клиента и сервера NFS добавлена поддержка шифрования данных с использованием алгоритма AES-SHA2.
    • В подсистему FUSE (Filesystems In User Space) добавлена поддержка механизма расширения запросов, позволяющего помещать в запрос дополнительную информацию. На базе данной возможности реализовано добавление идентификаторов групп к запросу ФС, необходимых для учёта прав доступа при создании объектов в ФС (create, mkdir, symlink, mknod).
  • Виртуализация и безопасность
    • В гипервизор KVM для систем x86 добавлена поддержка расширенных гипервызовов Hyper-V и обеспечен их проброс в обработчик, работающий в хост-окружении в пространстве пользователя. Изменение позволило реализовать поддержку вложенного запуска гипервизора Hyper-V.
    • В KVM упрощено ограничение доступа гостевой системы к событиям PMU (Performance Monitor Unit), связанным с измерением производительности.
    • В механизм memfd, позволяющий идентифицировать область памяти через передаваемый между процессами файловый дескриптор, добавлена возможность создания областей, в которых запрещено исполнение кода (non-executable memfd) и невозможно в будущем выставить права на исполнение.
    • Добавлена новая prctl-операция PR_SET_MDWE, блокирующая попытки включения прав доступа к памяти, одновременно разрешающих запись и исполнение.
    • Добавлена и включена по умолчанию защита от атак класса Spectre, реализованная на основе предложенного в процессорах AMD Zen 4 автоматического режима IBRS (Enhanced Indirect Branch Restricted Speculation), позволяющего адаптивно разрешать и запрещать спекулятивное выполнение инструкций во время обработки прерываний, системных вызовов и переключений контекста. Предложенная защита приводит к меньшим накладным расходам по сравнению с защитой Retpoline.
    • Устранена уязвимость, позволяющая обойти защиту от атак Spectre v2 при применении технологии одновременной многопоточности (SMT или Hyper-Threading) и вызванная отключением механизма STIBP (Single Thread Indirect Branch Predictors) при выборе режима защиты IBRS.
    • Для систем на базе архитектуры ARM64 добавлена новая сборочная цель "virtconfig", при выборе которой активируется только минимальный набор компонентов ядра, необходимый для загрузки в системах виртуализации.
    • Для архитектуры m68k добавлена поддержка фильтрации системных вызовов при помощи механизма seccomp.
    • Добавлена поддержка встроенных в процессоры AMD Ryzen устройств CRB TPM2 (Command Response Buffer), основанных на технологии Microsoft Pluton.
  • Сетевая подсистема
    • Добавлен 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. 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). Данные дисциплины длительное время находятся в заброшенном виде и не нашлось желающих продолжить их сопровождение.
    • В стеке ieee802154 добавлена поддержка пассивного режима сканирования каналов беспроводных сетей.
    • Для ICMP реализованы счётчики IcmpOutRateLimitGlobal, IcmpOutRateLimitHost и Icmp6OutRateLimitHost (nstat -sz "*RateLimit*") для отслеживания состояния ограничения интенсивности пакетов (rate limit).
    • В netfilter для nftables реализован набор команд "NFT_MSG_DESTROY*" для безоговорочного удаления объектов (в отличие от команды delete не генерирует ENOENT при попытке удаления отсутствующего объекта).
  • Оборудование
    • Удалены все графические драйверы на базе DRI1: i810 (старые интегрированные видеокарты Intel 8xx), mga (Matrox GPU), r128 (ATI Rage 128 GPU, включая карты Rage Fury, XPERT 99 и XPERT 128), savage (S3 Savage GPU), sis (Crusty SiS GPU), tdfx (3dfx Voodoo) и via (VIA IGP), которые были объявлены устаревшими в 2016 году и не поддерживаются в Mesa с 2012 года.
    • Удалены устаревшие драйверы фреймбуфера (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. Ограничением нового драйвера является невозможность одновременного подключения принтера и диска через параллельный порт.
    • Добавлен драйвер ath12k для беспроводных карт на чипах Qualcomm с поддержкой Wi-Fi 7. Добавлена поддержка беспроводных карт на чипах RealTek RTL8188EU.
    • Добавлена поддержка плат RISC-V на базе SoC Allwinner D1 и D1s.
    • Добавлена поддержка 46 плат с процессорами на базе архитектуры ARM64, среди которых Samsung Galaxy tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD, а также устройства на базе SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 и SDM632, Rockchips RK3128 TV box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 и 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.

Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье