След талантливата разработка на Линус Торвалдс представи е публикувана Linux 7.0. Между най-забележителните промени: правила за приложение на AI-асистенти, пренос на Rust в основни функции на ядрото, повишаване на ефективността на виртуалната памет, включване по подразбиране на режима PREEMPT_LAZY, поддръжка на филтри за операции io_uring, нова файлова система Nullfs, инфраструктура fserror, средства за мониторинг на XFS, поддръжка на ремапинг в Btrfs, включване по подразбиране на версия NFS 4.1, интеграция на пост-квантов криптографски алгоритъм ML-DSA, активиране на AccECN в мрежовата подсистема, начална поддръжка на WiFi 8.
Номер 7.0 е присвоен, тъй като в клон 6.x се е натрупало достатъчно на редакции за смяна на първото число в номер версия (по свое време версия 6.0 беше формулирана след 5.19). Смяната на номерирането се извършва от естетически съображения и е формална стъпка, която премахва дискомфорта от натрупването на значителен брой издания в серия.
В новата версия са приети 15624 поправки от 2477 разработчици, размер на пача – 56 MB (промените засягат 18053 файла, добавени са 704060 реда код, премахнати 278132 реда). В предишната версия имаше 15657 поправки от 2237 разработчици, размер на пача – 52 MB. Около 51% от всички представени в 7.0 промени са свързани с драйвери на устройства, около 11% от промените касаят обновяване на код, специфичен за хардуерни архитектури, 14% са свързани с мрежовия стек, 5% – с файлови системи и 3% с вътрешни подсистеми на ядрото.
Основните нововъведения в ядрото 7.0 (kernelnewbies.org, lwn.net, OpenNET):
- Дискова подсистема, вход/изход и файлови системи
- Реализирана е инфраструктура fserror и добавен API за получаване на информация за грешки при вход/изход и повреди на метаданни при работа с файлове. Предложената инфраструктура унифицира в файловите системи предаването на сведения за грешки в пространство на потребителя чрез механизма fsnotify.
- В XFS добавени нови възможности за мониторинг на състоянието на файловата система от потребителското пространство. Предложено е ioctl-операция XFS_IOC_HEALTH_MONITOR, която връща файлов дескриптор, чрез който могат да се получават данни за повреди, свързани с повреждане на метаданни или възникване на грешки при вход/изход, както и да се проследява промяната в състоянието на файловите системи, такива като демонтиране и приключване на работа. Допълнително е предложен фонов процес xfs_healer, управляван от systemd, който обработва събития за състоянието на файловата система от потребителското пространство и при необходимост автоматично стартира. процедури за възстановяване.
- В файловата система Btrfs е добавена експериментална поддръжка на структурата "дерево за пренаписване" (remap tree), която в бъдеще може да бъде използвана като междинен слой при извършване на операции за вход-изход. Същността на добавената възможност е, че след преместване на данни на устройството, вместо да се обновяват всички свързани с тези данни структури, в допълнителната структура "remap tree" се съхраняват старите и новите адреси на данните, след което при достъп до данните адресите се заместват. Новият подход се представя като по-надежден и гъвкав, а също така опростява разширяването на функционалността на Btrfs.
- В Btrfs реализирана поддръжка на директен вход/изход в ситуации, когато размерът на блока надвишава размера на страницата на паметта в системата.
- В състава включена нова файловата система Nullfs, която може да се използва като заплитателна за кореновата файловата система. Файловата система Nullfs е винаги празна, не съдържа данни и не поддържа промени. Целта на Nullfs е да се използва като начална файловата система за опростяване на процеса на зареждане на системата – над Nullfs могат да се монтират други файлови системи и се използва системен повик pivot_root() за смяна на кореновата файловата система вместо изчистване на съдържанието на initramfs и използването на свързаната с него коренова файловата система.
- Реализирано обновление на информацията за времето на модифициране на файловете в неблокиращ режим. По-рано извикването на file_update_time_flags() с флага IOCB_NOWAIT връщаше грешка -EAGAIN, което не позволяваше използването на операции за директно записване в неблокиращ режим.
- В файловите системи в режим на отделно активирани опции преведена поддръжка на уведомителни блокировки (lease). По подразбиране такъв механизъм вече не се активира поради проблеми с файловите системи, първоначално неподходящи за неговото прилагане. Например, той не се поддържа от файлови системи 9p и cephfs.
- В файловата система EROFS (Разширяема само за четене файловата система), предназначена за използване на дялове, достъпни в режим само за четене, по подразбиране е използван алгоритъм LZMA за компресия. Опционално са налични алгоритми DEFLATE и Zstandard, които вече не са обозначени като експериментални. Реализирано е споделянето на записи в страницовия кеш (page-cache) за идентични файлове в отделни файлови системи EROFS.
- Премахнат режим laptop_mode, спестяващ енергия, чрез отлагане и обединяване на операции за запис на твърдия диск с цел удължаване на времето, през което дискът е в спящ режим и намаляване на броя на събужданията. Режимът е загубил актуалност, тъй като в съвременните мобилни устройства твърдите дискове са изместени от твърдотелни дискове.
- Файловата система F2FS е преминала към използване на големи фолианти на страници в паметта (големи фолиа).
- Възобновена работата по драйвера ntfs3, развиван от компанията Paragon Software. Добавена е поддръжка за файлови операции на базата на iomap, реализирани са опции llseek SEEK_DATA/SEEK_HOLE, добавен е режим delalloc за отложено разпределение на блокове. Междувременно, в списъка с имейли на разработчиците на ядрото през февруари беше одобрено включването в една от бъдещите версии на ядрото на нова имплементация на NTFS — ntfsplus, разработена за замяна на ntfs3.
- По подразбиране при компилация включена версията на протокола NFS 4.1 (CONFIG_NFS_V4_1). Осигурена е блокиране на експортирането чрез NFS на специализирани псевдо-файлови системи, като pidfs и nsfs. В NFSD реализирана експериментална възможност за използване на POSIX ACL и е добавена поддръжка за динамична промяна на пул от нишки (thread-pool) в зависимост от натоварването.
- Памет и системни услуги
-
Одобрени официални правила за използване на AI асистенти и включване в ядрото на автоматично генерирано съдържание. При предаване на генерирания код е задължително да се означава използваният AI асистент чрез етикет Assisted-by. Забранено е на AI асистентите да добавят етикета Signed-off-by – човекът, предал пача, се счита за негов автор, носи отговорност за предаваното изменение и гарантира неговото качество. Разработчиците са задължени да провеждат ръчен преглед на кода, получен през AI, и да проверят съответствието на резултата с лицензионните изисквания.
-
Поддръжка на Rust преведена от експериментални в основни функции на ядрото.
-
Завършено интегрирането в ядрото на механизма „Swap Table“, който позволява повишаване на производителността на подкачването. Ускорението се постига благодарение на намаляване на конкуренцията за достъп до кеша на подкачването, по-ефективно търсене в кеша и намаляване на фрагментацията. Backendът, базиран на Swap Table, е участвал в кеширането на подкачването вместо backend-а XArray и е позволил в теста redis-benchmark с BGSAVE да увеличи броя на обработваните заявки с 22%.
-
Добавена е поддръжка за новото в Clang 22 разширение Thread Safety Analysis, което позволява на етапа на компилация да се идентифицират потенциални състояния на гонки и грешки, причинени от неправилно задаване на заключвания. Разширението предлага серия от атрибути, като GUARDED_BY(…), REQUIRES(…), RELEASE(…) и ACQUIRE(…), които позволяват отбелязването на функциите, покрити от заключвания, и разделянето на обхватите на заключванията (определяне на контекста). На етапа на компилация се извършва проверка за правилно приложение на примитиви за синхронизация, като mutex, на основа на оценка на активността или неактивността, свързана с тяхния контекст.
-
В системния повик open_tree добавен флаг OPEN_TREE_NAMESPACE за опростяване на настройката на изолирани контейнери и ускоряване на стартирането на контейнери на системи с голям брой точки на монтиране. Подобно на OPEN_TREE_CLONE, новият флаг копира само посоченото дърво на точки на монтиране (mount tree), но вместо локален дескриптор на файл връща дескриптор на файл в новото пространство на имена на точки на монтиране, в което копираното дърво се монтира над копие на реалната коренова ФС. Флагът OPEN_TREE_NAMESPACE е необходим за избягване на отделното изпълнение на операции unshare(CLONE_NEWNS) и pivot_root(), прилагани при създаване на контейнери.
-
В системния повик rseq добавен механизм за разширяване на квантите на времето (time slice), позволяващ получаване на допълнително процесорно време за неразривно изпълнение на критичната секция. Идеята е да се избегне прекъсването на критичната секция с активирана блокировка от планировчика на задачи, което води до предаване на управлението на други нишки, използващи ресурса, за които остава активна блокировката. Разширението на кванта на времето се извършва без допълнителни разходи, но и без строги гаранции, предоставяни при пълно регулиране на приоритетите.
-
За архитектури arm64, loongarch, powerpc, riscv, s390 и x86 режимът на прекъсване на задачи (preemption) в планировчика е по подразбиране променен от PREEMPT_NONE на PREEMPT_LAZY. Броят на възможните режими е съкратен от четири на два – PREEMPT_FULL и PREEMPT_LAZY (режимите PREEMPT_NONE и PREEMPT_VOLUNTARY са оставени само за архитектури, които не поддържат PREEMPT_FULL и PREEMPT_LAZY). Режимът PREEMPT_LAZY прилага модела на пълно прекъсване (PREEMPT_FULL) за realtime-задачи (RR/FIFO/DEADLINE), но забавя прекъсването на обикновени задачи (SCHED_NORMAL) до границата на тиктакането. Въведеното закъснение води до намаляване на случаите на прекъсване на притежателите на блокировки, което позволява близост до производителността на конфигурации, използващи модела на доброволно прекъсване (voluntary preemption), т.е. PREEMPT_LAZY позволява запазването на възможностите за пълно прекъсване по отношение на realtime-задачите, но минимизира падането на производителността за обикновените задачи.
Включването на PREEMPT_LAZY доведе до сериозна регресия, която намалява производителността на PostgreSQL на системи ARM64 два пъти. За да се устранат паданията в производителността, на разработчиците на PostgreSQL беше предложено да активират опцията PR_RSEQ_SLICE_EXTENSION за намаляване на вероятността от прекъсване на притежателя на блокировка.
-
Продължава преносът на промени от клона Rust-for-Linux, свързани с използването на езика Rust като втори език за разработването на драйвери и модули на ядрото (поддръжката на Rust не е активирана по подразбиране и не води до включването на Rust в задължителните зависимости за компилация на ядрото). Благодарение на преди интегрираната библиотека „syn (crates.io)“, опростяваща написването на сложни макроси, беше успяно съкратено размерът на Rust-кода в ядрото благодарение на опростяване на определенията на наличните процедурни макроси. Разширени са възможностите на библиотеките kernel, macros и pin-init.
-
В системата на асинхронния вход/изход io_uring е добавена опция за използване на некръгови опашки (non-circular submission queue), по-ефективно кеширани в ситуации, когато изпълнението на заявката приключва преди възвръщането от системния повик.
-
В подсистемата eBPF в механизма BTF (BPF Type Format), предоставяща информация за проверка на типовете в псевдокод на BPF, за търсене на отладъчна информация macOS: За всички прозорци на цял екран бинарно търсене, което повиши ефективността на зареждането на BPF програми. В eBPF е добавена поддръжка на неявни аргументи при извикването kfunc (функции на ядрото, достъпни за използване в BPF програми), определени с флаг KF_IMPLICIT_ARGS.
-
Премахнат код за поддръжка на начален RAM диск (initrd) на базата на linuxrc, отдавна обявен за остарял. Останалите реализации на initrd планират да бъдат премахнати през 2027 г. Вместо initrd трябва да се използва initramfs (разликата е, че initrd поставя началното зареждащо обкръжение в дискован образ, а initramfs – в файловата система).
-
В блочното устройство zram, използвано за компресирано съхранение на паметта за размяна, променена логиката на работа с компресирани страници на паметта при опционално преместване на данни в постоянно хранилище при запълване на наличната оперативна памет. По-рано страниците на паметта се разпаковаха преди запис на физически носител, а сега се запазват в компресиран вид, което намалява натоварването на CPU и пести енергия при работа на батерия.
-
В утилитата timerlat, предназначена за измерване на забавяния при работа на планирача на задачи, е добавена опция —bpf-action за стартиране на BPF програми в случай на превишаване на зададения праг.
-
В системата за трасировка ftrace е добавена настройка bitmask-list за извеждане на битови маски в четим вид (под формата на списък от битове, а не като шестнадесетично число). В tracefs са добавени възможности за одит филтри и тригери. Добавена е команда perf sched stats за събиране и показване на статистика за работата на планирача на задачи.
-
Добавени са опции за компилация LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE и LOGO_LINUX_CLUT224_FILE за определяне на файла с изображение на логото, което ще се показва при зареждане на ядрото вместо стандартното лого с пингвина Tux.
-
- Виртуализация и безопасност
- В системата на асинхронния вход/изход io_uring реализирана възможност за прикрепяне на BPF програми с филтри, контролиращи какви операции могат да извършват конкретни SQE (Submission Queue Entry) операции (подобно на системни повиквания в io_uring). Добавената възможност е аналогична на филтрите за системни повиквания. Филтрите могат да бъдат привързани към определени задачи и те се наследяват при създаването на други процеси след извикване на fork(). При наличие на активни филтри, добавените филтри могат само да наложат допълнителни ограничения, но не могат да деактивират вече съществуващите. Реализираната възможност ще позволи блокиране методи заобикаляне на филтрацията на системни повиквания в sandbox среди, базирани на изпълнението вместо системни повиквания на аналогични операции, предоставяни в io_uring.
- В SELinux е добавена възможност за управление на достъпа до BPF токени, позволяващи непривилегировани процеси да изпълняват някои привилегировани операции с BPF, например, да зареждат BPF програми в ядрото и да създават map структури.
- Добавена е поддръжка на алгоритъма за генериране на цифрови подписи ML-DSA (CRYSTALS-Dilithium), основан на теория на решетките и устойчив на атаки от квантови компютри. Предоставена възможност за използване на ML-DSA за автентикация на ядрените модули.
- от инструменталната лента, ако не е използвана в продължение на 120 дни (някога беше включена по подразбиране и след това беше запазена в много стари профили, въпреки че потребителите на тези профили вече не я ползват). възможност за използване на схеми за генериране на цифрови подписи с алгоритъм SHA-1 за заверка на ядрените модули (поддръжката на зареждането на подписани модули е запазена).
- В записа на одита NETFILTER_PKT добавени полета sport и dport за инспекция на номера на мрежовите портове, а не само на IP адреси.
- За системи с архитетура RISC-V реализирана поддръжка на разширения Zicfiss и Zicfilp, предоставящи хардуерни възможности за прилагане на защита CFI (Control Flow Integrity), блокираща нарушения на нормалния ред на изпълнение на инструкции в резултат на експлойти, които променят съхранените в паметта указатели към функции.
- В хипервизора KVM реализирана възможност за предаване на гост системи информация за поддръжката на разширението ERAPS (Enhanced Return Address Predictor Security), позволяващо премахването на някои операции за нулиране на състоянието на CPU при връщане на управлението на хост системата от госта. Освен това, е добавена поддръжка на свързването на хардуер за проследяване на производителността (PMU, Performance Monitoring Unit) за гост системи, което позволява повишаване на точността на профилирането в сравнение с използването на емулирани PMU.
- Водещ за хипервизора Hyper-V е добавена поддръжка на интерфейса debugfs за преглед на статистика за работата на хипервизора.
- Мрежовата подсистема
- Включена по подразбиране разширение AccECN (Точно Изрично Уведомление за Задръстване), реализиращо подобрена версия на разширението ECN (wikipedia.org), позволяваща на хостовете в случай на пренатоварване да маркират IP пакетите вместо да ги отхвърлят, което дава възможност за определяне на началото на задръстването в комуникационните канали без загуба на пакети. Първоначалното разширение ECN има ограничение, позволяващо изпращането само на един сигнал за пренатоварване в рамките на един цикъл на приемане-предаване TCP (RTT, време за Round-Trip, изпращане на запитване и получаване на отговор). AccECN премахва това ограничение и дава възможност на получателя да предава на изпращача повече от една маркировка за пренатоварване в заглавката на TCP пакета. Алгоритмите за управление на пренатоварването могат да използват получената информация за по-точно реагиране на пренатоварвания и да не прибягват до рязко намаляване на интензивността на изпращане на пакети при наличие на незначително пренатоварване.
- В реализацията на алгоритъма за управление на мрежови опашки Cake е добавена , възможност за обработка на множество опашки за разпределение на натоварването на няколко ядра CPU. Алгоритъмът CAKE се прилага за намаляване на негативното влияние на междинното буфериране на пакети на границата на мрежовото оборудване и е насочен към постигане на максимално възможна пропускателна способност и минимално ниво на забавяне дори на бавни комуникационни канали.
- В сокетите VSOCK, използвани за взаимодействие с виртуални машини, е добавена поддръжка на мрежови пространства от имена (network namespace).
- Добавена е начална реализация на бъдещия стандарт WiFi 8 (802.11bn, WiFi с Ултра Висока Надеждност).
- Добавени са оптимизации, които повишават производителността при обработка на входящи UDP пакети с 12% при стрес тестове в 100-гигабитна мрежа.
- Оборудване
- В драйвера AMDGPU реализирана подкрепа IP блоковете, използвани в новите GPU AMD, като SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 и JPEG 5.3.
- В драйвера Nouveau е подобрено управлението на честотата в системите Tegra 186+.
- В драйвера i915 е добавена начална поддръжка на дисплейния IP блок Xe3p_LPD, използван в процесорите Intel Nova Lake-P.
- Продължена е Работа по развитието на drm-драйвера (Direct Rendering Manager) Xe за GPU на базата на архитектура Intel Xe, използвана в графичните карти Intel от серия Arc и интегрираната графика, започвайки от процесорите Tiger Lake. Добавен е режим Мулти Кю. Добавени са компоненти, необходими за диагностика на замръзвания на GPU в Mesa. Добавена е поддръжка на механизма MERT за управление на достъпа до паметта на GPU.
- Продължена е интеграция на компонентите на драйвера Nova за NVIDIA GPU, снабдени с GSP-микропрограми, използвани от серията NVIDIA GeForce RTX 2000 на базата на микроархитектурата Turing. Драйверът е написан на езика Rust. В новата версия е направена подготовка за реализиране на поддръжка на GPU на базата на микроархитектура Turing и са внесени различни вътрешни промени.
- Добавена е поддръжка на контролери и периферни устройства с многоканален интерфейс SPI (Serial Peripheral Interface), позволяващи прехвърляне на данни в няколко паралелни потока.
- Добавен е драйвер за комбинирани конектори Type-C, използвани в устройствата на чиповете Apple Silicon и комбиниращи интерфейсите USB3, DP-AltMode и Thunderbolt/USB4.
- Добавена е поддръжка за звуковите подсистеми на чиповете Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S и Focusrite Forte.
- Добавена е поддръжка за ARM платформи, SoC и устройства: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur,
- Добавена е поддръжка за смартфони и таблети: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.
Одновременно латиноамериканският Фонд за свободен софтуер сформира вариант напълно свободно ядро 7.0 – Linux-libre 7.0-gnu, почистено от елементи на микропрограми и драйвери, съдържащи несвободни компоненти или участъци от код, чиято област на приложение е ограничена от производителя. В версия 7.0 е извършено почистване от блобове на драйвера iwlwifi. Актуализиран е кодът за почистване в драйверите amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Извършено е почистване на имената на блобовете в dts-файловете (devicetree) за ARM-чипове.
Източник: linux.org.ru
