+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

Лінус Торвальдс представив реліз ядра Linux 5.7

Лінус Торвальдс представив випуск ядра Linux 5.7

Лінус Торвальдс представив випуск ядра Linux 5.7. Серед найбільш помітних змін: нова реалізація файлової системи exFAT, модуль bareudp для створення тунелів UDP, захист на основі аутентифікації покажчиків для ARM64, можливість підключення програм BPF до LSM-процесорів, нова реалізація Curve25519, спліт-лок детектор, сумісність BPF з PREEMPT_RT, зняття обмеження на 80-символьний розмір рядка в коді, облік температурних показників процесора в планувальнику завдань, можливість використовувати 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, що дозволяє видалити підрозділ за його ідентифікатором. Надається повна підтримка клонування вбудованих розширень. Розширено кількість пунктів скасування операцій перерозподілу, що зменшило тривалі очікування при виконанні команди «скасувати баланс». Визначення зворотних посилань в міру прискорення (наприклад, час виконання тестового сценарію скорочено з години до декількох хвилин). Додана можливість прикріплювати розширення файлів до кожного дерева інодів. Схема замикання, яка використовується при записі в підрозділи і при виключенні NOCOW, була перероблена. Покращена продуктивність fsync для діапазонів.
    • XFS покращує перевірку метаданих та виконання fsck для активних розділів. Пропонується бібліотека для перебудови btree-структур, яка в майбутньому буде використовуватися для обробки xfs_repair і реалізації можливості відновлення без демонтажу розділу.
    • CIFS додає експериментальну підтримку для розміщення розділу підкачки в репозиторіях SMB3. Реалізовані розширення POSIX в readdir, як визначено в специфікації SMB3.1.1. Продуктивність запису була покращена для сторінок ємністю 64 КБ, коли ви вмикаєте кеш =суворий режим і використовуєте версії протоколу 2.1+.
    • EXT4 FS перекладається з bmap та iopoll на iomap.
    • F2FS має додаткову підтримку стиснення даних за допомогою алгоритму zstd. За замовчуванням для стиснення використовується алгоритм LZ4. Додано підтримку команди "chattr -c commit". Відображається час кріплення. Додані F2FS_IOC_GET_COMPRESS_BLOCKS ioctl для отримання інформації про кількість стиснених блоків. Додано виведення даних стиснення через statx.
    • Файлова система Ceph додає можливість локально виконувати операції зі створення і видалення файлів (unlink), не чекаючи відповіді від сервера (працює в асинхронному режимі). Зміна, наприклад, дозволяє помітно поліпшити продуктивність при запуску утиліти rsync.
    • OVERLAYFS додає можливість використовувати virtiofs як файлову систему верхнього рівня.
    • Код обходу шляху в VFS був переписаний , код парсингу символічних посилань був перероблений, а обхід точки монтування уніфікований.
    • На підсистемі scsi непривілейованим користувачам дозволено виконувати команди ZBC.
    • У dm_writecache реалізована можливість поступового очищення кешу на основі параметра max_age, який задає максимальний термін служби блоку.
    • У dm_integrity додана  підтримка операції «викинути».
    • У null_blk додана підтримка заміни помилок для імітації збоїв під час тестування.
    • Додана можливість відправки udev повідомлень про зміну розміру блокуючого пристрою.
  • Мережева підсистема
    • Netfilter включає в себе зміни, які значно прискорюють обробку великих наборів nftables, які вимагають перевірки комбінації підмереж, мережевих портів, протоколу і 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, який дозволяє інкапсулювати різні протоколи L3, такі як MPLS, IP і NSH, в тунель UDP.
    • Тривала інтеграція компонентів MPTCP (MultiPath TCP), розширення протоколу TCP для організації роботи TCP-з'єднання з доставкою пакетів одночасно по декількох маршрутах через різні мережеві інтерфейси, прив'язані до різних IP-адрес.
    • Додана підтримка механізмів апаратного прискорення для інкапсуляції Ethernet-кадрів в 802.11 (Wi-Fi).
    • При переміщенні пристрою з одного простору імен мережі в інший коригуються права доступу і власник відповідних файлів в sysfs.
    • Можливе використання SO_BINDTODEVICE прапора користувачами, які не мають root-прав.
    • Прийнята третя частина патчів, які перекладають інструментарій ethtool з ioctl() на використання інтерфейсу netlink. Новий інтерфейс спрощує додавання розширень, покращує обробку помилок, дозволяє відправляти повідомлення при зміні стану, спрощує взаємодію між ядром і призначеним для користувача простором, зменшує кількість синхронізованих іменованих списків.
    • Додана можливість використання спеціальних апаратних прискорювачів для виконання операцій відстеження з'єднань.
    • До нетфільтра додано гачок для з'єднання вихідних класифікаторів пакетів (egress), що доповнює раніше присутній гачок для потрапляння.
  • Віртуалізація та безпека
    • Додана апаратна реалізація Pointer Authentication, що використовує спеціалізовані інструкції процесора arm64 для захисту від атак, які використовують методи зворотно-орієнтованого програмування (ROP), в яких зловмисник не намагається помістити свій код в пам'ять, а оперує частинами машинних інструкцій, вже наявними в завантажених бібліотеках, закінчуючи інструкцією повернення елементів управління. Захист зводиться до використання цифрових підписів для перевірки зворотних адрес на рівні ядра. Підпис зберігається в невикористовуваних верхніх бітах самого покажчика. На відміну від програмних реалізацій, створення і перевірка цифрових підписів здійснюється за допомогою спеціальних інструкцій ЦПУ.
    • Додана можливість захисту області пам'яті від запису за допомогою системного виклику userfaultfd(), призначеного для обробки помилок сторінки в призначеному для користувача просторі. Ідея полягає в тому, щоб використовувати userfaultfd() для відстеження порушень доступу до захищених від запису сторінок і виклику обробника, здатного реагувати на такі спроби запису (наприклад, обробляти зміни в процесі створення живих знімків запущених процесів, здійснювати стан при скиданні дампів пам'яті на диск, реалізовувати загальну пам'ять, відстежувати зміни в пам'яті). Функціонал еквівалентний використанню mprotect() спільно з сигнальним процесором SIGSEGV, але він помітно швидше.
    • SELinux знецінює параметр "checkreqprot", що дозволяє відключити захист пам'яті при правилах обробки (допускається використання виконуваних областей пам'яті незалежно від вимог, зазначених в правилах). Символічні посилання Кернфів дозволяють успадковувати контекст батьківських каталогів.
    • У комплектацію  входить модуль KRSI, що дозволяє приєднувати програми BPF до будь-яких LSM-гаків в ядрі. Зміна дозволяє створювати LSM (Linux Security Modules) у вигляді програм BPF для аудиту і обов'язкових завдань контролю доступу.
    • Продуктивність /dev/random була оптимізована шляхом пакетизації значень CRNG замість того, щоб викликати інструкції RNG окремо. Покращений getrandom і /dev/random на системах ARM64, які надають Інструкції ЗПГ.
    • Реалізація еліптичної кривої Curve25519 була замінена варіантом з бібліотеки HACL , для чого наведено математичне доведення формальної перевірки надійності.
    • Доданий механізм інформування про вільні сторінки пам'яті. За допомогою цього механізму гості можуть передавати інформацію про сторінки, які більше не використовуються, в хост-систему, а хост може забрати назад дані сторінки.
    • Vfio/pci додає підтримку SR-IOV (однокоренева віртуалізація вводу-виводу).
  • Пам'ять і системні служби
    • З 80 до 100 знаків збільшено обмеження максимальної довжини рядка у вихідних текстах. При цьому розробникам як і раніше рекомендується триматися в межах 80 символів на рядок, але це вже не жорстка межа. Крім того, перевищення обмеження розміру рядка тепер призведе до попередження про збірку, лише якщо утиліта checkpatch буде запущена з опцією "-strict". Зміна дозволить не відволікати розробників на маніпуляції з пробілами і більш вільно почуватися при вирівнюванні коду, а також запобіжить надмірне порушення рядків, що заважає сприйняттю коду і пошуку.
    • Додана підтримка змішаного режиму завантаження EFI, що дозволяє завантажувати 64-бітне ядро з 32-бітної прошивки, що працює на 64-бітному процесорі, без використання спеціалізованого завантажувача.
    • Система включена для виявлення і налагодження розділених замків, які виникають при зверненні до неузгоджених даних в пам'яті через те, що при виконанні атомної інструкції дані перетинаються двома рядками кеша ЦП. Такі блокування призводять до значного падіння продуктивності (на 1000 циклів повільніше атомної операції з попаданням даних в одну лінію кешу). Залежно від параметра завантаження «split_lock_detect», ядро може виявляти такі блокування на льоту і відображати попередження або відправляти сигнал SIGBUS в додаток, що викликало блокування.
    • Планувальник завдань забезпечує відстеження показників датчиків температури (Теплового тиску) і реалізує облік перегріву при розміщенні завдань. Використовуючи надану статистику, тепловий регулятор може регулювати максимальну частоту ЦПУ при перегріванні, а планувальник завдань тепер враховує зниження обчислювальної потужності за рахунок такого зниження частоти при плануванні виконання завдань (раніше планувальник реагував на зміну частоти з певною затримкою, приймаючи рішення деякий час на основі завищених припущень про наявні обчислювальних ресурсах).
    • Планувальник завдань використовує незмінні показники відстеження навантаження, які дозволяють правильно оцінити навантаження незалежно від поточної частоти центрального процесора. Зміна дозволяє більш точно прогнозувати поведінку завдань в умовах динамічних змін напруги і частоти ЦПУ. Наприклад, завдання, яка споживала 1/3 ресурсів процесора на частоті 1000 МГц, споживала б 2/3 ресурсів при падінні частоти до 500 МГц, що раніше створювало помилкове припущення про роботу на повну потужність (т. Е. Завдання для планувальника здавалися більшими тільки за рахунок зменшення частоти, що призводило до неправильних рішень в шедутилі cpufreq governor).
    • Драйвер Intel P-state, відповідальний за вибір режимів продуктивності, був перенесений в schedutil .
    • Реалізована можливість використання підсистеми BPF при роботі ядра в режимі реального часу (PREEMPT_RT). Раніше, при включенні PREEMPT_RT, вам доручили відключити BPF.
    • Доданий новий тип програми BPF - BPF_MODIFY_RETURN, які можуть приєднуватися до функції в ядрі і змінювати значення, повернуте цією функцією.
    •  Додана можливість використання системного виклику clone3() для створення процесу в cgroup, який відрізняється від батьківської cgroup, що дозволяє батьківському процесу застосовувати обмеження і включати облік відразу після того, як новий процес або потік буде породжений. Наприклад, сервіс-менеджер може безпосередньо виділяти нові послуги на окремі групи, і нові процеси будуть негайно зупинені при приміщенні в «заморожену» групу.
    • Kbuild додає підтримку змінної середовища "LLVM=1" для переходу на інструментарій Clang/LLVM при побудові ядра. Підвищено вимоги до версії бінутілів (2.23).
    • До налагоджувачів додано розділ /sys/kernel/debug/kunit/ з результатами тесту kunit.
    • Додана опція завантаження ядра pm_debug_messages (analog/sys/power/pm_debug_messages), яка включає в себе налагоджувальну інформацію про роботу системи управління живленням (корисна при налагодженні гібернації і резервних проблемах).
    • Підтримка splice() і атомного буферного відбору io_uring додана до  асинхронного інтерфейсу введення-виведення .  
    • Покращено профілювання групи за допомогою інструментарію perf. Раніше perf міг профілювати завдання тільки в певній групі і не міг з'ясувати, до якої групи належить поточна вибірка. Тепер Perf отримує інформацію про групу для кожного зразка, що дозволяє профілювати більше однієї групи та застосовувати сортування cgroup до звітів.
    • cgroupfs, псевдо-файлова система для управління cgroups, додає підтримку розширених атрибутів (xattrs), які, наприклад, можуть бути використані для залишення додаткової інформації для обробників в просторі користувача.
    • контролер пам'яті cgroup додає підтримку рекурсивного захисту значення "memory.low", яке регулює мінімальний обсяг оперативної пам'яті, що надається членам групи. Якщо змонтувати ієрархію cgroup з опцією «memory_recursiveprot», то значення «memory.low», яке встановлено для нижніх вузлів, буде автоматично розподілено по всіх дочірніх вузлах.
    • Додано Uacce (Уніфікована рамка прискорювача, призначеного для простору користувача) для обміну віртуальними адресами (SVA, Спільна віртуальна адресація) між центральним процесором та периферійними пристроями, що дозволяє апаратним прискорювачам отримувати доступ до структур даних переважно за допомогою процесора.
  • Апаратні архітектури
    • Архітектура ARM має можливість гарячого вилучення пам'яті.
    • Для архітектури RISC-V додана підтримка гарячого вилки і вилучення процесора (hotplug CPU). Для 32-бітного RISC-V реалізований eBPF JIT.
    • Вилучено можливість використання 32-бітних ARM-систем для запуску гостьових середовищ KVM.
    • Прибрали «фіктивну» реалізацію NUMA для архітектури s390, для якої не знайдено варіантів використання для підвищення продуктивності.
    • ARM64 додає підтримку розширення Activity Monitors Unit (AMU), визначеного в ARMv8.4, яке забезпечує лічильники продуктивності, які використовуються для розрахунку поправочних коефіцієнтів частотного масштабування в планувальнику завдань.
  • Обладнання
    • Додано підтримку пристроїв vDPA, які використовують канал обміну даними, що відповідає специфікаціям virtio. Пристрої vDPA можуть бути як фізично підключеними апаратними, так і емульованими програмно-визначеними віртуальними пристроями.
    • Підсистема GPIO має нову команду ioctl() для моніторингу змін, що дозволяє інформувати процес про зміни стану будь-якої лінії GPIO. Як приклад використання нової команди пропонується утиліта gpio-watch.
    • Драйвер i915 DRM для відеокарт Intel включає в себе підтримку за замовчуванням чіпів Tigerlake ( «Gen12») і додає початкову підтримку OLED-управління підсвічуванням. Покращена підтримка чіпів Ice Lake, Elkhart Lake, Baytrail і Haswell.
    • Драйвер amdgpu додає можливість завантаження прошивки в чіп USBC для ASIC. Покращена підтримка чіпів AMD Ryzen 4000 "Ренуар". Додана підтримка управління OLED-панелями. Відображається стан прошивки в налагоджувачах.
    • Драйвер vmwgfx DRM для систем віртуалізації VMware додає можливість використання OpenGL 4 в гостях (раніше підтримувався OpenGL 3.3).
    • Додано новий драйвер DRM для системи відображення платформи TI Keystone.
    • Додані драйвери для РК-панелей: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Оптоелектроніка WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
    • До системи управління живленням додана підтримка платформи Intel Jasper Lake (JSL) на базі атома .
    • Додана підтримка ноутбука Pinebook Pro на базі Rockchip RK3399, планшета Pine64 PineTab і смартфона PinePhone на базі 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 Galaxy Xcover 2 на базі ST-Ericsson u8500, DH Electronics DHCOM SoM і PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.

Інші новини