Реліз ядра Linux 6.7

Після двох місяців розробки Лінус Торвальдс презентував реліз ядра Linux 6.7. Серед найбільш помітних змін: інтеграція ФС Bcachefs, припинення підтримки архітектури Itanium, можливість роботи Nouvea з прошивками GSP-R, підтримка TLS-шифрування в NVMe-TCP, можливість використання винятків у BPF, підтримка futex у io_uring, оптимізація продуктивності планувальника fq ), підтримка розширення TCP-AO (TCP Authentication Option) та можливість обмеження мережевих з'єднань у механізмі захисту Landlock, додано управління доступом до user namespace та io_uring через AppArmor.

У нову версію прийнято 18405 виправлень від 2066 розробників, розмір патчу - 72 МБ (зміни торкнулися 13467 файлів, додано 906147 рядків коду, видалено 341048 рядків). У минулому випуску було 15291 2058 виправлень від 39 розробників, розмір патчу - 45 МБ. Близько 6.7% всіх представлених у 14 змін пов'язані з драйверами пристроїв, приблизно 13% змін стосуються оновлення коду, специфічного для апаратних архітектур, 5% пов'язано з мережевим стеком, 3% — з файловими системами і XNUMX% з внутрішніми підсистемами ядра.

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

  • Дискова підсистема, введення/виведення та файлові системи
    • До складу ядра прийнято код файлової системи Bcachefs, в якій зроблено спробу досягти рівня продуктивності, надійності і масштабованості, властивого XFS, у поєднанні з елементами розширеної функціональності, що є в Btrfs і ZFS. Наприклад, Bcachefs підтримує такі можливості, як включення в розділ декількох пристроїв, багатошарові розкладки накопичувачів (нижній шар з часто використовуваними даними на базі швидких SSD, а верхній шар з менш затребуваними даними з жорстких дисків), реплікація (RAID 1/10), кешування , прозоре стиснення даних (режими LZ4, gzip і ZSTD), зрізи стану (снапшоти), верифікація цілісності за контрольними сумами, можливість зберігання кодів корекції помилок Ріда-Соломона (RAID 5/6), зберігання інформації в зашифрованому вигляді (використовуються ChaCha20 ). За продуктивністю Bcachefs випереджає Btrfs та інші ФС на базі механізму Copy-on-Write та демонструє швидкість роботи, близьку до Ext1305 та XFS.
    • У файловій системі Btrfs з'явився спрощений режим квот, який дозволяє досягти вищої продуктивності рахунок відстеження екстентів лише у тому підрозділі, у якому створено, що значно полегшує обчислення і підвищує продуктивність, але з дозволяє враховувати екстенти, совестно використовувані у кількох підрозділах.
    • У Btrfs додано нову структуру даних «stripe tree», придатну для логічного маппинга екстентів у ситуаціях, коли фізичних мапінг не збігається різних пристроях. Структура поки що задіяна в реалізаціях RAID0 та RAID1 для зонованих блокових пристроїв. У майбутньому цю структуру планують використовувати і RAID більш високого рівня, що дозволить вирішити ряд наявних у поточній реалізації проблем.
    • У файловій системі Ceph реалізована підтримка мапінгу ідентифікаторів користувачів примонтованих файлових систем, що використовується для зіставлення файлів певного користувача на чужому розділі з іншим користувачем в поточній системі.
    • У efivarfs додано можливість вказівки uid та gid при монтуванні для надання можливості зміни змінних UEFI процесами, запущеними без прав root.
    • У exFAT додані ioctl-дзвінки для читання та зміни атрибутів ФС. Додано обробку каталогів нульового розміру.
    • У F2FS реалізовано можливість використання блоків розміром 16K.
    • Механізм автомонтування autofs переведено використання нового API монтування розділів.
    • В OverlayFS запропоновані опції монтування «lowerdir+» та «datadir+». Додано підтримку вкладеного монтування OverlayFS з xattrs.
    • У XFS проведено оптимізацію навантаження на CPU у коді розподілу блоків у реальному часі. Забезпечено можливість одночасного виконання операцій читання та FICLONE.
    • Код EXT2 переведено використання фоліантів сторінок пам'яті (page folios).
  • Пам'ять та системні сервіси
    • Припинено підтримку архітектури ia64, що застосовується в процесорах Intel Itanium, продаж яких повністю припинено в 2021 році. Процесори Itanium були представлені компанією Intel у 2001 році, але архітектура ia64 не витримала конкуренції з AMD64, головним чином через більш високу продуктивність AMD64 і гладкіший переход з 32-розрядних процесорів x86. У підсумку інтереси Intel змістилися на користь процесорів x86-64, а долею Itanium залишалися сервери HP Integrity, прийом замовлень на які було припинено три роки тому. Код підтримки ia64 видалено з ядра в основному через тривалу відсутність супроводу даної платформи, при цьому Лінус Торвальдс висловив готовність повернути підтримку ia64 в ядро, але тільки якщо знайдеться супроводжуючий, який продемонструє якісний супровід даної платформи поза основним ядром як мінімум протягом року .
    • Доданий параметр командою рядка ядра «ia32_emulation», що дозволяє на стадії завантаження включати та вимикати підтримку емуляції 32-розрядного режиму в ядрах, зібраних для архітектури x86-64. З практичного боку новий параметр дозволяє збирати ядро ​​з підтримкою сумісності з 32-розрядними програмами, але за замовчуванням відключати цей режим для зниження вектора атаки на ядро, оскільки API для забезпечення сумісності менш протестовано, ніж основні інтерфейси ядра.
    • Продовжено перенесення змін з гілки Rust-for-Linux, пов'язаних з використанням мови Rust як другої мови для розробки драйверів та модулів ядра (підтримка Rust не активна за умовчанням, і не призводить до включення Rust до обов'язкових складальних залежностей до ядра). У новій версії здійснено перехід на використання випуску Rust 1.73 та запропоновано набір прив'язок для роботи з робочими чергами (workqueues).
    • Надано можливість використання механізму binfmt_misc для додавання підтримки нових форматів виконуваних файлів (наприклад, для запуску скомпілованих програм Java або Python) всередині окремих непривілейованих просторів імен (namespace).
    • У cgroup-контролері cpuset, що дозволяє керувати задіянням ядер CPU при виконанні завдання, забезпечено поділ на локальне та віддалене секціонування (remote partition), які відрізняються тим, чи є батьківський cgroup коректною кореневою секцією чи ні. У cpuset також додані нові налаштування cpuset.cpus.exclusive та cpuset.cpus.excluisve.effective для ексклюзивної прив'язки до CPU.
    • У підсистемі BPF реалізовано підтримку винятків, які обробляються як невідкладний вихід із BPF-програми з можливістю безпечного розкручування кадрів стека. Крім того, у BPF-програмах дозволено використання покажчиків kptr у прив'язці до CPU.
    • У підсистему io_uring додано підтримку операцій з futex-ами, а також реалізовано нові операції: IORING_OP_WAITID (асинхронна версія waitid), SOCKET_URING_OP_GETSOCKOPT (варіант getsockoptand), SOCKET_URING_OP_SETSOCKOPT (варіант sets читання, які не припиняються доки є дані або не заповнений буфер).
    • Додано реалізацію легковажних однозв'язних FIFO-черг, що вимагають спін-блокування тільки для видалення з черги в контексті процесу і без спин-блокування для атомарного додавання в чергу в будь-якому контексті.
    • Доданий кільцевий буфер «objpool» з масштабованою реалізацією високопродуктивної черги для виділення та повернення об'єктів.
    • Додано початкову частину змін для реалізації нового API futex2, який відрізняється більш високою продуктивністю на NUMA-системах, підтримує розміри, відмінні від 32 біт, і може використовуватися замість мультиплексованого системного виклику futex().
    • Для архітектур ARM32 та S390x додано підтримку актуального набору (cpuv4) інструкцій BPF.
    • Для архітектури RISC-V реалізовано можливість використання доступного в Clang 17 режиму перевірки Shadow-Call Stack, призначеного для захисту від перезапису адреси повернення з функції у разі переповнення буфера в стеку. Суть захисту у збереженні після передачі керування функцією адреси повернення в окремому «тіньовому» стеку та вийманні цієї адреси перед виходом з функції.
    • До механізму злиття ідентичних сторінок пам'яті (KSM: Kernel Samepage Merging) додано новий розумний режим сканування сторінок пам'яті, який відстежує невдало відскановані сторінки та знижує інтенсивність їх повторного сканування. Для ввімкнення нового режиму додано налаштування /sys/kernel/mm/ksm/smart_scan.
    • Додана нова ioctl-команда PAGEMAP_SCAN, яка при використанні з userfaultfd() дозволяє визначати факти запису в певний діапазон пам'яті. Нова можливість, наприклад, може використовуватися в системі для збереження та відновлення стану процесів CRIU або ігрових античит-системах.
    • У складальній системі за наявності компілятора Clang за замовчуванням включено складання прикладів використання підсистеми perf, написаних у вигляді BPF-програм.
    • Видалено старий шар videobuf, що використовувався для управління фреймвбуферами в медіапідсистемі і більше 10 років тому замінений на нову реалізацію videobuf2.
  • Віртуалізація та безпека
    • У підсистему fscrypt додано можливість шифрування даних блоками, розміром меншим, ніж розмір блоку у файловій системі. Подібне може знадобитися для використання апаратних механізмів шифрування, що підтримують лише невеликі блоки (наприклад, контролери UFS, що підтримують тільки розмір блоку 4096, зможуть використовуватися з ФС з розміром блоку 16K).
    • У підсистему «iommufd», що дозволяє керувати таблицями сторінок пам'яті введення/виведення IOMMU (I/O Memory-Management Unit) через файлові дескриптори з простору користувача, додано відстеження даних, що ще не скинуті з кешу (dirty), для операцій DMA, що необхідно для визначення пам'яті з непомітними даними при міграції процесів.
    • У механізм Landlock, що дозволяє обмежити взаємодію групи процесів із зовнішнім оточенням, додано підтримку визначення правил керування доступом до TCP-сокетів. Наприклад, можна створити правило, яке дозволяє лише звернення по мережному порту 443 для встановлення HTTPS-з'єднань.
    • У підсистему AppArmor додано можливість керування доступом до механізму io_uring та створення просторів імен ідентифікаторів користувача (user namespaces), що дозволяє вибірково дозволяти доступ до даних можливостей лише певним процесам.
    • Додано API атестації віртуальних машин для підтвердження цілісності процесу їхнього завантаження.
    • На системах LoongArch реалізовано підтримку віртуалізації з використанням гіпервізора KVM.
    • При використанні гіпервізора KVM на системах RISC-V з'явилася підтримка розширення Smstateen, що блокує звернення віртуальної машини до регістрів CPU, які не підтримуються гіпервізором. Також додано підтримку використання в гостьових системах розширення Zicond, що дозволяє використовувати деякі умовні цілочисельні операції.
    • У гостьових системах, що виконуються під управлінням KVM, на базі архітектури x86 дозволено використання до 4096 віртуальних CPU.
  • Мережева підсистема
    • У драйвер NVMe-TCP (NVMe over TCP), що дозволяє звертатися до NVMe-накопичувачів мережі (NVM Express over Fabrics), використовуючи протокол TCP, додана підтримка шифрування каналу передачі з використанням TLS (використовується KTLS і фоновий процес у просторі користувача tlshd для узгодження з'єднання).
    • Проведено оптимізацію продуктивності планувальника пакетів fq (Fair Queuing), що дозволило підняти пропускну здатність на 5% при великих навантаженнях у тесті tcp_rr (TCP Request/Response) та на 13% при необмеженому потоці UDP-пакетів.
    • У протокол TCP додано опціональну можливість використання тимчасових міток (TCP TS) з мікросекундною точністю (RFC 7323), що дозволяє більш точно оцінювати затримки та створювати більш просунуті модулі управління навантаженням. Для включення можна використовувати команду "ip route add 10/8... features tcp_usec_ts".
    • У TCP-стек додано підтримку розширення TCP-AO (TCP Authentication Option, RFC 5925), яке дає можливість верифікувати TCP-заголовки за MAC-кодами (Message Authentication Code), використовуючи більш сучасні алгоритми HMAC-SHA1 і CMAC-AES-128 раніше доступною опції TCP-MD5 з урахуванням застарілого алгоритму MD5.
    • Додано новий тип віртуальних мережевих пристроїв "netkit", логіка передачі даних у яких задається за допомогою BPF-програми.
    • У KSMBD, що працює на рівні ядра реалізацію SMB-сервера, додано підтримку перетворення імен файлів, що містять сурогатні пари складових символів.
    • У NFS покращено реалізацію потоків з RPC-сервісами. Додано підтримку делегування запису (для NFSv4.1+). У NFSD додано підтримку netlink-обробника rpc_status. Покращена підтримка клієнтів NFSv4.x при повторному експортуванні до knfsd.
  • Обладнання
    • У модуль ядра Nouveau додано початкову підтримку прошивок GSP-RM, які використовуються в GPU NVIDIA RTX 20+ для винесення операцій ініціалізації та керування GPU на бік окремого мікроконтролера GSP (GPU System Processor). Підтримка GSP-RM дозволяє драйверу Nouveau працювати через звернення до прошивки замість прямого програмування операцій взаємодії з обладнанням, що значно спрощує додавання підтримки нових GPU NVIDIA завдяки використанню вже готових викликів для ініціалізації та управління енергоспоживанням.
    • У драйвері AMDGPU реалізовано підтримку GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 та DML2. Покращена підтримка безшовного завантаження (без мерехтіння при перемиканні відео).
    • У драйвері i915 реалізовано підтримку чіпів Intel Meteor Lake та додано початкову реалізацію Intel LunarLake (Xe 2).
    • Додано підтримку асиметричних каналів передачі, доданих у специфікації USB4 v2 (120/40G).
    • Додано підтримку ARM SoC: Qualcomm Snapdragon 720G (застосовується в смартфонах Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (застосовується в маршрутизаторах та NAS).
    • Додано підтримку смартфона Fairphone 5 та ARM-плат Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkid.
    • Додано підтримку RISC-V плат Milk-V Pioneer та Milk-V Duo.
    • Додано підтримку звукових інтерфейсів ноутбуків HUAWEI, що поставляються з CPU AMD. Додано підтримку додаткових гучномовців, що встановлюються на ноутбуки Dell Oasis 13/14/16. Додано підтримку вбудованих гучномовців ASUS K6500ZC. Додано підтримку індикатора відключення звуку на ноутбуках HP 255 G8 і G10. Додано підтримку звукових драйверів acp6.3. Додано підтримку професійних інтерфейсів звукозапису Focusrite Clarett+ 2Pre та 4Pre.

Одночасно латиноамериканський Фонд вільного програмного забезпечення сформував варіант повністю вільного ядра 6.7 — Linux-libre 6.7-gnu, очищеного від елементів прошивок та драйверів, що містять невільні компоненти або ділянки коду, сфера застосування яких обмежена виробником. У випуску 6.7 оновлено код чищення блобів у різних драйверах і підсистемах, наприклад, драйверах amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs і btqca. Видалено код чищення драйверів localtalk і rtl8192u через їх виключення зі складу ядра. Прибрано зайві компоненти чищення драйверів xhci-pci, rtl8xxxu та rtw8822b, раніше додані помилково. Проведено чищення імен блобів у dts-файлах для архітектури Aarch64. Видалено блоби в нових драйверах mt7925, tps6598x, aw87390 та aw88399.

Джерело: opennet.ru

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