Після двох місяців розробки Лінус Торвальдс реліз ядра . Серед найбільш помітних змін: нова реалізація ФС exFAT, модуль bareudp для створення UDP-тунелів, захист на основі автентифікації покажчиків для ARM64, можливість прикріплення BPF-програм до LSM-обробників, нова реалізація Curve25519, детектор split-lock, сумісність BPF з PREEMPT_RT, зняття обмеження на 80-символьний розмір рядка в коді, облік показників температури CPU у планувальнику завдань, можливість використання clone() для породження процесів в іншому cgroup, захист від запису в пам'ять за допомогою userfaultfd.
У нову версію прийнято 15033 виправлень від 1961 розробників,
розмір патча - 39 МБ (зміни торкнулися 11590 файлів, додано 570560 рядків коду,
видалено 297401 рядків). Близько 41% усіх представлених у 5.7
змін пов'язані з драйверами пристроїв, приблизно 16% змін мають
ставлення до оновлення коду, специфічного для апаратних архітектур, 13%
пов'язано з мережевим стеком, 4% - з файловими системами та 4% з внутрішніми
підсистемами ядра.
:
- Дискова підсистема, введення/виведення та файлові системи
- Додано нову реалізацію драйвера exFAT, на актуальній кодовій базі "sdfat" (2.x), що розвивається компанією Samsung для своїх Android-Смартфони. Раніше доданий до ядра драйвер був заснований на застарілому коді Samsung (версія 1.2.9) і відставав за продуктивністю від нового драйвера приблизно на 10%. Нагадаємо, що додавання підтримки exFAT в ядро стало можливим після того, як компанія Microsoft загальнодоступні специфікації та надала можливість безоплатного використання патентів на exFAT в Linux.
- У Btrfs реалізовано нову команду ioctl() — BTRFS_IOC_SNAP_DESTROY_V2, що дозволяє видаляти підрозділ за його ідентифікатором. Забезпечено повну підтримку клонування inline-екстентів. Розширено кількість точок скасування операцій перерозподілу, що дозволило скоротити тривалі очікування під час виконання команди 'balance cancel'. Прискорено визначення зворотних посилань на екстенти (наприклад час виконання тестового сценарію зменшився з години до декількох хвилин). Додана можливість прикріплення до кожного inode дерева екстентів файлу. Перероблено схему блокування, яка використовується при записі в підрозділи і при виключенні NOCOW. Підвищено ефективність виконання fsync для діапазонів.
- У XFS покращено перевірку метаданих та виконання fsck для активних розділів. Запропоновано бібліотеку для перебудови структур btree, яка у майбутньому буде використана для переробки xfs_repair та реалізації можливості відновлення без відмонтування розділу.
- У CIFS додано експериментальну підтримку розміщення розділу підкачки в SMB3-сховищах. Реалізовані POSIX-розширення в readdir, визначені у специфікації SMB3.1.1. Підвищено продуктивність запису для сторінок розміром 64KB при включенні режиму cache=strict та використання версій протоколу 2.1+.
- ФС EXT4 переведена з bmap та iopoll на використання iomap.
- У F2FS реалізовано опціональну підтримку стиснення даних з використанням алгоритму zstd. За замовчуванням для стиснення задіяно алгоритм LZ4. Додано підтримку команди «chattr -c commit». Забезпечено відображення часу монтування. Доданий ioctl F2FS_IOC_GET_COMPRESS_BLOCKS для отримання відомостей про кількість стислих блоків. Додані дані про стискування, що виводяться через statx.
- У файловій системі Ceph додано можливість локального виконання операцій створення та видалення (unlink) файлу без очікування відповіді від сервера (робота в асинхронному режимі). Зміна, наприклад, дозволяє помітно підняти продуктивність під час роботи утиліти rsync.
- У OVERLAYFS додано можливість використання virtiofs як ФС верхнього рівня.
- код обходу шляхів у VFS, перероблений код аналізу символічних посилань та уніфікований обхід точок монтування.
- У підсистемі scsi непривілейованим користувачам виконання команд ZBC.
- У dm_writecache можливість поступового очищення кешу на основі параметра max_age, що задає максимальний час життя блоку.
- У dm_integrity підтримка операції Discard.
- У null_blk підтримка підстановки помилок для симуляції збоїв під час проведення тестування.
- можливість надсилання udev-повідомлень про зміну розміру блокового пристрою.
- Мережева підсистема
- У Netfilter включені , що значно прискорюють обробку великих списків зіставлення (nftables set), в яких потрібна перевірка поєднання підмереж, мережевих портів, протоколу та MAC-адрес.
Оптимізації модуль nft_set_pipapo (PIle PAcket POlicies), що вирішує завдання зіставлення вмісту пакета з застосовуваними в правилах фільтрації довільними діапазонами стану полів, такими як діапазони IP і мережевих портів (nft_set_rbtree і nft_set_hash маніпулюють зіставленням інтерв. Векторизована за допомогою 256-розрядних інструкцій AVX2 версія pipapo на системі з процесором AMD Epyc 7402 показала приріст продуктивності на 420% при розборі 30 тисяч записів, що включають зв'язки порт-протокол. Приріст при зіставленні зв'язки з підмережі та номера порту при аналізі 1000 записів становив 87% для IPv4 і 128% для IPv6. - модуль bareudp, що дозволяє інкапсулювати в UDP-тунель різні L3-протоколи, такі як MPLS, IP та NSH.
- Продовжено інтеграцію компонентів MPTCP (MultiPath TCP), розширення протоколу TCP для організації роботи TCP-з'єднання з доставкою пакетів одночасно по кількох маршрутах через різні мережеві інтерфейси, прив'язані до різних IP-адрес.
- підтримка механізмів апаратного прискорення інкапсуляції Ethernet-кадрів 802.11 (Wi-Fi).
- При переміщенні пристрою з одного простору імен мережної підсистеми (network namespace) в інше забезпечено коригування прав доступу та власника відповідних файлів у sysfs.
- Надано можливість використання прапора SO_BINDTODEVICE користувачами, які не мають прав root.
- Прийнято третину патчів, що переводять інструментарій ethtool з ioctl() використання інтерфейсу netlink. Новий інтерфейс спрощує додавання розширень, покращує обробку помилок, дозволяє надсилати повідомлення при зміні стану, спрощує взаємодію між ядром та простором користувача та скорочує кількість синхронізованих іменованих списків.
- Додано можливість використання спеціальних апаратних прискорювачів для виконання операцій відстеження з'єднань.
- У netfilter хук для підключення класифікаторів вихідних пакетів (egress), що доповнив собою хук для вхідних пакетів (ingress), що раніше був присутнім.
- У Netfilter включені , що значно прискорюють обробку великих списків зіставлення (nftables set), в яких потрібна перевірка поєднання підмереж, мережевих портів, протоколу та MAC-адрес.
- Віртуалізація та безпека
- Додано апаратну реалізацію аутентифікації покажчиків (), що використовує спеціалізовані інструкції CPU ARM64 для захисту від атак, що використовують прийоми зворотно-орієнтованого програмування (ROP) при яких атакуючий не намагається розмістити свій код у пам'яті, а оперує шматками машинних інструкцій, що вже є в завантажених бібліотеках, завершуються інструкцією повернення управління. Захист зводиться до використання цифрових підписів для перевірки адрес повернення на рівні ядра. Підпис зберігається в верхніх бітах самого покажчика, що не використовуються. На відміну від програмних реалізацій створення та перевірка цифрових підписів здійснюється за допомогою спеціальних інструкцій CPU.
- можливість захисту області пам'яті від запису за допомогою системного виклику userfaultfd(), призначеного для обробки page faults (звернення до невиділених сторінок пам'яті) у просторі користувача. Ідея в тому, щоб використовувати userfaultfd() і для відстеження порушення доступу до сторінок, помічених захищеними від запису, та виклику обробника, який може реагувати на подібні спроби запису (наприклад, для обробки змін у процесі створення live-снапшотів працюючих процесів, фіксації стану) при скиданні дампів пам'яті на диск, реалізації розділеної пам'яті, відстеження змін у пам'яті). Функціональність застосування mprotect() у зв'язці з обробником сигналу SIGSEGV, але працює помітно швидше.
- У SELinux оголошено застарілим параметр "checkreqprot", що дозволяє вимкнути перевірку захисту пам'яті при обробці правил (допускав використання областей пам'яті, що виконуються, незалежно від приписів, заданих у правилах). Символічним посиланням kernfs дозволено успадкування контексту батьківських каталогів.
- До складу модуль , що дозволяє прикріплювати BPF-програми до будь-яких LSM-хуків в ядрі. Зміна дозволяє створювати LSM-модулі (Linux Security Module) у формі BPF-програм для вирішення задач аудиту та мандатного контролю доступу.
- оптимізація продуктивності /dev/random за рахунок пакетної передачі значень CRNG замість окремого виклику інструкцій RNG. Покращено роботу getrandom та /dev/random на системах ARM64, що надають інструкції RNG.
- Реалізація еліптичної кривої Curve25519 на варіант із бібліотеки , для котрого математичне підтвердження формальної верифікації надійності.
- механізм інформування про вільні сторінки пам'яті. За допомогою даного механізму гостьові системи можуть передавати хост-системі відомості про сторінки, які більше не використовуються, і дані сторінки хост може забрати назад.
- У vfio/pci підтримка SR-IOV (Single-Root I/O Virtualization).
- Пам'ять та системні сервіси
- З 80 до 100 символів обмеження на максимальну довжину рядка у вихідних текстах. При цьому розробникам, як і раніше, рекомендується триматися в межах 80 символів у рядку, але це тепер не є жорстким лімітом. Крім того, перевищення ліміту на розмір рядка тепер призводитиме до виведення попередження при складанні тільки якщо утиліта checkpatch запущена з опцією «—strict'. Зміна дасть можливість не відволікати розробників на з пробілами і більш вільно почуватися при вирівнюванні коду, а також зайве розбиття рядків, сприйняттю коду та пошуку.
- підтримка змішаного режиму завантаження EFI, що дозволяє без застосування спеціалізованого завантажувача завантажити 64-розрядне ядро з 32-розрядної прошивки, що виконується на 64-розрядному CPU.
- система виявлення та налагодження розщеплених блокувань (««), що виникають при доступі до невирівняних даних у пам'яті через те, що під час виконання атомарної інструкції дані перетинають дві лінії кеша CPU. Подібні блокування призводять до значного падіння продуктивності (на 1000 циклів повільніше атомної операції з даними, що потрапляють в одну лінію кеша). Залежно від завантажувального параметра split_lock_detect ядро може на льоту виявляти подібні блокування і виводити попередження або відправляти сигнал SIGBUS додатку, що викликав блокування.
- У планувальнику завдань забезпечено відстеження показників датчиків температури () і реалізовано облік перегріву під час розміщення завдань. Користуючись статистикою, що обробляється, обробник температури (thermal governor) може коригувати максимальну частоту CPU при перегріві, а планувальник завдань тепер враховує зниження обчислювальної потужності через подібне урізання частоти при плануванні запуску завдань (раніше планувальник реагував на зміну частоти з певною затримкою, якийсь час приймаючи рішення на основі завищених припущень про доступні обчислювальні ресурси).
- У планувальнику завдань задіяні відстеження навантаження, що дозволяє коректно оцінити навантаження, незалежно від поточної частоти роботи CPU. Зміна дозволяє більш точно прогнозувати поведінку задач в умовах динамічної зміни вольтажу та частоти CPU. Наприклад, завдання, яка споживала 1/3 ресурсів CPU при частоті 1000 MHz, споживатиме 2/3 ресурсів при зниженні частоти до 500 MHz, що раніше створювало помилкове припущення про роботу на повну потужність (тобто завдання для планувальника здавалися більшими тільки за рахунок зниження частоти, що призводило до прийняття невірних рішень в schedutil cpufreq governor).
- Драйвер Intel P-state, який відповідає за вибір режимів продуктивності, переведений на використання .
- Реалізовано можливість використання підсистеми BPF під час роботи ядра як реального часу (PREEMPT_RT). Раніше при включенні PREEMPT_RT наказувалося відключення BPF.
- Додано новий тип BPF-програм — BPF_MODIFY_RETURN, які можуть прикріплюватися до функції в ядрі і змінювати значення, що повертається даною функцією.
- Додана використання системного виклику clone3() для створення процесу в cgroup, що відрізняється від батьківського cgroup, що дозволяє батьківському процесу застосувати обмеження та включити обліковий запис відразу після породження нового процесу або потоку. Наприклад, сервісний менеджер може безпосередньо виділяти нові послуги в окремі cgroup, а нові процеси при поміщенні в «заморожені» cgroup і будуть відразу зупинені.
- у Kbuild підтримка змінної оточення "LLVM=1" для перемикання на інструментарій Clang/LLVM при складанні ядра. Піднято вимоги до версії binutils (2.23).
- У debugfs додано секцію /sys/kernel/debug/kunit/ з результатами тестів kunit.
- Додано параметр завантаження ядра pm_debug_messages (аналог/sys/power/pm_debug_messages), що включає виведення налагоджувальної інформації про роботу системи керування живленням (корисно при налагодженні проблем зі сплячим і режимом очікування).
- В інтерфейс асинхронного введення/виводу додано підтримку и .
- Покращено профіль cgroup за допомогою інструментарію perf. Раніше perf міг профілювати завдання тільки в певному cgroup і не міг дізнатися, до якої cgroup належить поточний зразок. Тепер perf отримує відомості про cgroup для кожної вибірки, що дозволяє профілювати більше одного cgroup і застосовувати сортування по
cgroup у звітах. - У cgroupfs, псевдо-ФС для управління cgroups, додано підтримку розширених атрибутів (xattrs) за допомогою яких, наприклад, можна залишати додаткову інформацію для обробників у просторі користувача.
- У cgroup memory controller а підтримка рекурсивного захисту значення memory.low, що регулює мінімальний обсяг оперативної пам'яті, наданої учасникам групи. При монтуванні ієрархії cgroup з опцією memory_recursiveprot значення memory.low, яке встановлено для нижніх вузлів, автоматично буде розподілятися для всіх дочірніх вузлів.
- фреймворк Uacce (Unified/User-space-access-intended Accelerator Framework) для спільного використання віртуальних адрес (SVA, Shared Virtual Addressing) між CPU та периферійними пристроями, що дозволяє апаратним прискорювачам отримати доступ до структур даних в основному CPU.
- Апаратні архітектури
- Для архітектури ARM реалізовано можливість гарячого виймання пам'яті.
- Для архітектури RISC-V додано підтримку гарячого підключення та вилучення CPU (CPU hotplug). Для 32-розрядних RISC-V реалізовано eBPF JIT.
- Прибрано можливість використання 32-розрядних ARM-систем для запуску гостьових оточень KVM.
- Видалено «фіктивну» реалізацію NUMA для архітектури s390, для якої так і не знайдено сценаріїв використання, що дозволяють досягти підвищення продуктивності.
- Для ARM64 додано підтримку розширення AMU (Activity Monitors Unit), визначеного в ARMv8.4 і надає лічильники продуктивності, які використані для розрахунку коефіцієнтів корекції масштабування частоти у планувальнику завдань.
- Обладнання
- підтримка пристроїв vDPA, у яких використовується канал обміну даних, що відповідає специфікаціям virtio. vDPA-пристрої можуть бути як фізично підключеним обладнанням, так і програмними віртуальними пристроями, що емульуються.
- У підсистемі GPIO нова команда ioctl() для моніторингу змін, що дозволяє налагодити інформування про зміну стану будь-якої лінії GPIO. Як приклад використання нової команди утиліта gpio-watch.
- У DRM-драйвері i915 для відеокарт Intel за замовчуванням підтримки чіпів Tigerlake («Gen12») та додана початкова підтримка керування підсвічуванням OLED. Поліпшено підтримку чіпів Ice Lake, Elkhart Lake, Baytrail і Haswell.
- У драйвері amdgpu можливість завантаження прошивок у чіп USBC для ASIC. Поліпшено підтримку чіпів AMD Ryzen 4000 «Renoir». З'явилася підтримка керування OLED-панелями. Забезпечено відображення стану прошивки у debugfs.
- У DRM-драйвері vmwgfx для систем віртуалізації VMware додана можливість використання OpenGL 4 в гостьових системах (раніше підтримувався OpenGL 3.3).
- Додано новий DRM-драйвер tidss для дисплейної системи платформи TI Keystone.
- Додані драйвери для LCD-панелей: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101
- У систему керування харчуванням підтримка платформи Intel Jasper Lake (JSL) з урахуванням Atom.
- Додано підтримку ноутбука Pinebook Pro на базі Rockchip RK3399, планшета Pine64 PineTab та смартфона на базі Allwinner A64.
- Додано підтримку нових звукових кодеків та чіпів:
Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc. - Додана підтримка ARM-плат і платформ Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron «sl28», 11 варіантів плати i.MX6 TechNexion Pico, три нові варіанти Toradex Colibri, Samsung S7710 Gala -Ericsson u2, DH Electronics DHCOM SoM та PDK8500, Renesas M2ULCB, Hoperun HiHope, Linutronix Testbox v3, PocketBook Touch Lux 2.
Джерело: opennet.ru
