След като беше разработван два месеца, Линус Торвалдс представи версия 6.10 на ядрото Linux. Среди наиболее заметных изменений: драйвер ntsync с примитивами синхронизации Windows NT, компоненти DRM Panic за реализирането на аналог на „синия екран на смъртта“, прекратяване на поддръжката на старите CPU Alpha, възможност за верификация на целостта в файловата система, базирана на FUSE, ограничаване на достъпа до ioctl чрез механизма Landlock, подсистема за профилиране на операции по разпределение на памет, системен повик mseal(), възможност за криптиран обмен на данни с устройства TPM, поддръжка на високоприоритетни работни опашки в dm-crypt, драйвер panthor за десетото поколение GPU Mali.
В новата версия са приети 14564 поправки от 1989 разработчици, размерът на пача е 41 МБ (промените са засегнали 12509 файла, добавени са 547663 реда код, изтрити са 312464 реда). В предишното издание имаше 15680 поправки от 2106 разработчици, размерът на пача беше 54 МБ. Около 41% от всички представени в 6.10 промени са свързани с драйвери на устройства, около 15% от промените са свързани с обновяване на код, специфичен за хардуерни архитектури, 13% са свързани с мрежовия стек, 5% - с файловите системи и 4% с вътрешните подсистеми на ядрото.
Основни новшества в ядрото 6.10:
- Дискова подсистема, вход/изход и файлови системи
- Добавена е нова fcntl-операция F_DUPFD_QUERY, с помощта на която процесът може да определи, че два различни файлови дескриптора се отнасят за един и същ файл. За разлика от подобни възможности, предоставяни от системния повик kcmp(), F_DUPFD_QUERY не води до разкриване на излишна информация и работи на системи с изключен kcmp.
- В подсистемата FUSE, използвана за реализиране на файлови системи в потребителското пространство, е реализирана възможността за приложение на механизма fs-verity за проверка на целостта и автентичността на файловете.
- В модула dm-crypt, използван за криптиране на блочни устройства, е добавена опция „high_priority“, позволяваща задействането на високоприоритетни работни опашки за повишаване на производителността на мощни сървъри. По подразбиране режимът е изключен, тъй като може да води до повишаване на забавянията при изпълнение на операции, несвързани с криптиране, такива като обработка на звук.
- Добавен е протокол, основан на netlink, за управление на NFS сървъра в ядрото. В потребителското пространство е подготвена утилита nfsdctl на базата на този протокол. Поддръжката за монтиране на NFS v2 е деактивирана по подразбиране (в утилитата mount.nfs поддръжката на NFS v2 беше прекратена още през 2021 година).
- В файловата система XFS продължава работата по реализирането на възможността за използване на утилитата fsck за проверка и коригиране на установени проблеми в онлайн режим, без размонтиране на файловата система. Добавен е ioctl XFS_IOC_EXCHANGE_RANGE за размяна на байтови диапазони между два файла в атомарен режим.
- В Btrfs е реализирана поддръжка за урязване (shrinker) на незакрепените карти на екстентите, което може да бъде полезно за намаляване на консумацията на памет в условия на недостиг на памет в системата. Кодът за компресия на данни и функцията put_file_data() са преминали на използване на фолианти на страниците на паметта (page folios). Преработен е механизмът за блокиране на екстентите по време на операции на обратна запис.
- В FS Ext4 е добавена поддръжка на ioctl FS_IOC_GETFSSYSFSPATH за определяне на местоположението на зададена монтирана файловата система в йерархията /sys/fs.
- Файловите системи OPENPROMFS, ISOFS, QNX6, NILFS2, MINIX и FREEVXFS са преминали на използването на нов API за монтиране на дялове.
- В файловата система EROFS (Extendable Read-Only File System), предназначена за използване на дялове, достъпни в режим само за четене, е добавена поддръжка за алгоритма за компресия Zstandard.
- В Bcachefs е проведена подготовка за извършване на fsck без размонтиране на дяла (онлайн проверка). Добавени са промени и поправки за повишаване на надеждността на работата. Реализирана е възможността за обновление и връщане на формата на файловата система в режим 'nochanges', който деактивира записа и съхранява метаданните само в паметта.
- В файловата система OverlayFS е добавена поддръжка за създаване на временни файлове, използвайки опцията O_TMPFILE.
- Прекратена е поддръжката на механизма за ограничаване на пропускната способност на блоковите устройства 'CONFIG_BLK_DEV_THROTTLING_LOW', който от 2017 година запази статут на експериментален, не е получил разпространение на практика и затруднява поддръжката на подсистемата на блоковите устройства.
- Памет и системни услуги
- Добавен, но деактивиран при компилацията, драйверът ntsync, реализиращ символно устройство /dev/ntsync и набор примитиви за синхронизация, използвани в ядрото на Windows NT. Реализацията на подобни примитиви на ниво ядро позволява значително повишаване на производителността на Windows игри, стартирани чрез Wine. Увеличението на производителността се постига чрез премахване на разходите, свързани с използването на RPC в потребителското пространство. Създаването на отделен драйвер за ядрото на Linux се обяснява с проблемността на коректната реализация на API за синхронизация NT над съществуващите примитиви в ядрото.
- Добавена е подсистема за профилиране на операции по разпределение на паметта в ядрото на Linux, която позволява откриване на течове на памет в ядрото и опростява провеждането на оптимизации за потребление на памет. Подсистемата осигурява ниски разходи, което позволява да бъде използвана не само в отладъчни билдове на ядрото, но и в активни системи.
- Добавена е начална реализация на обработчик на аварийни ситуации в ядрото — DRM Panic, който използва подсистемата DRM (Direct Rendering Manager) за показване на визуален цветен отчет в стил «син екран на смъртта». В следващото издание е планирано добавяне на възможността за показване на лого и QR код на екрана при възникване на аварийно състояние.
- Продължава прехвърлянето на изменения от клона Rust-for-Linux, свързани с използването на езика Rust като втори език за разработка на драйвери и модули на ядрото (поддръжката на Rust не е активирана по подразбиране и не води до включването на Rust в задължителните зависимости за компилация на ядрото). Осуществен е преходът към версия Rust 1.78, който позволява преминаването на използване на стандартната библиотека alloc вместо собственото разклонение. Добавени са абстракции за работа с времето в ядрото (обвивка над структурата ktime_t). Добавена е поддръжка за използване на компоненти на ядрото на езика Rust на системи с архитектура RISC-V.
- В BPF-програмите е реализирана възможността за използване на опашки на чакане (wait queue) в ядрото. Добавени са функциите bpf_preempt_disable и bpf_preempt_enable, позволяващи създаването на секции с код, които не могат да бъдат прекъснати от планировчика на задачи. Осигурен е достъп на BPF-програмите до криптографски функции на ядрото (crypto). Реализирана е поддръжка на JIT-компилация на BPF-програми на системи с 32-битови процесори ARCv2.
- За 32-битови ARM системи е реализирана поддръжка на построяване на ядро с компилатора Clang, включващ режим на защита CFI (Control Flow Integrity), блокиращ нарушения на нормалния ред на изпълнение (control flow) в резултат на експлойти, които променят указателите на функции, съхранявани в паметта.
- Добавена е възможността за директно отразяване чрез mmap() на кольцеви буфери за трасировка, позволяваща предаване на тяхното съдържание в потребителското пространство без допълнително копиране.
- Добавен е системен повик «mseal», позволяващ на процесите да поставят заключване за смяна на определени части от своето адресно пространство. На практика, новият системен повик ще се използва в браузъра Chrome за засилване на изолацията на пясъчника.
- За подсистемата x32, която предоставя хибриден x86_64 ABI, позволяващ използването на 32-битова адресна модел на паметта в 64-битови системи (процесорът работи в 64-битов режим, но използва 32-битови указатели и аритметични операции), е добавена поддръжка на механизма Shadow Stack, който позволява блокирането на работата на много експлойти, използвайки хардуерните възможности на Intel процесорите за защита от перезапис на адреса за връщане от функция при преливане на буфер в стека.
- На системи с архитектура ARM64 в системния повик userfaultfd(), който позволява създаването на обработчици за обращение към неразпределени страници на паметта (page faults) в потребителското пространство, са реализирани възможности, свързани със защита от запис в области на паметта и елементите на таблицата на страниците на паметта.
- Премахнат е кодът за поддръжка на процесорите Alpha 21164 (EV5) и по-ранните серии, произведени от 1995 година. Поддръжката на кода за тези процесори беше усложнена поради липсата на възможност за достъп до паметта на ниво отделни байтове. Alpha беше първата архитектура, на която беше направен порт на ядрото Linux, достъпно първоначално само за системи x86.
- Виртуализация и безопасност
- Добавена е поддръжка за криптирано обменяне на данни с устройства TPM (Trusted Platform Module) и проверка на целостта на транзакциите.
- В LSM модула Landlock, който позволява да се ограничи взаимодействието на група процеси с външната среда, е добавена възможност за прилагане на правила за ограничаване на достъпа до повиквания на ioctl().
- Предложена е опция init_mlocked_on_free, задаваща се на етапа на зареждане, която осигурява нулиране на съдържанието на паметта, защитена от изместване в раздела за обмен, посредством повикването mlock(), ако тази памет бъде освободена без отключване с повикване на munlock(). Използването на тази опция позволява да се избегне задържането на криптографски ключове в паметта в случай на аварийно приключване на работещото с тях приложение.
- В подсистемата crypto е ускорено изпълнението на операции по дисково криптиране с използването на алгоритъма AES-XTS на системи x86_64 с процесори Intel и AMD, поддържащи разширенията VAES, AVX2, VPCLMULQDQ, AVX10 или AVX512.
- Премахната е възможността за събиране на статистика относно използването на криптосистемата на ядрото (CONFIG_CRYPTO_STATS). Тази възможност не се е използвала в практиката и е довела до значително понижаване на производителността, както и до съществена допълнителна натовареност на поддържащите.
- Мрежовата подсистема
- Съществено е увеличена производителността на операциите за изпращане на данни в режим zero-copy при използване на подсистемата io_uring. Добавена е възможност за обединяване на („bundle“) няколко буфера за операции по изпращане и получаване на данни.
- Преписан е кодът за събиране на боклука, използван при изпращане на файлови дескриптори през Unix сокети с използване на съобщения SCM_RIGHTS. Промяната позволява да се реши проблемът с натрупването на зациклени броячи на референции.
- Добавена е възможност за задаване на филтри за протокола PFCP (Packet Forwarding Control Protocol), използван в мрежи 4G и 5G.
- Добавена поддръжка на опцията за мрежови сокети SO_PEEK_OFF, която подобно на аналогичната опция за Unix-сокети позволява да се определи офсетът на данните в опашката, използван от системния повик recv при задаване на флага MSG_PEEK (означава, че данните остават непрочетени и те ще бъдат предоставени отново при следващото извикване на recv).
- В подсистемата io_uring е добавена поддръжка на операцията IORING_CQE_F_SOCK_NONEMPTY, която позволява да се определи наличието на заявки за свързване на мрежовия сокет, очакващи обработка.
- Предложена е реализация на технологията PoE (Power over Ethernet), основана на по-рано достъпен код за поддръжка на PoDL (Power over Data Line) и съвместима с PoE-контролерите Microchip PD692x0 и TI TPS23881.
- За протоколите TCP, DCCP и MPTC е добавена поддръжка на механизма rstreason, позволяващ да се определи причината за изпращане на RST-пакети (например, NO_SOCKET).
- Оборудване
- Включен е драйвера panthor за десетото поколение GPU Mali (G310, G510, G710), в който се прилага технологията CSF (Command Stream Frontend), пренасяща настрана някои функции на драйвера, за да намали натоварването на CPU и предлагаща нов модел за организация на работата на GPU. Промените за поддръжка на новия драйвер също са приети в Mesa и включени в Gallium-драйвера panfrost за GPU Mali.
- В драйвера i915 са добавени PCI-идентификатори на нови дискретни видеокарти Intel Arc (DG2/Alchemist).
- Продължава работата по drm-драйвера (Direct Rendering Manager) Xe за GPU на базата на архитектурата Intel Xe, използвана в видеокартите Intel от семейството Arc и интегрираната графика, започваща с процесорите Tiger Lake. Добавена е поддръжка за CPU Arrow Lake H. Продължава реализацията на поддръжката на процесорите Lunar Lake. Добавена е начална поддръжка на механизма SR-IOV (Single Root I/O Virtualization).
- В драйвера AMDGPU е добавена поддръжка на SMU 14.0 (System Management Unit). Добавена е възможност за използване на нови GPU AMD на системи с архитектура RISC-V.
- Добавен е драйвер за ускорителя на криптографски операции Tegra Security Engine, който може да се използва за ускорение на AES и различни алгоритми за хеширане.
- Добавена е поддръжка на екранни панели LG SW43408, Innolux G121XCE-L01 LVDS, RK3326 GameForce Chi, Crystal Clear CMT430B19N00, POWERTIP PH128800T006-ZHC01, Startek KD050HDFIA020-C020A, Pixel 3a, Khadas TS050 V2, Raydium RM69380, BOE NT116WHM-N44, CMN N116BCA-EA1 и AUO B120XAN01.0.
- Добавена поддръжка на звуковата подсистема на лаптопи Lenovo Thinkbook 13x Gen 4, Lenovo Thinkbook 16P Gen 5, Lenovo Thinkbook 13X и ASUS Zenbook 2024 HN7306W. Добавена е поддръжка на външни звукови карти Vocaster One и Vocaster Two. Добавен е драйвер за усилватели NAU8325 от компанията Nuvoton Technology.
- В драйвера HID-Steam е добавена поддръжка на IMU (Inertial Measurement Unit) на игровия контролер Steam Deck, позволяваща използването на отделен модул evdev за достъп до данните от гироскопа и акселерометъра.
- Включени са промени за поддръжка на ARM SoC Snapdragon X Elite, в който се използва собствен 12-ядрен CPU Qualcomm Oryon и GPU Qualcomm Adreno. Чипът е насочен към използване в лаптопи и ПК и превъзхожда в много производствени тестове чиповете Apple M3 и Intel Core Ultra 155H.
- Добавена е поддръжка на ARM платформи, SoC и устройства: PocketBook 614 Plus, Sony Xperia Z3, Xperia 1 V, Samsung Galaxy S5 China, Motorola Moto G, RK3326 GameForce Chi, Anbernic RG35XX (Plus/H/2024), Airoha EN7581, Radxa ROCK 3C, ArmSom Sige7, Tanix TX1, Toradex Colibri iMX8DX, Renesas RZ/V2H, Forlinx OK3588-C, Protonic MECSBC, Emcraft Systems NavQ+, NXP S32G3, Wolfvision pf5, Amlogic A4/A5, ASUS RT-AC3200, ASUS RT-AC5300, ASrock E3C256D4I, IBM system1 BMC, Meta Harma BMC(AST2600), ASRock X570D4U BMC, Au-Zone Maivin AI Vision Starter Kit.
- Добавена е поддръжка на платки Milk-V Mars, използващи SoC Starfive JH7110, базиран на архитектурата RISC-V.
Междувременно латиноамериканският Фонд за свободен софтуер създаде вариант на напълно свободното ядро 6.10 — Linux-libre 6.10-gnu, почистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чиято употреба е ограничена от производителя. В версия 6.10 е обновен кодът за почистване на блобовете в драйверите Intel i915, rtl8xxxu, qla2xxx и QCAI sahara. Извършено е почистване на имената на блобовете в dts файловете (devicetree) за архитектурата Aarch64. Почистване от блобове е извършено и на новите файлове, добавени в драйверите Adreno, Intel IPU3 и PRUEth. Извършено е почистване на новите драйвери Panthor, Intel IPU6, PRUEth SR1, rtw8703b, tps23881, air_en8811h, Intel ISH HID и pcm6240. Прекратено е почистването на USB драйвера Prism2.5/3 USB, който е бил премахнат от ядрото.
Източник: opennet.ru
