Реліз ядра Linux 5.17

Після двох місяців розробки Лінус Торвальдс презентував реліз ядра Linux 5.17. Серед найбільш помітних змін: нова система управління продуктивністю для процесорів AMD, можливість рекурсивного мапінгу ідентифікаторів користувачів у файлових системах, підтримка скомпільованих BPF-програм, що переносяться, переклад генератора псевдовипадкових чисел на алгоритм BLAKE2s, утиліта RTLA для аналізу виконання в режимі реального часу, новий для кешування мережевих ФС, можливість прикріплення імен до анонімних операцій mmap.

У нову версію прийнято 14203 виправлень від 1995 розробників, розмір патчу - 37 МБ (зміни торкнулися 11366 файлів, додано 506043 рядків коду, видалено 250954 рядків). Близько 44% всіх представлених у 5.17 змін пов'язані з драйверами пристроїв, приблизно 16% змін стосуються оновлення коду, специфічного для апаратних архітектур, 15% пов'язано з мережевим стеком, 4% — з файловими системами і 4% з внутрішніми підсистемами ядра.

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

  • Дискова підсистема, введення/виведення та файлові системи
    • Реалізована можливість вкладеного мапінгу ідентифікаторів користувачів примонтованих файлових систем, що застосовується для зіставлення файлів певного користувача на чужому розділі з іншим користувачем у поточній системі. Додана можливість дозволяє рекурсивно використовувати мапінг поверх файлових систем, для яких вже застосовується мапінг.
    • Повністю переписана підсистема fscache, що використовується для організації кешування в локальній файловій системі даних, що передаються через мережеві файлові системи. Нова реалізація відрізняється значним спрощенням коду та заміною ускладнених операцій планування та відстеження станів об'єктів на простіші механізми. Підтримка нового fscache реалізована у файловій системі CIFS.
    • У підсистемі відстеження подій у ФС fanotify реалізовано новий тип подій FAN_RENAME, який дозволяє разом перехопити операцію перейменування файлів або каталогів (раніше для обробки перейменувань застосовувалися дві роздільні події FAN_MOVED_FROM і FAN_MOVED_TO).
    • У файловій системі Btrfs проведена оптимізація операцій логування та fsync для великих каталогів, реалізована за рахунок копіювання тільки індексних ключів та скорочення обсягу метаданих, що логуються. Забезпечено підтримку індексації та пошуку за розміром записів про вільний простір, що дозволило приблизно на 30% зменшити затримки та скоротити час пошуку. Дозволено переривати операції дефрагментації. Увімкнено можливість додавати пристрої при відключенні балансування між накопичувачами, тобто. під час монтування ФС з опцією skip_balance.
    • Запропоновано новий синтаксис монтування файлової системи Ceph, що вирішує проблеми, пов'язані з прив'язкою до IP-адрес. Крім IP-адрес для визначення сервера, тепер можна використовувати ідентифікатор кластера (FSID): mount -t ceph [захищено електронною поштою]_name=/[subdir] mnt -o mon_addr=monip1[:port][/monip2[:port]]
    • Файлова система Ext4 переведена на новий API для монтування, який розділяє стадії розбору опцій монтування та налаштування суперблоку. Припинено підтримку опцій монтування lazytime та nolazytime, які додавалися як тимчасову зміну для спрощення перекладу util-linux на використання прапора MS_LAZYTIME. Додано підтримку встановлення та читання міток у ФС (ioctl FS_IOC_GETFSLABEL та FS_IOC_SETFSLABEL).
    • NFSv4 додана підтримка роботи у файлових системах без поділу регістрів символів в іменах файлів та каталогів. У NFSv4.1+ додано підтримку визначення агрегованих сеансів (trunking).
  • Пам'ять та системні сервіси
    • Додано драйвер amd-pstate, що забезпечує динамічне керування частотою для досягнення оптимальної продуктивності. Драйвер підтримує CPU та APU AMD починаючи з покоління Zen 2, розроблений спільно з компанією Valve та націлений на підвищення ефективності управління енергоспоживанням. Для адаптивної зміни частоти використовується механізм CPPC (Collaborative Processor Performance Control), який дозволяє більш точно змінювати показники (не обмежений трьома рівнями продуктивності) та оперативніше реагувати на зміну стану, ніж раніше використовувані P-state драйвери на базі ACPI (CPUFreq).
    • У підсистемі eBPF запропонований обробник bpf_loop(), що надає альтернативний спосіб організації циклів в eBPF-програмах, швидший та простіший для перевірки верифікатором.
    • На рівні ядра реалізований механізм CO-RE (Compile Once - Run Everywhere), що дозволяє збирати код eBPF-програм лише один раз і використовувати спеціальний універсальний завантажувач, що адаптує програму, що завантажується, до поточного ядра і типів BTF (BPF Type Format).
    • Надано можливість призначення імен для областей приватної анонімної (виділеної через malloc) пам'яті, що може спростити проведення налагодження та оптимізації споживання пам'яті у додатках. Імена надаються через prctl з прапором PR_SET_VMA_ANON_NAME і відображаються в /proc/pid/maps та /proc/pid/smaps у формі «[anon: ]».
    • У планувальнику завдань забезпечено відстеження та відображення в /proc/PID/sched часу, проведеного процесами в стані примусового простою (forced-idle), що застосовується, наприклад, для зниження навантаження при перегріві процесора.
    • Додано модуль gpio-sim, призначений для симуляції чипів GPIO для проведення тестування.
    • У команду "perf ftrace" додано підкоманда "latency" для генерації гістограм з інформацією про затримки.
    • Додано набір утиліт "RTLA" для аналізу роботи в режимі реального часу. До складу входять такі утиліти, як osnoise (визначає вплив операційної системи виконання завдання) і timerlat (змінює затримки, пов'язані з таймером).
    • Інтегровано другу серію патчів з реалізацією концепції фоліантів сторінок пам'яті (page folios), які нагадують об'єднані сторінки пам'яті (compound pages), але відрізняються покращеною семантикою та більш зрозумілою організацією роботи. Використання фоліантів дозволяє прискорити керування пам'яттю в деяких підсистемах ядра. У запропонованих патчах завершено переведення сторінкового кешу на використання фоліантів та додано початкову підтримку фоліантів у ФС XFS.
    • Додано режим складання «make mod2noconfig», при якому генерується конфігурація, що збирає всі відключені підсистеми у формі модулів ядра.
    • Піднято вимоги до версії LLVM/Clang, яку можна використовувати для збирання ядра. Для складання тепер потрібний як мінімум випуск LLVM 11.
  • Віртуалізація та безпека
    • Запропоновано оновлену реалізацію генератора псевдовипадкових чисел RDRAND, що відповідає за роботу пристроїв /dev/random та /dev/urandom, примітна переходом на використання хеш-функції BLAKE2s замість SHA1 для операцій змішування ентропії. Зміна дозволила підвищити безпеку генератора псевдовипадкових чисел завдяки рятуванню від проблемного алгоритму SHA1 та виключенню перезапису вектора ініціалізації RNG. Оскільки алгоритм BLAKE2s випереджає SHA1 за продуктивністю, його застосування також позитивно позначилося на продуктивності.
    • Додано захист від уразливостей у процесорах, спричинених спекулятивним виконанням інструкцій після операцій безумовного прямого переходу. Проблема виникає через попереджувальну обробку інструкцій, що йдуть у пам'яті відразу за командою переходу (SLS, Straight Line Speculation). Для включення захисту потрібна збірка з використанням випуску GCC 12, що знаходиться на стадії тестування.
    • Додано механізм відстеження підрахунку посилань (refcount, reference-count), націлений зниження кількості помилок при підрахунку посилань, які призводять до звернення до пам'яті після її звільнення. Механізм поки що обмежений мережевою підсистемою, але у майбутньому може бути адаптований й інших частин ядра.
    • Реалізовано розширені перевірки нових записів у таблиці сторінок пам'яті процесу, що дозволяють виявляти деякі типи пошкоджень та зупиняти систему, блокуючи атаки на ранній стадії.
    • Додана можливість розпакування модулів ядра безпосередньо самим ядром, а не обробником у просторі користувача, що дозволяє за допомогою LSM-модуля LoadPin гарантувати, що модулі ядра завантажені на згадку з верифікованого пристрою зберігання.
    • Забезпечено складання з прапором "-Wcast-function-type", що включає виведення попереджень про наведення покажчиків функцій до несумісного типу.
    • Доданий віртуальний хостовий драйвер pvUSB для гіпервізора Xen, що надає доступ до USB-пристроїв, прокинутих у гостьові системи (дозволяє з гостьових систем звертатися до фізичних USB-пристроїв, закріплених за гостьовою системою).
    • Доданий модуль, що дозволяє через Wi-Fi взаємодіяти з підсистемою IME (Intel Management Engine), яка постачається у більшості сучасних материнських плат із процесорами Intel та реалізована у вигляді окремого мікропроцесора, що працює незалежно від CPU.
    • Для архітектури ARM64 реалізована підтримка інструменту налагодження KCSAN (Kernel Concurrency Sanitizer), призначеного для динамічного виявлення станів гонки всередині ядра.
    • Для 32-розрядних систем ARM додано можливість застосування механізму KFENCE для виявлення помилок під час роботи з пам'яттю.
    • У гіпервізорі KVM додано підтримку інструкцій AMX (Advanced Matrix Extensions), реалізованих у майбутніх серверних процесорах Intel Xeon Scalable.
  • Мережева підсистема
    • Додано підтримку виносу (offloading) на бік мережевих пристроїв операцій, пов'язаних з керуванням трафіком.
    • Додано можливість використання протоколу MCTP (Management Component Transport Protocol) поверх пристроїв із послідовним інтерфейсом. MCTP може використовуватися для взаємодії управляючих контролерів та пов'язаних з ними пристроїв (хост-процесори, периферійні пристрої тощо).
    • Проведено оптимізацію TCP-стека, наприклад, для підвищення продуктивності викликів recvmsg реалізовано відкладене звільнення буферів сокетів.
    • На рівні повноважень CAP_NET_RAW дозволено виставлення через функцію setsockopt режимів SO_PRIORITY та SO_MARK.
    • Для IPv4 дозволено прикріплення raw-сокетів не до локальних IP-адрес, використовуючи опції IP_FREEBIND та IP_TRANSPARENT.
    • Додано sysctl arp_missed_max для налаштування порогового числа збоїв під час перевірки ARP-монітором, після якого мережний інтерфейс переводиться у відключений стан.
    • Надано можливість налаштування окремих значень sysctl min_pmtu та mtu_expires для мережних просторів імен.
    • В API ethtool додано можливість встановлення та визначення розміру буферів вхідних та вихідних пакетів.
    • У Netfilter додано підтримку фільтрації транзитного pppoe-трафіку в мережевому мосту.
    • модуль ksmbd з реалізацією файлового сервера, що використовує протокол SMB3, додано підтримку обміну ключами, задіяний мережевий порт 445 для smbdirect і додано підтримку параметра «smb2 max credit».
  • Обладнання
    • У підсистему drm (Direct Renderering Manager) і драйвер i915 додано підтримку екранів для виведення конфіденційної інформації, наприклад, деякі ноутбуки комплектуються екранами з вбудованим режимом конфіденційного перегляду, що утруднює перегляд збоку. Додані зміни дозволяють підключати спеціалізовані драйвери для подібних екранів та керувати режимами конфіденційного перегляду через виставлення властивостей у звичайних KMS-драйверах.
    • У драйвері amdgpu включена підтримка технології STB (Smart Trace Buffer) для всіх підтримують її GPU AMD. STB спрощує аналіз збоїв та виявлення джерела проблем через збереження у спеціальному буфері інформації про функції, що виконуються перед останнім збоєм.
    • У драйвері i915 додано підтримку чіпів Intel Raptor Lake S і включено за замовчуванням підтримку графічної підсистеми чіпів Intel Alder Lake P. Надано можливість керування підсвічуванням екрану через DPCD-інтерфейс VESA.
    • У драйверах fbcon/fbdev повернуто підтримку апаратного прискорення прокручування в консолі.
    • Продовжено інтеграцію змін для підтримки чіпів Apple M1. Реалізовано можливість використання драйвера simpledrm на системах з чіпом Apple M1 для виведення через фреймбуфер, що надається прошивкою.
    • Додана підтримка ARM SoС, пристроїв та плат Snapdragon 7c, 845 та 888 (Sony Xperia XZ2/XZ2C/XZ3, Xperia 1 III/5 III, Samsung J5, Microsoft Surface Duo 2) Chromebook 6589), Mediatek MT1a/b (застосовується у Wi-fi маршрутизаторах), Broadcom BCM8183 (Netgear RAXE314), Qualcomm SDX7986, Samsung Exynos4908, Renesas R-Car S500-65, TI J7885s4, TI SPEAr Aspeed AST8/AST721, Engicam i.Core STM2MP320, Allwinner Tanix TX8, Facebook Bletchley BMC, Goramo MultiLink, JOZ Access Point, Y Soft IOTA Crux/Crux+, t8/t2500 MacBook Pro 2600/32.
    • Додано підтримку процесорів ARM Cortex-M55 та Cortex-M33.
    • Додано підтримку пристроїв на базі CPU MIPS: Linksys WRT320N v1, Netgear R6300 v1, Netgear WN2500RP v1/v2.
    • Додано підтримку SoC StarFive JH7100 на базі архітектури RISC-V.
    • Доданий драйвер lenovo-yogabook-wmi для керування підсвічуванням клавіатури та доступу до різних датчиків Lenovo Yoga Book.
    • Доданий драйвер asus_wmi_sensors для доступу до датчиків, що використовуються на материнських платах Asus X370, X470, B450, B550 та X399 на базі процесорів AMD Ryzen.
    • Доданий драйвер x86-android-tablets для планшетних ПК на базі архітектури x86, які постачаються з платформою Android.
    • Додано підтримку сенсорних екранів TrekStor SurfTab duo W1 та електронного пера для планшентів Chuwi Hi10 Plus та Pro.
    • У драйвери для SoC Tegra 20/30 додана підтримка керування живленням та напругою. Забезпечено можливість завантаження на старих 32-розрядних пристроях на базі SoC Tegra, таких як ASUS Prime TF201, Pad TF701T, Pad TF300T, Infinity TF700T, EeePad TF101 та Pad TF300TG.
    • Додано драйвери для промислових комп'ютерів Siemens.
    • Додано підтримку LCD-панелей Sony Tulip Truly NT35521, Vivax TPC-9150, Innolux G070Y2-T02, BOE BF060Y8M-AJ0, JDI R63452, Novatek NT35950, Wanchanglong W552946A.
    • Додана підтримка звукових систем та кодеків AMD Renoir ACP, Asahi Kasei Microdevices AKM4375, Intel systems using NAU8825/MAX98390, Mediatek MT8915, nVidia Tegra20 S/PDIF, Qualcomm ALC5682I-VS, Tex. Вирішено проблеми з Tegra320 HD-audio. Додано підтримку HDA для кодеків CS3L194. Покращено підтримку звукових систем для ноутбуків Lenovo та HP, а також материнських плат Gigabyte.

Джерело: opennet.ru

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