След талантливата разработка на Линус Торвалдс е публикувана . Сред най-забележителните промени: нова реализация на файловата система exFAT, модул bareudp за създаване на UDP тунели, защита на базата на удостоверяване на указатели за ARM64, възможност за прикрепяне на BPF програми към LSM обработчици, нова реализация на Curve25519, детектор „split-lock“, съвместимост на BPF с PREEMPT_RT, премахване на ограниченията за 80 символа в кодовия ред, отчитане на температурни показатели на CPU в планировчика на задачите, възможност за използване на clone() за създаване на процеси в друга cgroup, защита от запис в паметта чрез userfaultfd.
В новата версия са приети 15033 поправки от 1961 разработчици,
размерът на пача е 39 MB (промените засягат 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.
- система за откриване и отстраняване на разсечени заключвания („
- split lockВ планировщика на задачите е осигурено проследяване на показателите на температурните датчици (
- Thermal Pressure) и реализирано отчитане за прегряване при разполагане на задачи. Използвайки предоставената статистика, обработчикът на температура (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.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 RK101II01D-CT, Frida FRD350H54004.
- В системата за управление на захранването подкрепа за платформата 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 Galaxy Xcover 2, базиран на ST-Ericsson u8500, DH Electronics DHCOM SoM и PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.
Източник: opennet.ru
