След два месеца разработка Линус Торвалдс представи версия на ядрото Linux 6.16. Сред най-забележителните промени: драйвер за ускорение на OpenVPN, механизъм Kexec HandOver, включване по подразбиране на петстепенни таблици за страници на паметта за x86, премахване на протокола DCCP, блочен драйвер zloop, възможност за изпращане на core-дъмпове през UNIX-сокет, поддръжка на атомарно записване в XFS, offload-обработка на звука за USB-устройства, оптимизации в Ext4, виртуален драйвер TPM (Trusted Platform Module), пълна реализация на Device Memory TCP, поддръжка на неименовани канали в io_uring, подготовка за интеграция на DRM-драйвера Asahi, механизъм „usermode queue“ в драйвера AMDGPU, поддръжка на Intel TDE (Trusted Domain Extensions) и Intel APE (Advanced Performance Extensions).
В новата версия са включени 15924 корекции от 2145 разработчици, размерът на пача е 50 MB (промените са засегнали 13793 файлове, добавени са 655451 реда код, премахнати са 316441 реда). В предишното издание имаше 15945 корекции от 2154 разработчици, размерът на пача бе 59 MB. Около 45% от всички представени в 6.16 промени са свързани с драйверите на устройства, около 16% от промените се отнасят до обновяването на код, специфичен за хардуерни архитектури, 13% са свързани с мрежовия стек, 4% — с файловите системи и 3% с вътрешните подсистеми на ядрото.
Основните нововъведения в ядрото 6.16:
- Дисковата подсистема, вход/изход и файловите системи
- Добавен е драйвер zloop за създаване на зонирани блочни loopback-устройства, монтирани в loop-режим. Драйверът еймулира работата на обикновени блочни устройства, използвайки няколко файла от съществуваща файловата система (по един файл за съхранение на всяка зона). Тази възможност може да бъде полезна за тестване на файлови системи, обработчици на device mapper и приложения относно поддръжката на зонирани устройства, прилагащи разделение на зони от групи блокове или сектори, в които се допуска само последователно добавяне на данни с актуализиране на цялата група блокове.
- В файловата система XFS е реализирана поддръжка на атомарно записване на големи порции данни — няколко блока сега могат да бъдат записвани в атомарен режим (или всички блокове ще бъдат записани успешно, или нито един блок няма да бъде записан).
- В файловата система Ext4 е подобрена производителността на механизма „fast commit“. Добавена е поддръжка за големи страници на паметта (large folios) за обикновени файлове, което е увеличило производителността с 37% при проведените тестове за интензивен последователен вход/изход. Добавена е поддръжка за атомарни операции на запис, обхващащи няколко блока.
- В драйвера за файловата система ext2 поддръжката на механизма DAX, осигуряващ директен достъп до ФС без страничен кеш, е обявена за остаряла. Премахването на DAX от драйвера ext2 е планирано за края на годината. Причината е разглеждането на драйвера ext2 като стабилна еталонна реализация, в която не трябва да се използват специфични функции, които не са получили необходимото разпространение.
- Файловите системи OrangeFS, UFS, BFS и OMFS са преминали на нов API за монтиране на дялове.
- В sysctl е добавена настройката vfs_cache_pressure_denom, за управление на броя на записите в кеша „dentry“ (вътрешно представяне на елементите на директории) при недостиг на памет в системата. Колкото по-висока е стойността, толкова повече записи могат да бъдат премахнати от кеша (по-малко записи остават в кеша) при недостиг на памет.
- В ФС Bcachefs е добавена опцията „rebalance_on_ac_only“, която забранява извършването на операции по ребалансиране и фоново компресиране при захранване на системата от акумулатор. Ускорени са операциите за изтриване на снимки и устройства. Намалено е потреблението на памет при монтиране в режим само за четене. Добавена е възможност за стартиране на някои операции по възстановяване след срив във фонов режим, без да спира работата с ФС.
- На подсистемата за управление на захранването е разрешено само да извършва замразяване на файловите системи и променливи EFI за изчаквателен и спящ режим (ако ФС вече са замразени от обработвача в потребителското пространство, повторното замразяване не се извършва).
- Добавена е възможност за ускорение на работата на EROFS чрез вградения в процесорите Intel ускорител QAT (QuickAssist Technology), който предлага средства за ускорение на изчисленията, свързани с компресия и криптиране.
- В NFS максималният размер на порцията данни за операции за четене и запис е увеличен от 1 до 4 MB (по подразбиране стойността е 1 MB, тъй като не всички клиенти поддържат по-голям размер).
- Непривилегировани потребители, които имат права CAP_SYS_ADMIN в отделно пространство с идентификатори на потребители (user namespace), но нямат разширени права в основното пространство, получиха възможност за използване на механизма fanotify за наблюдение на промените в файловите системи.
- За файловите системи, използващи подсистемата FUSE, е предоставена функционалност за едновременно изчистване на всички кеширани записи за директории (dentries). В подсистемата FUSE е добавена поддръжка за големи фолианти страници памет.
- В FS OverlayFS е реализирана поддръжка за създаване в непривилегировани пространства на слоеве с данни, за които се използва контрол на целостта на базата на модула dm-verity. Тази възможност позволява комбинирането на надеждни слоеве с метаданни с ненадеждни слоеве с данни, обработвани в непривилегировани пространства.
- Памет и системни услуги
- Добавен е механизъм KHO (Kexec HandOver) за стартиране на ново ядро от старо без загуба на състоянието на системата. Преди предаване на контрола на новата версия на ядрото, състоянието на основните подсистеми на ядрото може да бъде сериализирано в памет, която няма да бъде засегната от по-нататъшни операции. Новото ядро, получаващо контрол, възстановява сериализираното състояние обратно. На базата на KHO се развива подсистемата Live Update Orchestrator (LUO), която позволява перезареждане на ядрото без спиране на работата на устройствата.
- Добавен е параметър за изграждане на ядрото CONFIG_X86_NATIVE, позволяващ използването на опцията "-march=native" при компилиране, за да се оптимизира с оглед възможностите на процесора на текущата система.
- Добавена е поддръжка на разширението на архитектурата на командния набор Intel APX (Advanced Performance Extension), предоставящо 16 допълнителни общи регистри (в допълнение към вече съществуващите 16), което позволява да се използва по-малко операции за четене и запис в паметта в кода, за да се увеличи производителността и да се намали консумацията на енергия.
- Добавен е режим за автоматична настройка на политиката за разпределение на памет в NUMA-системите, при който всички тегла на възлите се преработват при появата на нова информация за пропускната способност по време на зареждане или при горещо свързване на памет.
- В реализацията на futex-ите е добавена поддръжка на локални хеш таблици за процеси (local futex_hash_bucket), която, за разлика от преди поддържаните общи хеш таблици за всички процеси, е локална за конкретен процес и се използва съвместно от всички потоци в този процес. Локалните хеш таблици се прилагат само за futex операцията PROCESS_PRIVATE. Освен това, в новото издание е добавена поддръжка на опции FUTEX2_NUMA и FUTEX2_MPOL, които влияят на разположението на futex-ите в паметта, за да бъдат по-близо до процесите, които ги използват.
- За системите x86_64 е включена постоянна поддръжка на петуредни таблици за страници в паметта (параметър CONFIG_X86_5LEVEL, управляващ активирането на петуредни таблици, е премахнат).
- В драйвера intel_pstate, който управлява параметрите за енергийна консумация (P-state) на системи с Intel процесори, е добавена поддръжка за работа на планиращия алгоритъм с оглед на енергийното потребление (EAS — Energy Aware Scheduling) на хибридни процесори, които комбинират високопроизводителни и енергоефективни ядра CPU, като Intel Lunar Lake.
- В sysfs са добавени интерфейси: „/sys/devices/system/cpu/cpuN/cpu_capacity“ за получаване на информация относно възможностите на различните CPU в хибридни процесори и „/sys/devices/system/cpu/cpuidle/intel_c1_demotion“ за управление на възможността CPU да остава в по-продуктивно състояние, дори ако ядрото се опитва да го преведе в по-ниско състояние на енергийна консумация (например, ядрото може да поиска преход в състояние на енергийна консумация C6, но фърмуера при висока интензивност на събуждане на CPU може да го остави в състояние C1).
- За архитектурата ARM64 е включена поддръжка на режим на бавно изпреварване на задачи (PREEMPT_LAZY, lazy preemption), който съответства на режима на пълно изпреварване („full preemption“) за realtime задачи (RR/FIFO/DEADLINE), но отлага изпреварването на обикновените задачи (SCHED_NORMAL) до границата на тика.
- За архитектурата ARM64 е добавена поддръжка за използване на разширения SME (Scalable Matrix Extension), активирана чрез параметър CONFIG_ARM64_SME.
- Продължен е преносът на изменения от клона Rust-for-Linux, свързани с използването на Rust като втори език за разработка на драйвери и модули на ядрото (поддръжката на Rust не е активирана по подразбиране и не довежда до включването му сред задължителните зависимости при компилация на ядрото). За модулите, написани на Rust, е предоставена възможност за използване на configfs. Добавени са абстракции, необходими за разработка на графични драйвери. Разширени са възможностите на модулите alloc, time, str, list, workqueue и page. Добавена е поддръжка на макроса „assert!“ в тестовете на базата на KUnit. Въведен набор от абстракции за управление на честотата на CPU и използване на API, свързани с управление на енергийното потребление. Въведена е поддръжка на структурата от данни ‘xarray’.
- За архитектурата RISC-V е пренесена реализацията на системния вик getrandom(), оптимизирана с помощта на механизма vDSO (виртуален динамичен споделен обект), който позволява пренос на обработчика на системния вик от ядрото в пространството на потребителя и избягване на превключвания на контекста. В проведените тестове оптимизацията е ускорила получаването на случайни числа 17 пъти. За RISC-V е реализирана поддръжка на векторни разширения Zicbop, Zabha и Svinval, приложими в процесорите SiFive.
- За архитектурата LoongArch лимитът на броя на CPU в системата е увеличен от 256 на 2048. Добавена е поддръжка на планировщика на задачи SCHED_MC (многоядерен).
- Добавена е възможност за използване на Unix-сокети за предаване на файлови дескриптори. За деактивиране на тази възможност приложенията могат да използват флага SO_PASSRIGHTS в setsockopt().
- Предоставена е възможност за мапване на кръговия буфер, използван за трасировка на работата на ядрото, в паметта на пространството на потребителя.
- Обработчиците за crash-dump, използвани за формирване на отчет за проблема след неочаквано спиране на ядрото, сега могат да използват LUKS-ключовете, използвани от сринатото ядро, за запазване на crash-дампове в шифровани файлови системи.
- В системата за асинхронен вход/изход io_uring е добавена операция IORING_OP_PIPE за създаване на безименни канали, която е подобна на системния вик pipe2, с изключение на поддръжката на фиксирани файлови дескриптори.
- Добавена е опция за командния ред на ядрото „rt_group_sched“ за управление на включването на планировчика на изпълнение на групи realtime-задачи (SCHED_RR). Опцията е аналогична на настройката RT_GROUP_SCHED в Kconfig.
- За устройства на базата на шина CXL (Compute Express Link), използвана за организиране на високоскоростна комуникация между CPU и устройства за памет, е реализирана поддръжка на разширения RAS (Reliability, Availability, Serviceability), които позволяват реализирането на различни схеми за откриване и корекция на грешки. CXL позволява свързването на нови области на паметта, предоставени от външни устройства за памет, и тяхното използване като допълнителни ресурси на физическото адресно пространство за разширяване на системната оперативна памет (DDR) или постоянна памет (PMEM).
- Необходимата за изграждане на ядрото минимална версия на GCC за всички архитектури е повишена до клон GCC 8. За изграждането е необходима и версия на пакета binutils поне 2.30.
- Премахнат е системният извикване uselib(), който отдавна е обявен за остарял и вместо него за споделен достъп на програмите до споделени библиотеки се използва mmap().
- Виртуализация и сигурност
- Добавена е начална поддръжка за използването на механизма Intel TDX (Trusted Domain Extensions) за защита на гостуващи системи, работещи под управлението на хипервизор KVM, от намеса и анализ от страна на администратора на хост-системата и физически атаки на хардуера. Защитата се осигурява чрез криптиране на паметта. виртуални машини.
- Добавен е виртуален драйвер TPM (Trusted Platform Module), позволяващ на виртуалните машини да взаимодействат с TPM-устройства (Trusted Platform Module), емулирани от модула SVSM (Secure VM Service Module).
- Възобновена е възможността за използване на GCC-плагина randstruct, който рандомизира разположението на структурите данни на етапа на компилация, за да усложни експлоатацията на уязвимости.
- Добавена е възможността за използване на технологията IMA (Integrity Measurement Architecture) за проверка на целостта при стартиране на нови ядра чрез системното извикване kexec.
- Направена е работа по намаляване на влиянието върху производителността от използването на SELinux. За ускоряване на работата е добавен кеш с резултатите от проверките на достъп до директории. В правилата genfscon е добавена възможността за използване на маски.
- В кода за взаимодействие с EFI е предоставена възможност за вграждане на секцията SBAT (UEFI Secure Boot Advanced Targeting) с метаданни за оттеглени версии на зареждащи компоненти.
- В зареждащите модули е реализиран превод на секцията «.static_call_sites» в режим само за четене след завършване на инициализацията.
- За 64-битови ARM системи в хипервизора KVM е реализирана поддръжка на вложена виртуализация (по подразбиране изключена).
- В хипервизора KVM е обявена стабилна поддръжка на архитектурата RISC-V.
- Мрежова подсистема
- Приет е драйвер ovpn, който значително ускорява производителността на OpenVPN, като изнася операциите по шифроване, обработка на пакети и управление на връзката на страната на ядрото на Linux. Драйверът позволява да се избегнат разходите, свързани със смяната на контекста, предоставя възможност за оптимизация чрез директен достъп до вътрешните API на ядрото и изключва бавното предаване на данни между ядрото и потребителското пространство (шифроването, разшифроването и маршрутизацията се изпълняват от модула без изпращане на трафик към обработчика в потребителското пространство).
- В механизма Device Memory TCP е добавена поддръжка за изпращане на данни от паметта на устройството (TX път). Преди това, за улеснение на интеграцията на Device Memory TCP в ядрото, функционалността беше ограничена единствено до приемането на данни (RX път). Device Memory TCP позволява използването на мрежови сокети за директно изпращане на съдържанието на паметта на периферното устройство през мрежата (режим zero-copy), а също така и директно разполагане на съдържанието на мрежовите пакети в областта на паметта на устройството от страната на получателя. Данните, предавани в пакетите, преминават от мрежовата карта в паметта на периферното устройство (DMABUF), например, в видеопаметта на GPU, или от паметта на устройството директно в мрежовата карта, заобикаляйки CPU, а заглавията на пакетите се поставят в обикновените буфери на ядрото.
- Предоставена е възможност за изпращане на съдържанието на core-дампове през сокет AF_UNIX, което позволява създаването на по-безопасни обработчици на core-дампове в потребителското пространство, които не зависят от привилегировани процеси, извиквани от ядрото.
- Поддръжката на мрежовия протокол DCCP (Datagram Congestion Control Protocol) е премахната, тъй като не получи разпространение и в продължение на пет години остава без поддръжка в ядрото. Премахването на DCCP от ядрото ще отстрани пречките, които възпрепятстват преработката на структурата на данните inet_connection_sock за повишаване на ефективността на работа на TCP стека. Поддръжката на netfilter модули за филтриране на DCCP пакети остава запазена.
- За улеснение на обработката на грешки при използване на сокети SO_PEERPIDFD, ядрото сега може да предава pidfd за вече приключили процеси (pidfd е свързан с конкретни процеси и за разлика от pid не се преразпределя).
- С помощта на BPF сега е възможно да се създават обработвачи за управление на опашките на пакети в мрежовия стек (qdiscs), за да се влияе на реда на обработка на мрежовите пакети.
- В мрежовата файлова система AFS е внедрен GSSAPI (Generic Security Services API) за управление на криптиране на връзките с сървъри YFS и OpenAFS.
- Внесени са значителни оптимизации. Преработена е организацията на заключванията за таблиците на маршрутизация IPv6 (някои операции с маршрути сега се изпълняват до 3 пъти по-бързо). Ускорено е софтуерното изчисление на контролни суми crc32c. Движещата сила GRO за тунелиран UDP трафик е ускорена с 10%. Подобрена е автоматичната настройка на входящия буфер за TCP и повишени са приложените по подразбиране лимити (в проведените тестове, пропускателната способност за единични потоци през канал от 200Gbs е увеличена с 60%).
- В Netfilter е добавена възможността за използване на маски в имената на мрежови устройства, използвани в netdev и flowtable. В инфраструктурата nft trace е интегрирана информация за проследяване на връзките (conntrack). Извличането на таблиците за проследяване на връзките (conntrack) чрез procfs е ускорено.
- Оборудване
- Добавена е поддръжка за прехвърляне на обработката на звукови потоци на страната на звуковите устройства с интерфейс USB (USB audio offload). Това изменение значително намалява консумацията на енергия на портативни устройства, като позволява продължаване на обработката на звуковия поток, докато останалата система е в състояние на заспиване. По-рано в ядрото за платформата Android имаше специфична реализация на offload-обработката на звук за USB устройства, а сега в основното ядро се появи универсална реализация, която могат да използват всички проекти.
- Продължена интеграция на компонентите на драйвера Nova за GPU NVIDIA, снабдени с GSP фърмуер, използвани от серията NVIDIA GeForce RTX 2000 на базата на микроархитектура Turing. Драйверът е написан на езика Rust. В допълнение към добавения в предишната версия компонент nova-core, който реализира основно ниво на абстракции над софтуерните интерфейси на GSP фърмуерите, в версия 6.16 е добавена начична реализация на DRM-драйвера nova-drm (Direct Rendering Manager) за взаимодействие с GPU от пространство на потребителя.
- Започна процесът на интеграция в ядрото на DRM-драйвера Asahi за GPU Apple AGX, използвани в чиповете на Apple Silicon. Драйверът е написан на Rust. В този етап в ядрото са включени само хедър файлове с UAPI от драйвера Asahi, необходими за Mesa, а основният код на драйвера Asahi ще бъде интегриран по-късно.
- В драйвера Nouveau е добавена поддръжка за GPU NVIDIA от семейството Hopper и Blackwell.
- Продължава работата над DRM драйвера (Direct Rendering Manager) Xe за GPU на базата на архитектура Intel Xe, използвана в видеокартите Intel от серийната Arc и вградена графика, започвайки от процесорите Tiger Lake. Добавена е възможност за използване на различни файлове с фърмуер за различни семействата GPU Intel.
- В драйвера AMDGPU е реализирана поддръжка на механизма „usermode queue“, който позволява създаването на собствени работни опашки в пространство на потребителя и изпращането им директно към GPU без обращение към планировчика в ядрото. Поддръжката на „usermode queue“ е включена за GPU Navi 4X и GFX 12.
- Добавена е поддръжка за звуковите системи Intel WCL (Whiskey Lake), AMD ACP 7.x (Audio Co-Processor), Cirrus Logic CS35L63 и CS48L32, Everest Semiconductor ES8375 и ES8389, Pioneer DJM-V10, Longsoon-1 AC’97, NVIDIA Tegra264, Richtek ALC203, RT9123 и Rockchip SAI, както и нови платформи Intel AVS.
- Добавена е поддръжка за ARM платформи, SoC и устройства: Samsung Exynos7870, Qualcomm Snapdragon X1P42100, Qualcomm MSM8926, RK3562, NXP i.MX94, Renesas RZ/V2N, Amlogic S6/S7/S7D, WonderMedia wm8950, Amlogic s805y, Allwinner A523, Toradex Verdin AM62P, ROCK 5B+, Nitrogen8M Plus, Retronix R-Car V4H Sparrow Hawk, MT8186 Ponyta Chromebook, VIA APC Rock/Paper, Renesas rz/t2h, ASUS Transformer Pad LTE TF300TL, LG Nexus 4, Google Pixel 4a, Raspberry Pi 2.
- Премахнат е драйвера за платки за захващане на видео на чиповете STA2X11.
В същото време латинскоамериканският Фонд за свободен софтуер създаде версия на напълно свободно ядро 6.16 — Linux-libre 6.16-gnu, почистено от елементи на фърмуер и драйвъри, съдържащи несвободни компоненти или участъци от код, които са ограничени от производителя. В изданието 6.16 е неутрализирано зареждането на блобовете в новите драйвъри Intel qat 6xxx crypto, ST vd55g1 сензор, ath12k AHB wifi, Aeonsemi AS21xxx и MediaTek 25Gb Ethernet. Извършено е почистване на имената на блобовете в dts-файловете (devicetree) за ARM-чиповете Qualcomm и MediaTek. Обновен е кодът за почистване на блобовете в драйверите Nova Core, Nouveau, Realtek r8169 Ethernet, Qualcomm Iris, Venus, Mediatek mt7996 wifi, Qualcomm ath11k и ath12k wifi, Texas Instruments tas2781 и Renesas R-Car gen4 PCIe.
Източник: opennet.ru
