След като работи два месеца, Линус Торвалдс новата версия на ядрото . Между най-значителните промени: нова реализация на файловата система 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 е добавена експериментална поддръжка за разполагане на swap дял в 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(), предназначен за обработка на грешки в страниците (достъп до неразпределени страници в паметта) в пространството на потребителя. Идеята е да се използва userfaultfd() и за проследяване на нарушения на достъпа до страниците, маркирани като защитени от запис, и извикване на обработчик, който може да реагира на подобни опити за запис (например, за обработка на промените при създаване на живи моментни снимки на работещи процеси, фиксиране на състоянието при запис на дъмпове на паметта на диск, реализиране на споделена памет, проследяване на промените в паметта). Функционалността на прилагането на 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. Например, задача, която е консумирала 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
