След два месеца разработка, Линус Торвалдс представи версия на ядрото 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 е реализирана поддръжка на атомарно записване на големи порции данни — няколко блока сега могат да бъдат записани в атомарен режим (или всички блокове ще бъдат успешно записани, или нито един блок няма да бъде записан).
- В файлoвой система 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 може да бъде сериализирано в област на паметта, която няма да бъде засегната от по-нататъшни операции. Новото ядро, получаващо контрол, възстановява сериализираното състояние отново. На база 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 да остане в по-производително състояние, дори когато ядро се опитва да преведе CPU в по-ниско енергийно състояние (например, ядро може да поиска преход към енергийно състояние C6, но фърмуерът при голяма интензивност на пробуждане на CPU може да го остави в състояние C1).
- За архитектура ARM64 е включена поддръжка на режим на лениво изместване на задачи (PREEMPT_LAZY, lazy preemption), който съответства на режима на пълно изместване („full preemption“) за реалтайм задачи (RR\/FIFO\/DEADLINE), но забавя изместването на обикновени задачи (SCHED_NORMAL) до границата на тика.
- За архитектура ARM64 е добавена поддръжка за използване на разширения SME (Scalable Matrix Extension), която се активира чрез параметър CONFIG_ARM64_SME.
- Продължава трансферът на промените от клона Rust-for-Linux, свързани с използването на Rust като втори език за разработка на драйвери и модули на ядрото (поддръжката на 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().
- Виртуализация и безопасност
- Добавена е началенa поддръжкa на механизма Intel TDX (Trusted Domain Extensions) за защита на гостуващите системи, работещи под управлението на хипервизора KVM, от намеса и анализ от страна на администратора на хост системата и физически атаки върху оборудването. Защитата се осигурява чрез шифруване на паметта. на виртуални машини.
- Добавен е виртуален драйвер TPM (Trusted Platform Module), който позволява на виртуалните машини да взаимодействат с TPM устройства, емулирани от модула 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 path). По-рано, за опростяване на интеграцията на Device Memory TCP в ядрото, функционалността беше ограничена само до приема на данни (RX path). 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
