Реліз ядра Linux 5.14

Після двох місяців розробки Лінус Торвальдс представив реліз ядра Linux 5.14. Серед найбільш помітних змін: нові системні виклики quotactl_fd() та memfd_secret(), видалення драйверів ide і raw, новий контролер пріоритетів вводу/виводу для cgroup, режим планування задач SCHED_CORE, інфраструктура для створення завантажувачів верифікованих програм BPF.

У нову версію прийнято 15883 виправлень від 2002 розробників, розмір патчу - 69 МБ (зміни торкнулися 12580 файлів, додано 861501 рядків коду, видалено 321654 рядків). Близько 47% всіх представлених у 5.14 змін пов'язані з драйверами пристроїв, приблизно 14% змін стосуються оновлення коду, специфічного для апаратних архітектур, 13% пов'язано з мережевим стеком, 3% — з файловими системами і 3% з внутрішніми підсистемами ядра.

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

  • Дискова підсистема, введення/виведення та файлові системи
    • Для cgroup реалізований новий контролер пріоритезації вводу/виводу - rq-qos, який може керувати пріоритетом обробки запитів до блокових пристроїв, що генеруються учасниками кожної cgroup. Підтримка нового контролера пріоритету додана до планувальника вводу/виводу mq-deadline.
    • У файловій системі ext4 реалізована нова ioctl-команда EXT4_IOC_CHECKPOINT, що примусово скидає на диск усі очікувані транзакції з журналу та пов'язані з ними буфери, а також перезаписує область, що використовується журналом, у сховище. Зміна підготовлена ​​в рамках ініціативи щодо запобігання витоку інформації з файлових систем.
    • У Btrfs внесено оптимізацію продуктивності: за рахунок виключення зайвого журналування розширених атрибутів у процесі виконання fsync продуктивність інтенсивних операцій з розширеними атрибутами збільшилася до 17%. Крім того, при виконанні операцій усічення, що не торкаються екстентів, відключено виконання повної синхронізації, що скоротило час виконання операції на 12%. У sysfs додано налаштування обмеження пропускної спроможності вводу/вывода під час перевірки ФС. Додані ioctl-дзвінки для скасування операцій зміни розміру та видалення пристрою.
    • У XFS перероблено реалізацію буферного кешу, який переведено на виділення сторінок пам'яті в пакетному режимі. Підвищено ефективність роботи кешу.
    • У F2FS додано опцію для роботи в режимі тільки для читання та реалізовано режим кешування стислих блоків (compress_cache) для підвищення продуктивності випадкового читання. Реалізовано підтримку стиснення файлів, відбитих на згадку з допомогою операції mmap(). Для вибіркового відключення стиснення файлів за маскою запропоновано нову опцію монтування nocompress.
    • У драйвері exFAT проведено роботу з покращення сумісності зі сховищами деяких цифрових камер.
    • Додано системний виклик quotactl_fd(), який дозволяє керувати квотами не через файл спеціального пристрою, а через вказівку файлового дескриптора, пов'язаного з файловою системою, для якої застосовується квота.
    • З ядра видалено старі драйвери для блокових пристроїв з інтерфейсом IDE, на зміну яким вже давно прийшла підсистема libata.
    • З ядра видалено драйвер "raw", що надає небуферизований доступ до блокових пристроїв через інтерфейс /dev/raw. Зазначена функціональність давно реалізується у додатках за допомогою прапора O_DIRECT.
  • Пам'ять та системні сервіси
    • У планувальнику завдань реалізовано новий режим планування SCHED_CORE, що дозволяє керувати тим, які процеси можуть виконуватися спільно на одному ядрі CPU. Кожному процесу може бути призначений cookie-індентифікатор, який визначає область довіри між процесами (наприклад, належність одного користувача або контейнера). При організації виконання коду планувальник може забезпечити спільне використання одного ядра CPU тільки для процесів, пов'язаних з одним власником, що може використовуватися для блокування деяких атак класу Spectre за рахунок запобігання виконання в одному потоці SMT (Hyper Threading) довірчих і не заслуговують на довіру завдань.
    • Для cgroup реалізована підтримка операції kill, що дозволяє разом завершити всі прив'язані до групи процеси (надіслати SIGKILL), через запис «1» у віртуальний файл cgroup.kill.
    • Розширено можливості, пов'язані з реагуванням на виявлення розщеплених блокувань (split lock), що виникають при доступі до невирівняних даних у пам'яті через те, що при виконанні атомарної інструкції дані перетинають дві лінії кеша CPU. Подібні блокування призводять до значного падіння продуктивності, тому раніше яром надавалася можливість примусового завершення програми, що викликала блокування. У новому випуску доданий параметр командного рядка ядра split_lock_detect = ratelimit: N, що дозволяє визначити загальносистемний ліміт інтенсивності операцій блокування в секунду, після перевищення якого будь-який процес, що став джерелом розщепленого блокування, замість завершення буде припинено на 20 мс.
    • У cgroup-контролері пропускної спроможності CFS (CFS bandwidth controller), що визначає як багато процесорного часу можна виділити кожній cgroup, реалізована можливість визначення лімітів, обмежених заданим часом дії, що дозволяє краще регулювати навантаження, чутливі до затримок. Наприклад, встановлення значення cpu.cfs_quota_us у 50000 і cpu.cfs_period_us у 100000 дасть можливість групі процесів кожні 100ms витрачати 50ms часу CPU.
    • Додана початкова інфраструктура для створення завантажувачів BPF-програм, яка надалі дозволить дозволити завантаження тільки BPF-програм, підписаних цифровим ключем, що заслуговує на довіру.
    • Додано нову futex-операцію FUTEX_LOCK_PI2, яка використовує монотонний таймер для розрахунку таймууту, який враховує час, проведений системою в сплячому режимі.
    • Для архітектури RISC-V реалізовано підтримку великих сторінок пам'яті (Transparent Huge-Pages) та можливість застосування механізму KFENCE для виявлення помилок при роботі з пам'яттю.
    • У системний виклик madvise(), що надає засоби для оптимізації керування пам'яттю процесу, додані прапори MADV_POPULATE_READ та MADV_POPULATE_WRITE для генерації «page fault» у всіх сторінках пам'яті, відображених для операцій читання або запису без виконання фактичного читання або запису (pref. Застосування прапорів може бути корисним для зниження затримок у процесі роботи програми завдяки попереджувальному виконанню обробника «page fault» разом для всіх невиділених сторінок, не чекаючи фактичного звернення до них.
    • У системі unit-тестування kunit додано підтримку запуску тестів в оточенні QEMU.
    • Додані нові трасувальники: «osnoise» для відстеження затримок у додатках, викликаних обробкою переривань, та «timerlat» для виведення детальної інформації про затримки під час пробудження за сигналом таймера.
  • Віртуалізація та безпека
    • Додано системний виклик memfd_secret(), що дозволяє створити приватну область пам'яті в ізольованому просторі адрес, видиму лише процесу-власнику, яка не відображається в інші процеси і безпосередньо недоступне ядру.
    • У системі фільтрації системних викликів seccomp при виносі обробників блокування в простір користувача надано можливість використання однієї атомарної операції для створення файлового дескриптора для завдання, що ізолюється, і його повернення при обробці системного виклику. Запропонована операція вирішує проблему з перериванням оброблювача у просторі користувача під час надходження сигналу.
    • Додано новий механізм для керування обмеженням ресурсів у просторі імен ідентифікаторів користувачів, який прив'язує окремі лічильники rlimit до користувача у user namespace. Зміна вирішує проблему із застосуванням загальних лічильників ресурсів під час запуску одним користувачем процесів у різних контейнерах.
    • У гіпервізор KVM для систем ARM64 додано можливість використання в гостьових системах розширення MTE (MemTag, Memory Tagging Extension), що дозволяє прив'язати теги до кожної операції виділення пам'яті та організувати перевірку коректності використання покажчиків для блокування експлуатації вразливостей, викликаних зверненням до вже звільнених блоків. буфера, зверненнями до ініціалізації та використанням поза поточним контекстом.
    • Засоби для автентифікації покажчиків (Pointer Authentication), що надаються платформою ARM64, тепер можуть бути окремо налаштовані для ядра і простору користувача. Технологія дозволяє використовувати спеціалізовані інструкції ARM64 для перевірки адрес повернення за допомогою цифрових підписів, які зберігаються в верхніх бітах самого покажчика, що не використовуються.
    • У User-mode Linux додано підтримку використання драйверів до PCI-пристроїв з віртуальною шиною PCI, що реалізується драйвером PCI-over-virtio.
    • Для систем x86 додано підтримку паравірталізованого пристрою virtio-iommu, що дозволяє відправляти IOMMU-запити, такі як ATTACH, DETACH, MAP та UNMAP, поверх транспорту virtio без емуляції таблиць сторінок пам'яті.
    • Для CPU Intel, починаючи з сімейства Skylake і закінчуючи Coffee Lake, за замовчуванням відключено використання розширень Intel TSX (Transactional Synchronization Extensions), що надають засоби для підвищення продуктивності додатків за рахунок динамічного виключення зайвих операцій синхронізації. Розширення відключені через можливість здійснення атак Zombieload, що маніпулюють витоком відомостей по сторонніх каналах, що виникає при роботі механізму асинхронного переривання операцій (TAA, TSX Asynchronous Abort).
  • Мережева підсистема
    • Продовжено інтеграцію в ядро ​​MPTCP (MultiPath TCP), розширення протоколу TCP для організації роботи TCP-з'єднання з доставкою пакетів одночасно по кількох маршрутах через різні мережеві інтерфейси, прив'язані до різних IP-адрес. У новому випуску доданий механізм для завдання власних політик хешування трафіку для IPv4 і IPv6 (multipath hash policy), що дають можливість із простору користувача визначати, які з полів у пакетах, у тому числі інкапсульованих, будуть використані при обчисленні хешу, що визначає вибір шляху для пакета .
    • У віртуальний транспорт virtio додано підтримку сокетів SOCK_SEQPACKET (упорядкована та надійна передача датаграм).
    • Розширені можливості механізму сокетів SO_REUSEPORT, який дозволяє відразу кільком слухаючим сокетам підключитися до одного порту для прийому з'єднань з розподілом запитів, що надходять одночасно по всіх підключених через SO_REUSEPORT сокетах, що спрощує створення багатопоточних серверних додатків. У новій версії додані засоби для передачі керування іншому сокету у разі збою при обробці запиту спочатку обраним сокетом (вирішує проблему із втратою окремих з'єднань під час перезапуску сервісів).
  • Обладнання
    • У драйвері amdgpu реалізована підтримка нових серій GPU AMD Radeon RX 6000, що розвиваються під кодовими іменами "Beige Goby" (Navi 24) і "Yellow Carp", а також покращена підтримка GPU Aldebaran (gfx90a) та APU Van Gogh. Додано можливість одночасної роботи з кількома панелями eDP. Для APU Renoir реалізовано підтримку роботи з шифрованими буферами у відеопам'яті (TMZ, Trusted Memory Zone). Додано підтримку гарячого вилучення графічних карт (hot-unplug). Для GPU Radeon RX 6000 (Navi 2x) та старих GPU AMD включена за промовчанням підтримка механізму енергозбереження ASPM (Active State Power Management), який раніше був активований тільки для GPU Navi 1x, Vega та Polaris.
    • Для чіпів AMD додано підтримку віртуальної пам'яті (SVM, shared virtual memory) на базі підсистеми HMM (Heterogeneous memory management), що дозволяє використовувати пристрої з власними блоками управління пам'яттю (MMU, memory management unit), які можуть отримувати доступ до основної пам'яті. У тому числі, за допомогою HMM можна організувати спільний адресний простір між GPU і CPU, в якому GPU може отримати доступ до основної пам'яті процесу.
    • Додана початкова підтримка технології AMD Smart Shift, що динамічно змінює параметри енергоспоживання CPU та GPU на ноутбуках з чіпсетом та відеокартою AMD для форсування продуктивності при іграх, редагуванні відео та 3D-рендерингу.
    • У драйвері i915 для відеокарт Intel включено підтримку чіпів Intel Alderlake P.
    • Додано драйвер drm/hyperv для віртуального графічного адаптера Hyper-V.
    • Додано підтримку комп'ютера-моноблоку Raspberry Pi 400.
    • Доданий драйвер dell-wmi-privacy для підтримки апаратних вимикачів камери та мікрофона, що постачаються в ноутбуках Dell.
    • Для ноутбуків Lenovo доданий WMI-інтерфейс для зміни параметрів BIOS через sysfs /sys/class/firmware-attributes/.
    • Розширено підтримку пристроїв з інтерфейсом USB4.
    • Додано підтримку звукових карт та кодеків AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 та Texas Instruments TAS2505. Покращено підтримку звуку на ноутбуках HP і ASUS. Перед початком відтворення звуку на пристроях з інтерфейсом USB додані патчі для зниження затримок.

Джерело: opennet.ru

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