Реліз ядра Linux 5.2

Після двох місяців розробки Лінус Торвальдс представив реліз ядра Linux 5.2. Серед найбільш помітних змін: режим роботи Ext4 без урахування регістру символів, роздільні системні виклики для монтування ФС, драйвери для GPU Mali 4xx/6xx/7xx, можливість обробки змін значень sysctl у програмах BPF, device-mapper модуль dm-dust, захист від атак MDS, підтримка Sound Open Firmware для DSP, оптимізація продуктивності BFQ, доведення підсистеми PSI (Pressure Stall Information) до можливості використання Android.

У нову версію прийнято 15100 виправлень від 1882 розробників,
розмір патча - 62 Мб (зміни торкнулися 30889 файлів, додано 625094 рядків коду, видалено 531864 рядків). Близько 45% всіх представлених у 5.2
змін пов'язані з драйверами пристроїв, приблизно 21% змін мають
ставлення до оновлення коду специфічного для апаратних архітектур, 12%
пов'язано з мережевим стеком, 3% - файловими системами та 3% з внутрішніми
підсистемами ядра. 12.4% всіх змін підготовлено компанією Intel, 6.3% – Red Hat, 5.4% – Google, 4.0% – AMD, 3.1% – SUSE, 3% – IBM, 2.7% – Huawei, 2.7% – Linaro, 2.2% – ARM, 1.6 % - Oracle.

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

  • Дискова підсистема, введення/виведення та файлові системи
    • Для Ext4 додано підтримка роботи без відмінності регістру символів в іменах файлів, яка активується лише у прив'язці до окремих порожніх каталогів за допомогою нового атрибута + F (EXT4_CASEFOLD_FL). При встановленні даного атрибуту на каталог усі операції з файлами та підкаталогами всередині будуть здійснюватися без урахування регістру символів, у тому числі регістр буде ігноруватися під час операцій пошуку та відкриття файлів (наприклад, файли Test.txt, test.txt і test.TXT у подібних каталогах будуть вважатися однаковими). За замовчуванням ФС продовжує бути реєстрозалежною, за винятком каталогів з атрибутом «chattr + F»;
    • Уніфіковано функції обробки символів UTF-8 в іменах файлів, які застосовуються під час операцій порівняння та нормалізації рядків;
    • У XFS додана інфраструктура для відстеження стану файлової системи та новий ioctl для запиту статусу працездатності. Реалізовано експериментальну можливість для перевірки на льоту (online scrub) лічильників суперблоку.
    • Додано новий модуль device-mapper «dm-dust«, що дозволяє симулювати появу bad-блоків на носії чи помилок під час читання з диска. Модуль дозволяє спростити налагодження та тестування додатків та різних систем зберігання в умовах можливої ​​появи збоїв;
    • Проведено значна оптимізація продуктивності планувальника вводу/виводу BFQ. В умовах високого навантаження на введення/виведення внесені оптимізації дозволяють до 80% скоротити час таких операцій, як запуск програм;
    • Додано серію системних викликів для монтування файлових систем: fsopen(), open_tree(), fspick(), fsmount(), fsconfig() и move_mount(). Дані системні виклики дозволяють окремо обробити різні стадії монтування (обробити суперблок, отримати інформацію про ФС, примонтувати, прикріпити до точки монтування), які раніше виконувались за допомогою загального системного виклику mount(). Роздільні дзвінки дають можливість виконувати більш складні сценарії монтування та окремо виконувати такі операції, як переналаштування суперблоку, включення опцій, зміна точки монтування та перенесення в інший простір імен. Крім того, роздільна обробка дозволяє точно визначати причини виведення кодів помилок та задавати кілька джерел для багатошарових ФС, таких як overlayfs;
    • В інтерфейс для асинхронного введення/виведення io_uring додано нову операцію IORING_OP_SYNC_FILE_RANGE, яка виконує дії, еквівалентні системному виклику sync_file_range(), а також реалізовано можливість реєстрації eventfd з io_uring та отримання повідомлень про завершення операцій;
    • Для файлової системи CIFS додано ioctl FIEMAP, що забезпечує ефективне зіставлення екстентів, а також підтримка режимів SEEK_DATA та SEEK_HOLE;
    • У підсистемі FUSE запропонований API для керування кешуванням даних;
    • У Btrfs проведено оптимізацію реалізації qgroups і підвищено швидкість виконання fsync для файлів з кількома жорсткими посиланнями. Поліпшено код перевірки цілісності даних, який тепер враховує можливе пошкодження інформації в ОЗП перед скиданням даних на диск;
    • У CEPH додано підтримку експорту снапшотів через NFS;
    • Покращена реалізація монтування NFSv4 в режимі «soft» (при виникненні помилки доступу до сервера в режимі «soft» виклик відразу повертає код помилки, а в режимі «hard» керування не віддається до відновлення доступності ФС або таймууту). У новому випуску забезпечено більш точну обробку таймауту, прискорено відновлення після збою та додано нову опцію монтування «softerr», що дозволяє змінити код помилки (ETIMEDOUT), що повертається при настанні таймауту;
    • В API nfsdcld, призначеному для відстеження стану клієнтів NFS, забезпечена можливість коректного відстеження сервером NFS стану клієнта при перезавантаженні. Таким чином, демон nfsdcld тепер може виконувати роль обробника nfsdcltrack;
    • Для AFS додано емуляція блокувань дапазонів байт у файлах (Byte Range Locking);
  • Віртуалізація та безпека
    • Проведено роботу з усунення місць в ядрі, що допускають виконання коду з доступних на запис відбитих областей пам'яті, що дозволяє блокувати потенційні проломи, які можуть бути експлуатовані при атаці;
    • Додано новий параметр командного рядка ядра «mitigations=», що надає спрощений спосіб управління включенням тих чи інших технік захисту від уразливостей, пов'язаних зі спекулятивним виконанням інструкцій CPU. Передача «mitigations=off» вимикає всі наявні методи, а режим «mitigations=auto», що застосовується за умовчанням, включає захист, але не впливає на використання Hyper Threading. Режим "mitigations = auto, nosmt" додатково вимикає Hyper Threading, якщо цього вимагає метод захисту.
    • Додана підтримка електронного цифрового підпису за ГОСТ Р 34.10-2012 (RFC 7091, ISO/IEC 14888-3), розроблена Віталієм Чікуновим із «Базальт СПО». У вбудовану реалізацію TLS додано підтримку AES128-CCM. У модуль crypto_simd додано підтримку алгоритмів AEAD;
    • У Kconfig додано окрема секція "kernel hardening" з опціями для посилення захисту ядра. В даний час в новій секції поки що зібрані тільки налаштування для включення підсилюючих перевірки GCC-плагінів;
    • Код ядра майже позбавлений від безперервних виразів case у switch (без return або break після кожного блоку case). Залишилося виправити 32 з 2311 випадку подібного використання switch, після чого при складанні ядра можна буде застосовувати режим "-Wimplicit-fallthrough";
    • Для архітектури PowerPC реалізовано підтримку апаратних механізмів обмеження небажаних шляхів доступу ядра до даних у просторі користувача;
    • Доданий код для блокування атак класу MDS (Microarchitectural Data Sampling) у процесорах Intel. Перевірити схильність системи вразливості можна через SysFS-змінну "/sys/devices/system/cpu/vulnerabilities/mds". Доступно два режими захисту: повний, що вимагає наявності оновленого мікрокоду, та обхідний, який повністю не гарантує очищення буферів CPU під час передачі управління в простір користувача або гостьової системи. Для керування режимами захисту в ядро ​​доданий параметр "mds=", який може приймати значення "full", "full, nosmt" (+ відключення Hyper-Threads) та "off";
    • На системах x86-64 для IRQ, механізмів налагодження та обробників виключень додано захист «stack guard-page», суть якого у підстановці на кордоні зі стеком сторінок пам'яті, звернення до яких призводить до генерації виключення (page-fault);
    • Додано sysctl-налаштування vm.unprivileged_userfaultfd, що управляє можливістю використання системного виклику userfaultfd() непривілейованими процесами;
  • Мережева підсистема
    • Додана підтримка шлюзів IPv6 для маршрутів IPv4. Наприклад, тепер можна вказувати правила маршрутизації виду ip ro add 172.16.1.0/24 via inet6 2001:db8::1 dev eth0;
    • Для ICMPv6 реалізовані ioctl-дзвінки icmp_echo_ignore_anycast та icmp_echo_ignore_multicast для ігнорування ICMP ECHO для anycast та
      Multicast адрес. Додана можливість обмеження інтенсивності обробки пакетів ICMPv6;

    • Для mesh-протоколу BATMAN («Better Approach To Mobile Adhoc Networking), що дозволяє створювати децентралізовані мережі, кожен вузол у яких пов'язаний через сусідні вузли, додано підтримка трансляції з multicast в unicast, і навіть можливість управління через sysfs;
    • В ethtool доданий новий параметр Fast Link Down, що дозволяє скоротити час надходження інформації про подію відключення лінка для 1000BaseT (за звичайних умов затримка становить до 750ms);
    • з'явилася можливість прив'язки тунелів Foo-Over-UDP до певної адреси, мережного інтерфейсу або сокету (раніше прив'язка проводилася тільки за загальною маскою);
    • У бездротовому стеку забезпечено можливість реалізації обробників
      OWE (Opportunistic Wireless Encryption) у просторі користувача;

    • У Netfilter в ланцюжку nat додано підтримку сімейства адрес inet (наприклад, тепер можна використовувати одне правило трансляції для обробки ipv4 і ipv6, без поділу правил для ipv4 і ipv6);
    • У netlink доданий режим strict для жорсткої перевірки коректності всіх повідомлень та атрибутів, у якому не допускається перевищення очікуваного розміру атрибутів та заборонено додавання додаткових даних наприкінці повідомлень;
  • Пам'ять та системні сервіси
    • У системний виклик clone() доданий прапор CLONE_PIDFD, при вказівці якого батьківському процесу повертається файловий дескриптор «pidfd», ототожнений зі створеним дочірнім процесом. Даний файловий дескриптор, наприклад, можна використовувати для відправки сигналів без побоювання зіткнутися зі станом гонки (відразу після відправки сигналу цільової PID може бути звільнений через завершення роботи процесу та зайнятий іншим процесом);
    • Для другої версії cgroups додано функціональність контролера freezer, за допомогою якого можна зупинити роботу в cgroup і тимчасово вивільнити деякі ресурси (CPU, введення/виведення та потенційно навіть пам'ять) для виконання інших завдань. Управління здійснюється через керуючі файли cgroup.freeze та cgroup.events у дереві cgroup. Запис 1 у cgroup.freeze заморожує процеси в поточному cgroup та всіх дочірніх групах. Так як заморозка вимагає деякого часу, додатково запропоновано файл cgroup.events, через який можна дізнатися про завершення операції;
    • Забезпечено експорт атрибутів пам'яті, прикріпленої до кожного вузла sysfs, що дозволяє з простору користувача визначити характер обробки банків пам'яті в системах з гетерогенною пам'яттю;
    • Доопрацьовано підсистему PSI (Pressure Stall Information), яка дозволяє проаналізувати інформацію про час очікування отримання різних ресурсів (CPU, пам'ять, введення/виведення) для певних завдань або наборів процесів у cgroup. За допомогою PSI обробники у просторі користувача можуть більш точно оцінити рівень завантаженості системи та характер уповільнення роботи порівняно з Load Average. У новій версії забезпечено підтримку налаштування порогів чутливості та можливість використовувати виклик poll() для отримання повідомлення про спрацювання встановлених порогових значень за певний проміжок часу. Дана можливість дозволяє організувати в Android відстеження нестачі пам'яті на ранній стадії, визначати джерело проблем і завершувати неважливі програми, не доводячи до появи помітних проблем користувача. При стрес-тестуванні засоби моніторингу споживання пам'яті на основі PSI продемонстрували з 10 разів менше помилкових спрацьовувань порівняно зі статистикою vmpressure;
    • Проведено оптимізацію коду для перевірки BPF-програм, який для великих програм почав виконувати перевірку до 20 разів швидше. Оптимізація дозволила підняти ліміт на розмір BPF-програм із 4096 до мільйона інструкцій;
    • Для BPF-програм надана можливість доступу до глобальних даних, що дозволяє визначати у програмах глобальні змінні та константи;
    • доданий APIщо дозволяє контролювати з BPF-програм зміни параметрів sysctl;
    • Для архітектури MIPS32 реалізовано JIT-компілятор для віртуальної машини eBPF;
    • Для 32-розрядної архітектури PowerPC додано підтримку налагоджувального інструменту KASan (Kernel address sanitizer), що забезпечує виявлення помилок під час роботи з пам'яттю;
    • На системах x86-64 знято обмеження розміщення дампів стану при краху ядра (crash-dump) в областях пам'яті вище 896MB;
    • Для архітектури s390 реалізовано підтримку рандомізації адресного простору ядра (KASLR) та можливість верифікації цифрових підписів при завантаженні ядра через kexec_file_load();
    • Для архітектури PA-RISC додано підтримку відладчика ядра (KGDB), міток переходу та kprobes;
  • Обладнання
    • До складу включено драйвер Ліма для GPU Mali 400/450, що застосовується у багатьох старих чіпах на основі архітектури ARM. Для нових GPU Mali доданий драйвер Panfrost, що підтримує чіпи на базі мікроархітектур Midgard (Mali-T6xx, Mali-T7xx, Mali-T8xx) і Bifrost (Mali G3x, G5x, G7x);
    • Додано підтримку звукових пристроїв, які використовують відкриті прошивки Звук Відкрита прошивка (SOF). Незважаючи на наявність відкритих драйверів, код прошивок для звукових чіпів досі залишався закритим та поставлявся у бінарному вигляді. Проект Sound Open Firmware розроблений компанією Intel для створення відкритих прошивок для DSP-чіпів, пов'язаних із обробкою звуку (пізніше до розробки також підключився Google). В даний час у рамках проекту вже підготовлено відкриття прошивки для звукових чіпів платформ Intel Baytrail, CherryTrail, Broadwell, ApolloLake, GeminiLake, CannonLake та IceLake;
    • У DRM-драйвері Intel (i915) додано підтримку чіпів
      Elkhartlake (Gen11). Додані PCI-ідентифікатори для чіпів Comet Lake (Gen9). Стабілізовано підтримку чіпів Icelake, для яких також додано додаткові PCI-ідентифікатори пристроїв.
      Увімкнено
      режим асинхронного перемикання між двома буферами у відеопам'яті (async flip) при виконанні операцій запису через mmio, що дозволило помітно підняти продуктивність деяких 3D-додатків (наприклад, продуктивність тесту 3DMark Ice Storm збільшилася на 300-400%). Додана підтримка технології HDCP2.2 (High-bandwidth Digital Content Protection) для шифрування відеосигналу, що передається через HDMI;

    • У драйвер amdgpu для GPU Vega20 додано підтримка RAS (Reliability, Availability, Serviceability) та експериментальна підтримка підсистеми SMU 11, яка прийшла на зміну технології Powerplay. Для GPU Vega12 додано підтримка режиму BACO (Bus Active, Chip Off). Додана початкова підтримка XGMI, високошвидкісної шини (PCIe 4.0) для з'єднання GPU. У драйвер amdkfd додані відсутні ідентифікатори карток на базі GPU Polaris10;
    • У драйвер Nouveau додано підтримку плат на основі чіпсету NVIDIA Turing 117 (TU117, використовується в GeForce GTX 1650). У
      kconfig додано налаштування для відключення застарілих функцій, які вже не використовуються в актуальних випусках libdrm;

    • В API DRM та драйвер amdgpu додано підтримку об'єктів синхронізації «timeline», що дозволяють обійтися без класичних блокувань.
    • З гілки staging в основний склад перенесений драйвер vboxvideo для віртуального GPU VirtualBox;
    • Доданий драйвер aspeed для GFX чіпа SoC ASPEED;
    • Додана підтримка ARM SoC і плат Intel Agilex (SoCFPGA), NXP i.MX8MM, Allwinner (RerVision H3-DVK (H3), Oceanic 5205 5inMFD, Beelink GS2 (H6), Orange Pi 3 (H6)), Rockchip RK3399, Nanopi NEO4, Veyron-Mighty Chromebook), Amlogic: SEI Robotics SEI510,
      ST Micro (stm32mp157a, stm32mp157c), NXP (
      Eckelmann ci4x10 (i.MX6DL),

      i.MX8MM EVK (i.MX8MM),

      ZII i.MX7 RPU2 (i.MX7),

      ZII SPB4 (VF610),

      Zii Ultra (i.MX8M),

      TQ TQMa7S (i.MX7Solo),

      TQ TQMa7D (i.MX7Dual),

      Kobo Aura (i.MX50),

      Menlosystems M53 (i.MX53)), NVIDIA Jetson Nano (Tegra T210).

Одночасно Латиноамериканський Фонд вільного ПЗ сформував
варіант повністю вільного ядра 5.2 - Linux-libre 5.2-gnu, очищеного від елементів прошивок та драйверів, що містять невільні компоненти або ділянки коду, сфера застосування яких обмежена виробником. У новому випуску включено завантаження файлів
Sound Open Firmware. Відключено завантаження блобів у драйверах
mt7615, rtw88, rtw8822b, rtw8822c, btmtksdio, iqs5xx, ishtp та ucsi_ccg. Оновлено код чищення блобів у драйверах та підсистемах ixp4xx, imx-sdma, amdgpu, nouveau та goya, а також у документації до мікрокоду. Припинено чищення блобів у драйвері r8822be через його видалення.

Джерело: opennet.ru

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