Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Kernels
 Boot 
 Memory 
 File system
 0.01
 1.0 
 2.0 
 2.4 
 2.6 
 3.x 
 4.x 
 5.x 
 6.x 
 Интервью 
 Kernel
 HOW-TO 1
 Ptrace
 Kernel-Rebuild-HOWTO
 Runlevel
 Linux daemons
 FAQ
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Secure Programming for Li...6501 
 Linux Kernel 2.6...5278 
 Trees...1112 
 Максвелл 3...1046 
 William Gropp...984 
 Go Web ...953 
 Ethreal 3...921 
 Gary V.Vaughan-> Libtool...911 
 Ethreal 4...908 
 Ext4 FS...898 
 Clickhouse...896 
 Rodriguez 6...896 
 Ethreal 1...888 
 Steve Pate 1...877 
 C++ Patterns 3...858 
 Assembler...845 
 Ulrich Drepper...839 
 DevFS...779 
 MySQL & PosgreSQL...761 
 Стивенс 9...752 
 
  01.01.2024 : 3621733 посещений 

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.

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

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

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