Реліз ядра Linux 5.12

Після двох місяців розробки Лінус Торвальдс представив реліз ядра Linux 5.12. Серед найбільш помітних змін: підтримка зонованих блокових пристроїв у Btrfs, можливість мапінгу ідентифікаторів користувачів для ФС, чищення застарілих ARM-архітектур, режим «нетерплячого» запису в NFS, механізм LOOKUP_CACHED для визначення файлових шляхів з кешу, підтримка атомарних інструкцій у BPF, KFENCE для виявлення помилок при роботі з пам'яттю, що працює в окремому потоці ядра режим NAPI poll-інгу в мережевому стеку, гіпервізор ACRN, можливість зміни на льоту preempt-моделі в планувальнику завдань та підтримка LTO-оптимізацій при складанні Clang.

У нову версію прийнято 14170 (у минулому випуску 15480) виправлень від 1946 (1991) розробників, розмір патча - 38 Мб (зміни торкнулися 12102 (12090) файлів, додано 538599 (868025)333377) Близько 261456% всіх представлених у 43 змін пов'язані з драйверами пристроїв, приблизно 5.12% змін мають відношення до оновлення коду, специфічного для апаратних архітектур, 17% пов'язано з мережевим стеком, 12% - файловими системами і 5% з внутрішніми підсистемами ядра.

Основні нововведення:

  • Дискова підсистема, введення/виведення та файлові системи
    • Реалізовано можливість мапінгу ідентифікаторів користувачів для змонтованих файлових систем (можна зіставити файли одного користувача на чужому розділі з іншим користувачем у поточній системі). Мапінг підтримується для ФС FAT, ext4 та XFS. Запропонована функціональність дозволяє спростити спільне використання файлів різними користувачами і на різних комп'ютерах, у тому числі мапінг буде застосовуватися в механізмі домашніх каталогів systemd-homed, що переносяться, даючи можливість користувачам переміщати свої домашні каталоги на зовнішні носії і використовувати їх на різних комп'ютерах, розкладка ідентифікаторів користувачів на яких не збігається. Іншим корисним застосуванням є організація надання спільного доступу до файлів із зовнішнього хоста, без фактичної зміни даних про власників файлів у ФС.
    • У ядро ​​прийняті патчі LOOKUP_CACHED, що дозволяють з простору користувача виконувати операції визначення файлового шляху без блокування лише на основі наявних в кеші даних. Режим LOOKUP_CACHED активується у виклику openat2() через передачу прапора RESOLVE_CACHED, коли дані віддаються лише з кеша, і якщо визначення шляху вимагає звернення до накопичувача, повертається помилка EAGAIN.
    • У файловій системі Btrfs додана початкова підтримка зонованих блокових пристроїв (пристрої на жорстких магнітних дисках або NVMe SSD, простір для зберігання в яких розбитий на зони, що становлять групи блоків або секторів, в які допускається лише послідовне додавання даних з оновленням цілої групи блоків). У режимі тільки для читання реалізована підтримка блоків з метаданими та даними, розміром меншим за сторінку (subpage).
    • У файловій системі F2FS додано можливість вибору алгоритму та рівня стиснення. Додано підтримку високого рівня стиснення для алгоритму LZ4. Реалізовано опцію монтування checkpoint_merge.
    • Реалізовано нову ioctl-команда FS_IOC_READ_VERITY_METADATA для читання метаданих із файлів, захищених за допомогою fs-verity.
    • У клієнті NFS реалізовано режим «нетерплячої» записи (writes=eager), при включенні якого операції записи файл відразу передаються сервер, минаючи сторінковий кеш. Вказаний режим дозволяє скоротити споживання пам'яті, забезпечує миттєве отримання інформації про завершення вільного місця у ФС і в деяких ситуаціях дає можливість досягти підвищення продуктивності.
    • У CIFS (SMB) додані нові опції монтування: acregmax для керування кешуванням файлів та acdirmax для керування кешуванням метаданих каталогів.
    • У XFS включено режим багатопоточної перевірки квот, прискорено виконання fsync, проведено підготовку коду growfs реалізації функції скорочення розміру ФС.
  • Пам'ять та системні сервіси
    • Додано підсистему DTMP (Dynamic Thermal Power Management), що дозволяє динамічно регулювати енергоспоживання різних пристроїв на основі загальних обмежень температури.
    • Реалізовано можливість складання ядра компілятором Clang із включенням оптимізації на етапі зв'язування (LTO, Link Time Optimization). LTO-оптимізації відрізняються врахуванням стану всіх файлів, що беруть участь у процесі збирання, тоді як традиційні режими оптимізації оптимізують кожен файл окремо і не враховують умови виклику функцій, визначених в інших файлах. Наприклад, при LTO для функцій з інших файлів можливе inline-розгортання, у виконуваний файл не включається код, що не використовується, здійснюється перевірка типів і загальна оптимізація на рівні проекту в цілому. Підтримка LTO поки що обмежена архітектурами x86 та ARM64.
    • Надається можливість вибору режимів витіснення (PREEMPT) у планувальнику завдань на етапі завантаження (preempt=none/voluntary/full) або під час роботи через debugfs (/debug/sched_debug), у разі вказівки під час складання ядра налаштування PREEMPT_DYNAMIC. Раніше режим витіснення міг задаватися лише на рівні параметрів збирання. Зміна дозволяє дистрибутивам постачати ядра з увімкненим режимом PREEMPT, що забезпечує мінімальні затримки для робочих столів ціною незначного зменшення пропускної спроможності, і за необхідності відкочуватися на режими PREEMPT_VOLUNTARY (проміжний режим для робочих столів) або PREEMPT_NONE (забезпечує максимальну пропускну здатність).
    • До підсистеми BPF додано підтримку атомарних операцій BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG та BPF_CMPXCHG.
    • BPF-програмам надано можливість доступу до даних у стеку за допомогою покажчиків зі змінним усуненням. Наприклад, якщо раніше для доступу до масиву в стеку можна було використовувати лише постійний індекс елемента, то тепер можна використовувати змінний. Контроль доступу тільки в межах наявних кордонів здійснюється верифікатором BPF. Можливість доступна лише привілейованим програмам через побоювання експлуатації вразливостей, пов'язаних зі спекулятивним виконанням коду.
    • Додано можливість прикріплення BPF-програм до голих точок трасування (bare tracepoints), не пов'язаних з видимими в просторі користувача подіями трасування (для подібних точок трасування не гарантується збереження ABI).
    • Реалізована підтримка шини CXL 2.0 (Compute Express Link), що використовується для організації високошвидкісної взаємодії CPU з пристроями пам'яті (дозволяє використовувати зовнішні пристрої пам'яті як частину ОЗП або постійної пам'яті, так, якби ця пам'ять була підключена через штатний контролер пам'яті в CPU).
    • Доданий драйвер nvmem для отримання даних із зарезервованих прошивками областей пам'яті, безпосередньо недоступних для Linux (наприклад, EEPROM-пам'ять, фізично доступна тільки для прошивки, або дані, доступні тільки на ранній стадії завантаження).
    • Видалено підтримку системи профілювання «oprofile», яка не набула належного поширення і витіснена більш сучасним механізмом perf.
    • В інтерфейсі асинхронного введення/виведення io_uring забезпечена інтеграція з cgroup, що контролюють використання пам'яті.
    • Для архітектури RISC-V реалізовано підтримку систем NUMA, а також механізмів kprobes та uprobes.
    • Додано можливість використання системного виклику kcmp() незалежно від функціональності зліпків стану процесів (checkpoint/restore).
    • Видалено макроси EXPORT_UNUSED_SYMBOL() та EXPORT_SYMBOL_GPL_FUTURE(), які вже багато років не використовуються на практиці.
  • Віртуалізація та безпека
    • Додано механізм захисту KFence (Kernel Electric Fence), який відловлює помилки під час роботи з пам'яттю, такі як вихід за кордон буфера та звернення після звільнення пам'яті. На відміну від механізму налагодження KASAN підсистема KFence відрізняється високою швидкістю роботи та низькими накладними витратами, що дозволяє відловлювати помилки роботи з пам'яттю, які виявляються тільки на робочих системах або при тривалій роботі.
    • Додано підтримку гіпервізора ACRN, написаного з огляду на готовність до виконання завдань реального часу та придатність до використання в критично важливих системах. ACRN забезпечує мінімальні накладні витрати, гарантує низькі затримки (low latency) та адекватну чуйність при взаємодії з обладнанням. Підтримується віртуалізація ресурсів CPU, введення/виводу, мережної підсистеми, операцій із графікою та звуком. ACRN може застосовуватися для запуску кількох ізольованих віртуальних машин в електронних блоках керування, приладових панелях, автомобільних інформаційних системах, споживчих IoT-пристроїв та іншої техніки, що вбудовується. ACRN підтримує два типи гостьових систем - привілейовані Service VM, які використовуються для управління ресурсами системи (CPU, пам'ять, введення/виведення тощо), і User VM, в яких може запускатися Linux-дистрибутиви, Android і Windows.
    • У підсистемі IMA (Integrity Measurement Architecture), що забезпечує підтримку бази хешів для перевірки цілісності файлів та пов'язаних з ними метаданих, з'явилася можливість перевірки цілісності даних самого ядра, наприклад, для відстеження зміни правил SELinux.
    • У гіпервізор KVM додано можливість перехоплення гіпердзвінків Xen та їх прокидання в емулятор, що працює у просторі користувача.
    • Додано можливість використання Linux як кореневого оточення для гіпервізора Hyper-V. Кореневе оточення має прямий доступ до обладнання та застосовується для запуску гостьових систем (аналог Dom0 у Xen). Досі Hyper-V (Microsoft Hypervisor) підтримував Linux лише у гостьових оточеннях, але сам гіперкер керувався з оточення на базі Windows.
    • Додано підтримку inline-шифрування для карт eMMC, що дозволяє задіяти вбудовані в контролер накопичувача механізми шифрування, які здійснюють прозоре шифрування та розшифрування вводу/виводу.
    • З криптопідсистеми видалена підтримка хешей RIPE-MD 128/256/320 і Tiger 128/160/192, що не використовуються в ядрі, а також потокового шифру Salsa20, на зміну якому прийшов алгоритм ChaCha20. Алгоритм blake2 оновлено до реалізації blake2s.
  • Мережева підсистема
    • Додано можливість винесення обробника NAPI полінгу (polling) мережевих пристроїв в окремий потік ядра, що дозволяє досягти підвищення продуктивності для деяких типів навантаження. До цього полінг виконувався в контексті softirq і не охоплювався планувальником завдань, що ускладнювало проведення тонкої оптимізації для досягнення максимальної продуктивності. Виконання в окремому потоці ядра дозволяє спостерігати за обробником полінгу з простору користувача, прикріплювати до окремих ядр CPU і враховувати при плануванні перемикання завдань. Для включення нового режиму в sysfs запропоновано параметр /sys/class/net/ / Threaded.
    • Продовжено інтеграцію в ядро ​​MPTCP (MultiPath TCP), розширення протоколу TCP для організації роботи TCP-з'єднання з доставкою пакетів одночасно по кількох маршрутах через різні мережеві інтерфейси, прив'язані до різних IP-адрес. У новому випуску додано можливість прикріплення пріоритету до певних потоків, що дозволяє, наприклад, організувати роботу резервних потоків, що включаються лише за проблем з первинним потоком.
    • У IGMPv3 додано підтримку механізму EHT (Explicit Host Tracking).
    • У механізмі фільтрації пакетів netfilter реалізована можливість володіння певними таблицями для отримання ексклюзивного контролю (наприклад, фоновий процес міжмережевого екрану може закріпити певні таблиці, заборонивши комусь ще втручатися в них).
  • Обладнання
    • Проведено чищення тих, хто вийде з ужитку і перебуває без супроводу ARM-платформ. Видалено код платформ efm32, picoxcell, prima2, tango, u300, zx та c6x, а також пов'язаних з ними драйверів.
    • У драйвері amdgpu реалізована можливість розгону (OverDrive) карток на базі GPU Sienna Cichlid (Navi 22, Radeon RX 6xxx). Додано підтримку піксельного формату FP16 для DCE (display controller engine) з 8 по 11 покоління. Для GPU Navy Flounder (Navi 21) та APU Van Gogh реалізована можливість скидання GPU.
    • У драйвері i915 для відеокарт Intel реалізовано параметр i915.mitigations для відключення механізмів ізоляції та захисту на користь підвищення продуктивності. Для чіпів починаючи з Tiger Lake включена підтримка механізму VRR (Variable Rate Refresh), що дозволяє адаптивно змінювати частоту оновлення монітора для забезпечення плавності та відсутності вибухів під час ігор. Увімкнено підтримку технології Intel Clear Color для підвищення точності кольору. Додано підтримку DP-HDMI 2.1. Реалізовано можливість керування підсвічуванням панелей eDP. Для GPU Gen9 із підтримкою LSPCON (Level Shifter and Protocol Converter) включена підтримка HDR.
    • У драйвері nouveau додано початкову підтримку GPU NVIDIA на базі архітектури GA100 (Ampere).
    • У драйвер msm додано підтримку GPU Adreno 508, 509 і 512, що використовуються в чіпах SDM (Snapdragon) 630, 636 та 660.
    • Додано підтримку звукових карт Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s та Pioneer DJM-750. Додано підтримку звукової підсистеми Intel Alder Lake PCH-P. Реалізовано підтримку програмної симуляції підключення та відключення аудіороз'єму для налагодження обробників у просторі користувача.
    • Додано підтримку ігрових консолей Nintendo 64, що випускалися з 1996 по 2003 рік (минулі спроби портувати Linux для Nintendo 64 не були доведені до кінця і мали статус Vaporware). Як мотив створення нового порту для застарілої платформи, яка не випускається вже майже двадцять років, називається бажання стимулювати розвиток емуляторів та спрощення перенесення ігор.
    • Додано драйвер для ігрового контролера Sony PlayStation 5 DualSense.
    • Додана підтримка ARM-плат, пристроїв та платформ: PineTab, Snapdragon 888/SM8350, Snapdragon MTP, Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M
    • Додано підтримку смартфонів Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.
    • Доданий драйвер bcm-vk для плат-прискорювачів Broadcom VK (наприклад, PCIe-плати Valkyrie та Viper), які можна використовувати для виносу на окремий пристрій операцій з обробки звуку, відео та зображень, а також дій, пов'язаних із шифруванням.
    • Додана підтримка платформи Lenovo IdeaPad з можливістю управління постійною зарядкою та підсвічуванням клавіатури. Також забезпечено підтримку ACPI-профілю платформи ThinkPad з можливістю управління режимами енергоспоживання. Додано драйвер для HID-підсистеми Lenovo ThinkPad X1 Tablet Gen 2.
    • Додано драйвер ov5647 з підтримкою модуля з камерою для Raspberry Pi.
    • Додана підтримка RISC-V SoC FU740 та плат HiFive Unleashed. Також додано новий драйвер для чіпа Kendryte K210.

Джерело: opennet.ru

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