След като работи два месеца, Линус Торвалдс представи новата версия на ядрото 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 е преминала на използване на големи листи от страници за памет (large folios).
- Възстановена работата по драйвера 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», позволяваща да се увеличи производителността на подкачката. Ускорението се постига благодарение на намаляване на конкуренцията за достъп до кеша за подкачка, по-ефективно търсене в кеша и намаляване на фрагментацията. Бекенд на базата на Swap Table е използван за кеширане на подкачката вместо бекенда XArray и е позволил в теста redis-benchmark с BGSAVE да увеличи броя на обработваните заявки с 22%.
-
Добавена е поддръжка на новото разширение в Clang 22 Анализ на безопасността на нишките, позволяваща на етапа на компилация да се идентифицират потенциални състояния на гонка и грешки, причинени от неправилно задаване на блокировки. Разширението предлага серия атрибути, като 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) за реални задачи (RR/FIFO/DEADLINE), но забавя изтикването на обикновени задачи (SCHED_NORMAL) до границата на тика. Внесеното закъснение води до намаляване на случаите на изтикване на притежателите на блокировки, което позволява производителността да се доближи до конфигурации, които използват модела на доброволно изтикване (voluntary preemption), т.е. PREEMPT_LAZY позволява запазване на възможностите за пълно изтикване относно реални задачи, но минимизира спадовете в производителността за обикновени задачи.
Включването на 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, за търсене на отладъчна информация задействан бинарно търсене, което повиши ефективността на зареждането на 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 за удостоверяване на модули в ядрото.
- Премахната възможност за използване на схеми за генериране на цифрови подписи с алгоритъм SHA-1 за удостоверяване на модули в ядрото (поддръжката на зареждане на подписани модули остава).
- В записа на одита NETFILTER_PKT добавени полета sport и dport за инспектиране на номера на мрежови портове, а не само на IP адреси.
- За системи с архитектура RISC-V е реализирана поддръжка на разширения Zicfiss и Zicfilp, предоставящи хардуерни възможности за приложение на CFI (Control Flow Integrity) защита, блокираща нарушения на нормалния ред на изпълнение на инструкции (control flow) в резултат на прилагане на експлойти, променящи съ хранят в паметта указатели на функции.
- В хипервизора KVM е реализирана възможност за предаване на гостови системи информация за поддръжка на CPU разширение ERAPS (Enhanced Return Address Predictor Security), позволяващо да се избегнат някои операции по нулиране на състоянието на CPU при връщане на управлението на хоста от гостовата система. Освен това, е добавена поддръжка за проследяване на производителността (PMU, Performance Monitoring Unit), което повишава точността на профилирането в сравнение с емулаторите на PMU.
- Драйвера за хипервизор Hyper-V е добавена поддръжка на интерфейса debugfs за преглед на статистиката за работата на хипервизора.
- Мрежова подсистема
- По подразбиране е активирано разширението AccECN (Accurate Explicit Congestion Notification), което реализира подобрена версия на разширението ECN (wikipedia.org), позволяваща на хостовете при претоварване да маркират IP пакетите вместо да ги отхвърлят, което дава възможност за идентифициране на началната фаза на задръстванията в мрежите без загуба на пакети. Оригиналното разширение ECN има ограничение, позволяващо изпращането на само един сигнал за претоварване в рамките на един цикъл на предаване и приемане TCP (RTT, Round-Trip Time, изпращане на заявка и получаване на отговор). AccECN премахва това ограничение и позволява на получателя да предаде на изпращача повече от една маркировка за претоварване в заглавието на TCP пакета. Алгоритмите за управление на претоварването могат да използват получената информация за по-точно реагиране при претоварвания и да избягват рязкото намаляване на честотата на изпращане на пакети при минимални претоварвания.
- В реализацията на алгоритма за управление на мрежови опашки Cake е добавена възможност за обработка на множество опашки за разпределяне на натоварването на няколко ядра на CPU. Алгоритъмът CAKE се прилага за намаляване на негативното влияние на междинното буфериране на пакетите в граничното мрежово оборудване и е насочен към постигане на максимална производителност и минимални закъснения дори на бавни комуникационни канали.
- В сокети VSOCK, използвани за взаимодействие с виртуални машини, е добавена поддръжка на мрежови имена (network namespace).
- Добавено началната реализация на бъдещия стандарт WiFi 8 (802.11bn, Ultra High Reliability 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. Добавен е режим Multi Queue. Добавени са компоненти, необходими за диагностика на зависвания на 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
