Реліз ядра Linux 5.6

Після двох місяців розробки Лінус Торвальдс представив реліз ядра Linux 5.6. Серед найпомітніших змін: інтеграція VPN-інтерфейсу WireGuard, підтримка USB4, простору імен для часу, можливість створення обробників перевантаження TCP за допомогою BPF, початкова підтримка MultiPath TCP, порятунок ядра від проблеми 2038 року, механізм bootconfig, ФС ZoneFS.

У нову версію прийнято 13702 виправлень від 1810 розробників,
розмір патча - 40 Мб (зміни торкнулися 11577 файлів, додано 610012 рядків коду,
видалено 294828 рядків). Близько 45% усіх представлених у 5.6
змін пов'язані з драйверами пристроїв, приблизно 15% змін мають
ставлення до оновлення коду, специфічного для апаратних архітектур, 12%
пов'язано з мережевим стеком, 4% - з файловими системами і 3% з внутрішніми
підсистемами ядра.

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

  • Мережева підсистема
    • Додана реалізація VPN-інтерфейсу WireGuard, який реалізований на основі сучасних методів шифрування (ChaCha20, Poly1305, Curve25519, BLAKE2s), простий у використанні, позбавлений ускладнень, добре зарекомендував себе в ряді великих впроваджень та забезпечує дуже високу продуктивність (у 3,9 разів випереджає OpenVPN за пропускною здатністю). У WireGuard застосовується концепція маршрутизації за ключами шифрування, яка передбачає прив'язку до кожного мережного інтерфейсу закритого ключа та застосування для зв'язування відкритих ключів. Обмін відкритими ключами для встановлення з'єднання здійснюється за аналогією з SSH. Необхідні для роботи WireGuard криптографічні примітиви було перенесені з бібліотеки цинк до складу штатного Crypto API та включені до складу ядра 5.5.
    • Почалася інтеграція компонентів, необхідних підтримки MPTCP (MultiPath TCP), розширення протоколу TCP для організації роботи TCP-з'єднання з доставкою пакетів одночасно з кількох маршрутів через різні мережні інтерфейси, прив'язані до різних IP-адрес. Для мережних додатків подібне агреговане з'єднання виглядає як звичайне з'єднання TCP, а вся логіка поділу потоків виконується силами MPTCP. Multipath TCP може використовуватися як розширення пропускної спроможності, так збільшення надійності. Наприклад, MPTCP можна застосовувати для організації передачі даних на смартфоні з використанням одночасно лінків WiFi та 4G або для скорочення витрат за рахунок підключення сервера з використанням кількох дешевих лінків замість одного дорогого.
    • Додана підтримка дисципліни обробки мережевих черг sch_ets (Enhanced Transmission SelectionIEEE 802.1Qaz), що надає можливість розподілу пропускної спроможності між різними класами трафіку. Якщо навантаження на певний клас трафіку нижче за надану пропускну здатність, то ETS дозволяє іншим класам трафіку використовувати доступну (невикористану) пропускну здатність. Qdisc sch_ets налаштовується як дисципліна PRIO та використовує класи трафіку для визначення суворих та спільно використовуваних обмежень пропускної спроможності. Працює ETS як комбінація дисциплін ПРІО и DRR — за наявності жорстко обмежених класів трафіку використовується PRIO, але якщо у черзі трафіку немає, працює як DRR.
    • Додано новий тип BPF-програм BPF_PROG_TYPE_STRUCT_OPSдозволяє реалізовувати обробники функцій ядра через BPF. В даний час зазначену можливість можна використовувати для реалізації алгоритмів контролю перевантаження TCP у вигляді BPF-програм. В якості прикладу запропонована BPF-програма з реалізацією алгоритму DCTCP.
    • У ядро ​​прийнято зміни, що перекладають інструментарій ettool з ioctl() на використання інтерфейсу netlink. Новий інтерфейс спрощує додавання розширень, покращує обробку помилок, дозволяє надсилати повідомлення при зміні стану, спрощує взаємодію між ядром та простором користувача та скорочує кількість синхронізованих іменованих списків.
    • Додано реалізацію алгоритму управління мережевими чергами FQ-PIE (Flow Queue PIE), націленого на зниження негативного впливу проміжної буферизації пакетів на граничному мережевому обладнанні (bufferbloat). FQ-PIE демонструє високу ефективність використання у системах з кабельними модемами.
  • Дискова підсистема, введення/виведення та файлові системи
    • Для файлової системи Btrfs додано асинхронна реалізація операції DISCARD (позначка звільнених блоків, які можна не зберігати фізично). Спочатку операції DISCARD виконувалися синхронно, що могло призводити до просідання продуктивності через очікування завершення відповідних команд накопичувачами. Асинхронна реалізація дозволяє не чекати завершення DISCARD накопичувачем і виконувати цю операцію на тлі.
    • У XFS проведено чищення коду, в якому використовувалися старі 32-розрядні лічильники часу (тип time_t замінений на time64_t), що призводять до проблеми 2038 року. Усунуто помилки та пошкодження пам'яті, що спливали на 32-розрядних платформах. Перероблено код для роботи з розширеними атрибутами.
    • У файлову систему ext4 внесені оптимізації продуктивності, пов'язані з обробкою блокування inode при операціях читання та запису. Підвищена продуктивність перезапису в режимі прямого введення/виводу (Direct I/O). Для спрощення діагностики проблем забезпечено збереження у суперблоці першого та останнього кодів помилок.
    • У файловій системі F2FS реалізована можливість зберігання даних у стислому вигляді. Для окремого файлу або каталогу стиснення може бути включене за допомогою команди chattr + c file або chattr + c dir; touch dir/file». Для стиснення всього розділу в утиліті mount можна використовувати опцію "-o compress_extension = ext".
    • До складу ядра прийнято файлову систему ZoneFS, що спрощує низькорівневу роботу із зонованими пристроями зберігання. Під зонованими накопичувачами маються на увазі пристрої на жорстких магнітних дисках або NVMe SSD, простір для зберігання в яких розбито на зони, що складають групи блоків або секторів, в які допускається лише послідовне додавання даних з оновленням цілої групи блоків. ФС ZoneFS розроблена компанією Western Digital і пов'язує кожну зону в накопичувачі з окремим файлом, який можна використовуватиме зберігання даних у raw-режимі без маніпуляції лише на рівні секторів і блоків, тобто. дозволяє програмам використовувати файловий API замість прямого звернення до блокового пристрою за допомогою ioctl.
    • NFS за замовчуванням вимкнено монтування розділів поверх UDP. Додано підтримку певної у специфікації NFS 4.2 можливості прямого копіювання файлів між серверами. Додано нову опцію монтування «softreval», яка у разі відмови сервера допускає використання прокешованих значень атрибутів. Наприклад, при вказанні цієї опції після недоступності сервера зберігається можливість переміщення по шляхах в NFS-розділі та звернення до інформації, що осіла в кеші.
    • Проведено оптимізація продуктивності механізму fs-verity, що використовується для контролю цілісності та автентифікації окремих файлів. Підвищена швидкість послідовного читання завдяки застосуванню хеш-дерева Меркла. Оптимізована продуктивність FS_IOC_ENABLE_VERITY в умовах відсутності даних у кеші (застосовано попереджувальне читання сторінок з даними).
  • Віртуалізація та безпека
    • Оголошено застарілою можливість відключення модуля SELinux під час роботи, а в майбутньому вивантаження вже активованого SELinux буде заборонено. Для вимкнення SELinux потрібно передати параметр "selinux=0" у командному рядку ядра.
    • Додана підтримка просторів імен для часу (time namespaces), що дозволяють прив'язати до контейнера стан системного годинника (CLOCK_REALTIME,
      CLOCK_MONOTONIC, CLOCK_BOOTTIME), використовувати в контейнері свій час і при міграції контейнера на інший хост забезпечити незмінність показань CLOCK_MONOTONIC і CLOCK_BOOTTIME (врахувати час після завантаження з урахуванням або без урахування перебування в режимі сну).

    • Видалено блокований пул /dev/random. Поведінка /dev/random наближена до /dev/urandom у плані запобігання блокуванню ентропії після ініціалізації пулу.
    • В основний склад ядра включено драйвер, що дозволяє гостьовим системам, що працюють під керуванням VirtualBox, монтувати каталоги, що експортуються хост-оточенням (VirtualBox Shared Folder).
    • У підсистему BPF додано набір патчів (BPF dispatcher), в умовах застосування механізму Retpoline для захисту від атак класу Spectre V2, що дозволяє підвищити ефективність виклику BPF-програм при настанні прив'язаних до них подій (наприклад, дає можливість прискорити виклик XDP-обробників при надходженні мережного пакета).
    • Доданий драйвер для підтримки вбудованих в APU AMD оточення TEE (Trusted Execution Environment).
  • Пам'ять та системні сервіси
    • BPF додає підтримку глобальних функцій. Розробка ведеться в рамках ініціативи щодо додавання підтримки бібліотек функцій, які можна підключати до програм BPF. Наступним кроком стане підтримка динамічних розширень, які дають змогу завантажувати глобальні функції, у тому числі для заміни існуючих глобальних функцій під час їх використання. У підсистемі BPF також додано підтримку варіанта операції map (використовується для збереження постійних даних), що підтримує виконання в пакетному режимі.
    • Додано пристрій «cpu_cooling», що дозволяє охолоджувати перегрітий CPU шляхом переведення його в стан простою (idle) на короткі проміжки часу.
    • Додано системний виклик openat2(), що пропонує набір додаткових прапорів для обмеження дозволу файлового шляху (заборона перетину точок монтування, символічних посилань, magic-посилань (/proc/PID/fd), компонентів "../").
    • Для різнорідних систем на базі архітектури big.LITTLE, що комбінують в одному чіпі потужні та менш продуктивні енергоефективні ядра CPU, при виконанні завдань реального часу забезпечено виставлення параметра uclamp_min (що з'явився у ядрі 5.3 механізм закріплення навантаження). Зазначений параметр гарантує, що завдання буде розміщено планувальником на ядрі CPU, що має достатньо продуктивності.
    • Ядро позбавлене від проблеми 2038 року. Замінені останні обробники, в яких для лічильника епохального часу використовувався 32-розрядний (signed int) тип time_t, який з урахуванням звіту від 1970 повинен переповнитися в 2038 році.
    • Продовжено вдосконалення інтерфейсу асинхронного введення/виводу io_uring, в якому забезпечено підтримка нових операцій: IORING_OP_FALLOCATE (резервування порожніх областей), IORING_OP_OPENAT,
      IORING_OP_OPENAT2,
      IORING_OP_CLOSE (відкриття та закриття файлів),
      IORING_OP_FILES_UPDATE (додавання та видалення файлів зі списку швидкого доступу),
      IORING_OP_STATX (запит інформації про файл),
      IORING_OP_READ,
      IORING_OP_WRITE (спрощені аналоги IORING_OP_READV та IORING_OP_WRITEV),
      IORING_OP_FADVISE,
      IORING_OP_MADVISE (асинхронні варіанти дзвінків posix_fadvise та madvise), IORING_OP_SEND,
      IORING_OP_RECV (надсилання та прийом мережевих даних),
      IORING_OP_EPOLL_CTL (виконання операцій над файловими дескрипторами epoll).

    • Додано системний виклик pidfd_getfd(), що дозволяє процесу витягти з іншого процесу файловий дескриптор відкритого файлу.
    • Реалізовано механізм "bootconfig", що дозволяє окрім опцій командного рядка визначати параметри роботи ядра через файл із налаштуваннями. Для додавання подібних файлів у образ initramfs запропоновано утиліту bootconfig. Зазначена можливість може застосовуватися, наприклад, для налаштування kprobes під час завантаження.
    • Перероблено механізм очікування запису та читання даних у неіменованих каналах (pipe). Зміна дозволила прискорити виконання таких завдань, як розпаралелена збірка великих проектів. При цьому оптмізація може призвести до стану гонки в GNU make через помилку у випуску 4.2.1, яка усунена у версії 4.3.
    • У prctl() доданий прапор PR_SET_IO_FLUSHER, який може застосовуватися для позначення процесів, що займаються вивільненням пам'яті, для яких не слід застосовувати обмеження ситуації нестачі пам'яті в системі.
    • На основі системи розподілу пам'яті ION, що застосовується в Android, реалізована підсистема dma-buf heaps, що дозволяє керувати виділенням DMA-буферів для спільного використання областей пам'яті драйверами, додатками та різними підсистемами.
  • Апаратні архітектури
    • Додано підтримку розширення E0PD, що з'явилося в ARMv8.5 і дозволяє реалізувати захист від атак, пов'язаних зі спекулятивним виконанням інструкцій у CPU. Захист на базі E0PD призводить до менших витрат, ніж захист KPTI (Kernel Page Table Isolation).
    • Для систем на базі архітектури ARMv8.5 додано підтримку інструкції RNG, що надає доступ до апаратного генератора псевдовипадкових чисел. В ядрі інструкція RNG задіяна для формування ентропії при ініціалізації генератора, що надається ядром, псевдовипадкових чисел.
    • Видалена підтримка розширень MPX (Memory Protection Extensions), додана в ядрі 3.19 і дозволяє організувати перевірку покажчиків щодо дотримання кордонів областей пам'яті. Зазначена технологія не набула поширення в компіляторах і була видалена з GCC.
    • Для архітектури RISC-V реалізовано підтримку налагоджувального інструменту KASan (Kernel address sanitizer), що забезпечує виявлення помилок під час роботи з пам'яттю.
  • Обладнання
    • Реалізовано підтримку специфікації USB 4.0, яка заснована на протоколі Thunderbolt 3 та забезпечує пропускну здатність до 40 Гбіт/с, зберігаючи зворотну сумісність з USB 2.0 та USB 3.2. За аналогією з Удар блискавки інтерфейс USB 4.0 дозволяє тунелювати різні протоколи поверх одного кабелю з роз'ємом Тип-С, включаючи PCIe, Display Port та USB 3.x, а також програмні реалізації протоколів, наприклад, для організації мережевих лінків між хостами. Реалізація заснована на драйвері Thunderbolt, що вже входить в ядро ​​Linux, і адаптує його для роботи з хостами і пристроями, сумісними з USB4. Зміни також додають підтримку пристроїв Thunderbolt 3 до програмної реалізації менеджера з'єднань (Connection Manager), який відповідає за створення тунелів для підключення декількох пристроїв через один роз'єм.
    • У драйвер amdgpu додано початкова підтримка технології захисту від копіювання HDCP 2.x (High-bandwidth Digital Content Protection). Додано підтримку ASIC-чіпа AMD Pollock, заснованого на Raven 2. Реалізовано можливість скидання GPU для сімейств Renoir та Navi.
    • У DRM-драйвер для відеокарт Intel додано підтримка DSI VDSC для чіпів на базі мікроархітектури Ice Lake та Tiger Lake, реалізований LMEM mmap (device local memory), покращено парсинг VBT (Video BIOS Table), реалізовано підтримку HDCP 2.2 для чіпів Coffee Lake.
    • Продовжено роботу з уніфікації коду драйвера amdkfd (для дискретних GPU, таких як Fiji, Tonga, Polaris) з драйвером amdgpu.
    • Перероблено драйвер k10temp, в якому з'явилася підтримка виведення параметрів напруги та сили струму для CPU AMD Zen, а також розширених відомостей з датчиків температури, що застосовуються в CPU Zen та Zen 2.
    • У драйвері nouveau додано підтримка режиму верифікованого завантаження прошивки для GPU NVIDIA на базі мікроархітектури Turing (GeForce RTX 2000), що дозволило включити підтримку 3D-прискорення для даних карток (потрібне завантаження офіційних прошивок із цифровим підписом NVIDIA). Додана підтримка графічного движка TU10x. Вирішено проблеми з HD Audio.
    • Додано підтримку стиснення даних при передачі через DisplayPort MST (Multi-Stream Transport).
    • Додано новий драйвер «ath11k» для бездротових чипів Qualcomm з підтримкою 802.11ax.
      Драйвер заснований на стеку mac80211 та підтримує режими точки доступу, робочої станції та вузла Mesh-мережі.

    • Через sysfs надано доступ до показань датчиків температури, що використовуються на сучасних жорстких дисках і SSD.
    • Внесено істотні зміни в звукову систему ALSA, націлені на позбавлення коду від проблеми 2038 року (уникнення використання 32-розрядного типу time_t в інтерфейсах snd_pcm_mmap_status і snd_pcm_mmap_control). Додано підтримку нових звукових кодеків
      Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.

    • Додані драйвери для LCD-панелей Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus
      BOE NV140FHM-N49,
      Satoz SAT050AT40H12R2,
      Sharp LS020B1DD01D.

    • Додана підтримка ARM-плат і платформ Gen1 Amazon Echo (OMAP3630-based), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Комп'ютер ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC,
      Armada SolidRun Clearfog GTR, NXPGateworks GW59xx,
      Tolino Shine 3 eBook reader,
      Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX та HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ),
      Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM
      ST Ericsson HREF520, Inforce 6640, IDP SC7180, Atmel/Microhip AM9X60 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Uni Додана підтримка PCIe-контролера, застосовуваного Raspberry Pi 9863.

Одночасно латиноамериканський Фонд вільного ПЗ сформував
варіант повністю вільного ядра 5.6 - Linux-libre 5.6-gnu, очищеного від елементів прошивок та драйверів, що містять невільні компоненти або ділянки коду, сфера застосування яких обмежена виробником. У новому випуску вимкнено завантаження блобів у драйверах для AMD TEE, ATH11K та Mediatek SCP. Оновлено код чищення блобів у драйверах та підсистемах AMD PSP, amdgpu та nouveau.

Джерело: opennet.ru

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