Реліз ядра Linux 6.0

Після двох місяців розробки Лінус Торвальдс презентував реліз ядра Linux 6.0. Значна зміна номера версії зроблена з естетичних міркувань і є формальним кроком, що знімає дискомфорт через накопичення великої кількості випусків у серії (Лінус пожартував, що причина зміни номера гілки скоріше в тому, що в нього закінчуються пальці на руках і ногах вважати номери версій) . Серед найбільш помітних змін: підтримка асинхронного буферизованого запису XFS, блочний драйвер ublk, оптимізація планувальника завдань, механізм верифікації коректності роботи ядра, підтримка блочного шифру ARIA.

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

  • Дискова підсистема, введення/виведення та файлові системи
    • У файлову систему XFS додано підтримку асинхронного буферизованого запису з використанням механізму io_uring. Тести продуктивності, проведені за допомогою інструментарію fio (1 потік, розмір блоку 4кб, 600 секунд, послідовний запис), показують збільшення числа операцій введення/виводу в секунду (IOPS) з 77k до 209k, швидкості передачі даних – з 314MB/s до 854MB /s, та падіння затримок з 9600ns до 120ns (80 разів).
    • У файловій системі Btrfs реалізована друга версія протоколу для команди «send», що реалізує підтримку додаткових метаданих, відправлення даних більшими блоками (більше 64K) та передачі екстентів у стислому вигляді. Значно (до 3 разів) збільшено продуктивність операцій прямого читання (direct read) рахунок одночасного читання до 256 секторів. Зменшено конфлікти блокувань та прискорено перевірку метаданих за рахунок скорочення метаданих, що резервуються, для відкладених елементів.
    • У файлову систему ext4 додані нові операції ioctl EXT4_IOC_GETFSUUID і EXT4_IC_SETFSUUID для вилучення або встановлення UUID-ідентифікатора, що зберігається в суперблоці.
    • У файловій системі F2FS запропоновано режим низького споживання пам'яті, який оптимізує роботу на пристроях з невеликим об'ємом ОЗП та дозволяє знизити споживання пам'яті ціною зменшення продуктивності.
    • Додано підтримку автентифікації накопичувачів NVMe.
    • У сервері NFSv4 реалізований ліміт на кількість активних клієнтів, який виставляється як 1024 допустимих клієнтів на кожен гігабайт оперативної пам'яті в системі.
    • У реалізації CIFS-клієнта підвищено продуктивність у режимі багатоканальної передачі.
    • У підсистему відстеження подій до ФС fanotify додано новий прапор FAN_MARK_IGNORE для ігнорування специфічних подій.
    • У ФС Overlayfs, при монтуванні поверх ФС з мапінгом ідентифікаторів користувачів, забезпечена коректна підтримка POSIX-сумісних списків керування доступом.
    • Доданий блоковий драйвер ublk, що виносить специфічну логіку на бік фонового процесу у просторі користувача та використовує підсистему io_uring.
  • Пам'ять та системні сервіси
    • У підсистему DAMON (Data Access MONitor) додано нові можливості, що дозволяють не лише відстежувати доступ процесів до оперативної пам'яті з простору користувача, а й впливати на керування пам'яттю. Зокрема, запропоновано новий модуль LRU_SORT, що забезпечує перегрупування списків LRU (Least Recently Used) для підвищення пріоритету певних сторінок пам'яті.
    • Реалізовано можливість створення нових регіонів пам'яті, використовуючи можливості шини CXL (Compute Express Link), що використовується для організації високошвидкісної взаємодії CPU із пристроями пам'яті. CXL дозволяє підключати нові регіони пам'яті, що надаються зовнішніми пристроями пам'яті, та використовувати їх як додаткові ресурси фізичного адресного простору для розширення системної оперативної пам'яті (DDR) або постійної пам'яті (PMEM).
    • Вирішено проблеми з продуктивністю систем на процесорах AMD Zen, викликані кодом, доданим 20 років тому для обходу апаратної проблеми в деяких чіпсетах (додавалася додаткова інструкція WAIT, що уповільнює процесор, щоб чіпсет встигав перейти в стан простою). Зміна призводила до зниження продуктивності при навантаженнях, в яких часто чергуються стани простою (idle) та активності (busy). Наприклад, після відключення обхідного маневру середні показники тесту tbench збільшилися з 32191 MB/s до 33805 MB/s.
    • З планувальника завдань прибрано код з евристикою, що забезпечує міграцію процесів на найменш завантажені CPU з урахуванням прогнозованого виграшу в енергоспоживання. Розробники дійшли висновку, що евристика не приносить належної користі і її простіше видалити та переносити процеси без додаткових оцінок кожного разу, коли таке перенесення потенційно може призвести до зниження споживання енергії (наприклад, коли цільовий CPU знаходиться на рівні з нижчим енергоспоживанням). Відключення евристики призвело до зниження енергоспоживання під час виконання інтенсивних завдань, наприклад, у тесті з декодуванням відео енергоспоживання знизилося на 5.6%.
    • Проведено оптимізацію розподілу задач по ядрах CPU на великих системах, що дозволило підняти продуктивність при деяких видах навантаження.
    • В інтерфейсі асинхронного введення/виведення io_uring запропонований новий прапор IORING_RECV_MULTISHOT, що дозволяє використовувати режим «multi-shot» із системним викликом recv() для виконання разом кількох операцій читання з одного мережного сокету. У io_uring також реалізовано підтримку мережевої передачі без проміжної буферизації (zero-copy).
    • Реалізовано можливість переведення програм BPF, прикріплених до uprobe, у стан сну. BPF також доданий новий ітератор ksym для роботи з таблицями символів ядра.
    • Видалений застарілий інтерфейс «efivars» у sysfs, призначений для доступу до завантажувальних змінних UEFI (для доступу до даних EFI тепер застосовується віртуальна ФС efivarfs).
    • В утиліті perf реалізовані нові звіти для аналізу конфлікту блокувань та часу, що проводиться процесором для виконання компонентів ядра.
    • Видалено налаштування CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, що дозволяло збирати ядро ​​в режимі оптимізації «-O3». Зазначається, що експерименти з режимами оптмізації можуть проводитися через передачу прапорів при складанні («make KCFLAGS=-O3»), а для додавання налаштування в Kconfig потрібно забезпечити повторюване профілювання продуктивності, що показує що розгортання циклів, що застосовується в режимі «-O3» дає виграш по порівняно з рівнем оптимізації "-O2".
    • Доданий debugfs-інтерфейс для отримання інформації про роботу окремих "memory shrinker" (обробники, що викликаються при нестачі пам'яті та здійснюють упаковку структур даних ядра для скорочення споживання ними пам'яті).
    • Для архітектур OpenRISC та LoongArch реалізовано підтримку шини PCI.
    • Для архітектури RISC-V реалізовано розширення Zicbom для керування пристроями c DMA, не узгодженим з кешем (non-cache-coherent).
  • Віртуалізація та безпека
    • Додано механізм верифікації RV (Runtime Verification) для перевірки коректності роботи на високонадійних системах, що гарантують відсутність збоїв. Перевірка проводиться під час виконання через прикріплення обробників до точок трасування, що звіряють фактичний хід виконання із заздалегідь визначеною еталонною детермінованою моделлю автомата, що визначає очікувану поведінку системи. Звірка з моделлю під час виконання позиціонується як легкий і простий для реалізації на практиці спосіб підтвердження коректності виконання на критично важливих системах, що доповнює класичні методи підтвердження надійності. З переваг RV називається можливість забезпечити сувору верифікацію без окремої реалізації всієї системи мовою моделювання, а також гнучке реагування на непередбачувані події.
    • Інтегровані компоненти ядра для управління анклавами на базі технології Intel SGX2 (Software Guard eXtensions), що дозволяє програмам виконувати код в ізольованих зашифрованих областях пам'яті, доступ решти системи до яких обмежений. Технологія Intel SGX2 підтримується в чіпах Intel Ice Lake та Gemini Lake, та відрізняється від Intel SGX1 додатковими інструкціями для динамічного керування пам'яттю анклавів.
    • Для архітектури x86 реалізовано можливість передачі затравки для генератора псевдовипадкових чисел через налаштування завантажувача.
    • LSM-модуль SafeSetID додає можливість управління змінами, що здійснюються через виклик setgroups(). SafeSetID дозволяє системним сервісам безпечно керувати користувачами без підвищення привілеїв (CAP_SETUID) та без отримання повноважень користувача root.
    • Додано підтримку блочного шифру ARIA.
    • У модулі управління безпекою на базі BPF реалізована можливість прикріплення обробників до окремих процесів та груп процесів (cgroup).
    • Доданий механізм з реалізацією watchdog для визначення зависань гостьових систем на основі моніторингу активності vCPU.
  • Мережева підсистема
    • До підсистеми BPF додані обробники для генерації та перевірки SYN cookies. Також додано набір функцій (kfunc) для доступу та зміни стану з'єднань.
    • У бездротовий стек додано підтримку механізму MLO (Multi-Link Operation), визначеного у специфікації WiFi 7 і дозволяє пристроям одночасно отримувати та відправляти дані з використанням різних діапазонів частот і каналів, наприклад, для встановлення одночасно декількох каналів зв'язку між точкою доступу до клієнтського пристрою.
    • Підвищено продуктивність вбудованої в ядро ​​реалізації протоколу TLS.
    • Доданий параметр командного рядка ядра "hostname=", що дозволяє виставити ім'я хоста на ранній стадії завантаження, перш ніж будуть запущені компоненти простору користувача.
  • Обладнання
    • У драйвері i915 (Intel) забезпечено підтримку дискретних відеокарт Intel Arc (DG2/Alchemist) A750 і A770. Запропоновано початкову реалізацію підтримки GPU Intel Ponte Vecchio (Xe-HPC) та Meteor Lake. Продовжено роботу з підтримки платформи Intel Raptor Lake.
    • У драйвері amdgpu продовжено роботу щодо забезпечення підтримки платформ AMD RDNA3 (RX 7000) та CDNA (Instinct).
    • У драйвері Nouveau перероблено код підтримки дисплейних двигунів GPU NVIDIA nv50.
    • Додано новий DRM-драйвер logicvc для екранів LogiCVC.
    • У драйвері v3d (для GPU Broadcom Video Core) реалізовано підтримку плат Raspberry Pi 4.
    • У драйвер msm додано підтримку GPU Qualcomm Adreno 619.
    • До драйвера Panfrost додано підтримку GPU ARM Mali Valhall.
    • Додано початкову підтримку процесорів Qualcomm Snapdragon 8cx Gen3, що використовуються в ноутбуках Lenovo ThinkPad X13s.
    • Додано звукові драйвери для платформ AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake та Mediatek MT8186.
    • Додано підтримку прискорювачів систем машинного навчання Intel Habana Gaudi 2.
    • Додано підтримку ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3.

Одночасно латиноамериканський Фонд вільного програмного забезпечення сформував варіант повністю вільного ядра 6.0 — Linux-libre 6.0-gnu, очищеного від елементів прошивок та драйверів, що містять невільні компоненти або ділянки коду, сфера застосування яких обмежена виробником. У новому випуску відключено використання блобів у драйвері CS35L41 HD-audio та драйвері з інтерфейсом UCSI для мікроконтролерів STM32G0. Проведено чищення dts-файлів для чіпів Qualcomm та MediaTek. Перероблено відключення блобів у драйвері MediaTek MT76. Оновлено код чищення блобів у драйверах та підсистемах AMDGPU, Adreno, Tegra VIC, Netronome NFP та Habanalabs Gaudi2. Припинено чищення драйвера VXGE, видаленого з ядра.

Джерело: opennet.ru

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