Релиз на ядрото Linux 7.0

След като преминаха два месеца разработки, Линус Торвалдс представи версия 7.0 на ядрото Linux. Някои от най-забележителните промени включват: правила за използване на 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 (1, 2, 3):

  • Дискова подсистема, вход/изход и файлови системи
    • Реализирана е инфраструктура 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 (Extendable Read-Only File System), предназначена за използване на дялове, достъпни в режим само за четене, за компресия по подразбиране се използва алгоритъма LZMA. Опционално са налични алгоритмите DEFLATE и Zstandard, които вече не са обозначени като експериментални. Реализирано е споделяне на записи в страничния кеш (page-cache) за идентични файлове в отделни ФС EROFS.
    • Режим laptop_mode, спестяващ енергия чрез отлагане и комбиниране на операции за запис на твърди дискове с цел удължаване на времето за работа в режим на сън и намаляване на броя на събужданията, е премахнат. Този режим вече не е актуален, тъй като в съвременните мобилни устройства твърдите дискове са заменени от SSD.
    • Файловата система 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 е преместена от експериментални в основни функции на ядрото. Поддръжката на Rust не е активирана по подразбиране и не води до включване на Rust в задължителните зависимости за компилация на ядрото.
    • Завършена е интеграцията в ядрото на механизма „Swap Table“, който подобрява производителността на подкачката. Ускорението се постига чрез намаляване на конкуренцията за достъп до кеша за подкачка, по-ефективно търсене в кеша и намаляване на фрагментацията. Бекендът, основан на Swap Table, е включен за кеширане на подкачката вместо бекенда XArray и позволи в теста redis-benchmark с BGSAVE да се увеличи броят на обработваните заявки с 22%.
    • Добавена е поддръжка на новото разширение Thread Safety Analysis в Clang 22, което позволява при компилация да се откриват потенциални състояния на гонки и грешки, причинени от некоректно поставяне на блокировки. Разширението предлага серия от атрибути, като GUARDED_BY(…), REQUIRES(…), RELEASE(…) и ACQUIRE(…), които позволяват маркиране на функциите, обхванати от блокировки, и разделяне на обхвата на блокировките (определяне на контекста). При компилацията се извършва проверка на правилното прилагане на примитиви за синхронизация, като мютексите, на базата на оценка на активността или неактивността, свързана с тези контексти.
    • В системния повик 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 като втори език за разработка на драйвери и модули на ядрото. Благодарение на предварително интегрираната библиотека „syn“, която опростява написването на сложни макроси, беше постигнато намаляване на размера на 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 реализирана е възможност за предаване на хост системите информация относно поддръжката от процесора на разширението ERAPS (Enhanced Return Address Predictor Security), позволяващо да се избегнат някои операции за възстановяване на състоянието на CPU при връщане на управлението на хоста от гост системата. Освен това е добавена поддръжка за закрепване на хост системите с оборудване за наблюдение на производителността (PMU, Performance Monitoring Unit), което позволява повишаване на точността на профилирането спрямо използването на емулирани PMU.
    • В драйвера за хипервизор Hyper-V е добавена поддръжка на интерфейса debugfs за преглед на статистиката за работа на хипервизора.
  • Мрежовата подсистема
    • По подразбиране е активирано разширението AccECN (Accurate Explicit Congestion Notification), което реализира подобрена версия на разширението ECN, позволяваща на хостовете при претоварване да маркират 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 за GPU NVIDIA, оборудвани с 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 чипове.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster