Реліз ядра Linux 6.3

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

Основні нововведення в ядрі 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 являє собою розширення протоколу 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 (старі інтегровані відеокарти Intel 8xx), mga (Matrox GPU), r128 (ATI Rage 128 GPU, включаючи карти Rage Fury, XPERT 99 та XPERT 128), savage (S3 Savage GPU) (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.
    • Додано підтримку 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 AM3588/AM3328/AM3 / AM642).

Одночасно латиноамериканський Фонд вільного програмного забезпечення сформував варіант повністю вільного ядра 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.

Джерело: opennet.ru

Додати коментар або відгук