След два месеца разработка Линус Торвалдс представи версия на ядро Linux 6.14. Сред най-значимите промени са: драйвер ntsync с примитиви за синхронизация Windows NT, настройка за балансировка на операции по четене в Btrfs RAID1, поддръжка на reflink в XFS в режим realtime, възможност за некеширано буферирано входно/изходно, dmem cgroup за ограничаване на паметта на GPU, използване на io_uring в FUSE, делегиране на атрибути в NFS, поддръжка на атомарно записване в Device mapper, ускорение на символични линкове, управление на възможността за изпълнение на скриптове, поддръжка на чипове Qualcomm Snapdragon 8 Elite, драйвер за NPU AMD.
В новата версия са включени 12115 корекции от 1984 разработчици, размерът на патча е 39 MB (промените засягат 10170 файла, добавени са 531586 реда код, премахнати са 235999 реда). В предишното издание имаше 14172 корекции от 2086 разработчици, размерът на патча беше 46 MB. Около 41% от всички представени в 6.14 промени са свързани с драйверите на устройства, около 13% от промените имат отношение към обновяване на код, специфичен за хардуерни архитектури, 14% са свързани с мрежовия стек, 7% — с файловите системи и 4% с вътрешните подсистеми на ядрото.
Основните нововъведения в ядро 6.14:
- Дискова подсистема, вход/изход и файлови системи
- В файловата система Btrfs е добавена поддръжка на нови методи за балансировка на операции по четене между устройствата, включени в масив RAID1. Освен предишното разпределение на натоварването на базата на идентификатори на процеси (pid), в новата версия са предложени три нови режима на балансировка: «rotation» (равномерно разпределение на натоварването между всички устройства, режимът е включен по подразбиране); «latency» (разпределение с оглед на закъсненията, може да бъде полезно при повреди или нестабилна работа на устройствата); devid (ръчно управление). За променa на режима на балансировка е добавен интерфейс «/sys/fs/btrfs//read_policy». Сред другите промени в Btrfs — реализиране на ioctl FS_IOC_READ_VERITY_METADATA.
- Добавен е режим за некеширане на буферизирания вход/изход, при който данните се изтриват от страничния кеш веднага след като операциите за четене или запис приключат. Това изменение може да е полезно при използването на много бързи устройства за съхранение, кэширане на операции с които в оперативната памет е излишно. За такива устройства новият режим позволява да се избегне ненужното изразходване на памет от страничния кеш, без да се прибягва до усложненото API за директен вход/изход (Direct I/O).
- В fsnotify, механизма за следене на изменения в файловата система, е добавено ново събитие FS_PRE_ACCESS, което се генерира на етапа преди достъпа до съдържанието на файла. Събитието се обработва в синхронен режим, т.е. ядрото изпраща събитието и изчаква получаване на отговор. Ако отговорът бъде получен — операцията се изпълнява, а ако е възникнал проблем — системният повик връща код за грешка в пространство на потребителя. С помощта на FS_PRE_ACCESS в процеса на потребителско ниво, например, може да се организира запълване на файл по време на готовността на данните в бавно хранилище.
- В подсистемата FUSE, позволяваща създаването на реализации на файлови системи в пространство на потребителя, е добавена поддръжка за обмен на данни между ядрото и обработчика в пространство на потребителя с използване на механизма за вход/изход io_uring. Това изменение позволява повишаване на производителността на FUSE чрез намаляване на превключванията на контекста между ядрото и пространството на потребителя.
- В файловата система XFS е добавена възможността за използване на обратна мапинг (rmap, reverse-mapping) в режим на работа с предсказуеми закъснения („realtime device“). Обратният мапинг позволява да се определи за съхранение на кой файл се използва конкретен блок на устройството за съхранение. С помощта на rmap в XFS за realtime режима е реализирана поддръжка на операцията reflink, позволяваща създаването на копия на файлове чрез клониране на метаданните на файла и създаване на връзка към вече съществуващи данни без тяхното фактическо копиране.
- В VFS е реализирано кеширане на размера на символични връзки, което ускори с 1.5% изпълнението на операцията readlink (в теста с /initrd.img в ext4). Кеширането е включено в файловите системи ext4 и tmpfs.
- В реализация NFSv4.2 е добавена поддръжка на делегирането на файлови атрибути, което позволява управление на атрибутите на файловете, като например времето на промяна (mtime), от страната на NFS клиента, без необходимост от изпращане на промените обратно на сървъра. В NFS е подобрена поддръжката на протокола «LOCALIO», който позволява да се определи дали клиентът и сървърът NFS се намират на един и същи хост, за да се използват съответните оптимизации, като например използването на директно записване/четене (Direct I/O).
- Подобрена е производителността на операциите четене в файловите системи NETFS, CIFS и AFS (Файлова система на Андрю).
- В Squashfs е включен режим на директно зареждане на блокове в страницовия кеш (SQUASHFS_FILE_DIRECT), позволяващ да се заобиколи необходимостта от отделен кеш read_page. Това изменение е намалило размера на паметта, използвана при работа с Squashfs.
- В системния повик statx() е реализиран флаг STATX_DIO_READ_ALIGN, за определяне на необходимото изравняване за операции по четене от файл.
- В файловата система Bcachefs е обновен и стабилизиран форматът на дисковите структури. Всички бъдещи промени в формата ще бъдат класифицирани като незадължителни и ще бъдат реализирани под формата на опционални добавки. Значително е увеличена скоростта на проверка на целостта на файловата система. Освен това, в Bcachefs е подобрена работата в режим само за четене; отстранени са проблемите, водещи до достъп до памет след освобождаване (use after free); решени са проблеми с reflink указателите в fsck; коригирана е обработката на перезапускането на транзакцията.
- Върнат е модулът md-linear, предназначен за обединяване на блокови устройства. Този модул преди беше обявен за остарял и премахнат от ядрото 6.8, но се оказа, че е търсен и поради това сега е възстановен.
- Файловите системи F2FS и SQUASHFS са преминали към използване на фолианти на страниците в паметта (page folios).
- Файловите системи OCFS2 и DLMFS са преминали към използване на нов API за монтиране на дялове.
- В драйвера null_blk е реализиран атрибутът «rotational», задаван чрез configfs и позволяващ симулиране на работа с устройство, базирано на въртящи се дискове, с цел улесняване на тестването на функции в ядрото.
- В системата Device mapper и в модулите dm-mirror, dm-io, dm-table, dm-linear, dm-stripe и dm-raid1 е реализирана поддръжка за атомарно записване.
- Памет и системни услуги
- Завършена интеграция в ядрото на драйвера ntsync, реализиращ символично устройство /dev/ntsync и набор примитиви за синхронизация, използвани в ядрото на Windows NT. Реализацията на подобни примитиви на ниво ядро позволява значително повишаване на производителността на Windows игри, стартирани с помощта на Wine. Увеличението на производителността се постига благодарение на избягването на разходите, свързани с използването на RPC в потребителското пространство. Създаването на отделен драйвер за ядрото на Linux се обяснява с трудностите при коректната реализация на NT синхронизационното API върху съществуващите примитиви в ядрото.
- Добавен е нов контролер cgroup DMEM за отделно отчитане на области от паметта на устройства, като GPU. DMEM позволява създаването на отделни cgroup за различни задачи, работещи с GPU, за да могат да се изпълняват, без да си влияят. Новата възможност решава проблема с принудителното прекратяване на операции с GPU при изчерпване на наличната памет, благодарение на отчитането на отразената памет на GPU и използваната от драйверите памет на CPU в отделни cgroup.
- Внесени са оптимизации за мащабиране на операцията по изчистване (flush) на кеша TLB (Translation Lookaside Buffer), използван за ускоряване на преобразуването на виртуални адреси в физически. Добавените оптимизации се свеждат до отложено обновяване на някои структури от данни по време на преминаване на контекста, което позволява повишаване на производителността при преминаване през някои тестове.
- Повишена производителност на механизма MGLRU (Multi-Generational LRU), използван за определяне на това кои страници от паметта се използват и кои могат да бъдат изтласкани в зона за размяна.
- Продължава преместването на промени от клона Rust-for-Linux, свързани с използването на езика Rust като втори език за разработка на драйвери и модули на ядрото (поддръжката на Rust по подразбиране не е активирана и не води до включване на Rust в списъка с задължителни зависимости за компилиране на ядрото). Предоставена е възможност за използване в кода на ядрото на макроса „derive(CoercePointee)”, който позволява използването на умни указатели с trait-обекти. В състава на ядрото са включени Rust-обвивки за PCI, платформи, Open Firmware, символьни устройства и някои функции за вход / изход. Грег Кроа-Хартман (Greg Kroah-Hartman), отговарящ за поддръжката на стабилния клон на ядрото на Linux, охарактеризира текущото състояние като „почти готовност за написване на реален драйвер на Rust“.
- В сглобяемите сценарии е предложен нов код за генериране на версии на отладъчни символи за зареждаеми модули, който сега използва информация от отладъчните записи в формат DWARF, вместо да разглежда директно изходния код. Промяната позволява прилагане на версиониране на отладъчните символи за модули, написани на езика Rust. Старата имплементация също е оставена в ядрото, а изборът на генератор се осъществява на ниво опции за сглобяване.
- За архитектурата PowerPC е реализирана поддръжка на режима на лениво премахване на задачи (PREEMPT_LAZY), който отговаря на режима на пълно премахване („full preemption“) за реалновременни задачи (RR / FIFO / DEADLINE), но отлага премахването на нормалните задачи (SCHED_NORMAL) до границата на тига.
- В подсистемата за профилиране на производителността „perf“ е добавена поддръжка на броячи за енергийна консумация на процесорите AMD. Добавена е възможност за работа на системи, притежаващи до 2048 ядра CPU.
- Предоставена е възможност за използването на sysctl-параметъра pid_max с пространства от имена на идентификатори на процеси (ID namespace). Параметърът pid_max е предназначен за ограничаване на максималната стойност на идентификаторите на процесите (PID) и сега може да се използва за ограничаване на максимално възможния брой процеси, стартирани в указаното пространство от имена. Обработката на параметъра се извършва йерархично, т.е. ограниченията във външните пространства от имена се разпространяват и върху вложените пространства от имена.
- При стартиране на системния повик execveat, в файловата система /proc сега ще се показва името на стартирания файл, а не номера на файловия дескриптор.
- В изходния код на ядрото (в каталога samples/vfs) е добавена утилита mountinfo, демонстрираща използването на системните повикове statmount() и listmount().
- В подсистемата BPF са предложени нови функции bpf_local_irq_save() и bpf_local_irq_restore() за временно деактивиране на прекъсвания на локалния CPU. Функциите могат да се използват за реализиране на структури, при обработката на които прекъсванията не бъдат спирани.
- В системния повик madvise() при използване на флаговете MADV_DONTNEED и MADV_FREE е осигурено освобождаването на таблиците с паметни страници, свързани с освобождаваната адресна зона, тъй като в някои ситуации празните страници памет могат да заемат значително количество памет.
- За архитектурата OpenRISC е реализирана поддръжка на механизма за повторяеми последователности (rseq, restartable sequences), предназначен за бързо атомарно изпълнение на операции, които в случай на прекъсване от друг поток се отменят и се опитва повторно изпълнение.
- Извършена е реорганизация на кода с реализиране на алгоритмите CRC32 и CRC-T10DIF, който вече не се пресича с подсистемата crypto и се извиква директно от библиотечния интерфейс. Промяната е опростила кода и е увеличила неговата ефективност.
- В системата за асинхронен вход/изход io_uring е добавен интерфейс за предаване на допълнителни метаданни за целостта при извършване на операции по четене и запис.
- Виртуализация и безопасност
- В системния повик execveat е добавен флаг AT_EXECVE_CHECK, който позволява проверка на допустимостта за изпълнение на файл без неговото фактическо стартиране, но с оглед на политиките за сигурност, правата на достъп и активните LSM-модули. За използване в комбинация с AT_EXECVE_CHECK са предложени securebit-флаговете SECBIT_EXEC_RESTRICT_FILE и SECBIT_EXEC_DENY_INTERACTIVE, които могат да бъдат използвани за ограничаване на изпълнението на файлове със скриптове на интерпретируеми програмни езици. Флагът SECBIT_EXEC_RESTRICT_FILE предписва на компилаторите и интерпретаторите да използват опцията AT_EXECVE_CHECK за проверка на допустимостта за изпълнение, а флагът SECBIT_EXEC_DENY_INTERACTIVE забранява обработването на интерактивни команди. Основната идея на промяната е възможността за прилагане на политиките за сигурност не само към традиционните изпълними файлове, но и към текстови файлове със скриптове, които могат да бъдат зареждани чрез стартиране на интерпретатора (т.е. забраната за изпълнение може да бъде реализирана не само при стартиране на './script.sh', но и при изпълнение в формата 'sh script.sh').
- На системите x86 е реализирана поддръжка на защитени таймери за гостови системи, които не позволяват изменение на системните часовници на гостовата система от хостовата среда. Възможността е реализирана на базата на механизма AMD SEV (Secure Encrypted Virtualization), който се прилага в системи за виртуализация за защита на виртуални машини от намеса от страна на хипервизора или администратора на хост системата.
- В системата за мандатен контрол на достъп SELinux е добавена поддръжка за xperm-правила, които позволяват да се свържат политиките на SELinux с определени повиквания ioctl() или съобщения netlink.
- За заверка на модулите на ядрото с цифров подпис вместо SHA1 по подразбиране се използва алгоритъмът SHA512.
- В драйверите за гостови системи VirtualBox е включена поддръжка на архитектура ARM64.
- В хипервизора KVM продължава работата по внедряване на механизма Intel TDX (Trusted Domain Extensions) за криптиране на паметта на гостовите системи.
- В virtio_blk е добавена поддръжка на режим за възстановяване на грешки.
- Мрежовата подсистема
- В реализираното протоколно RxRPC се появи възможността за използване на големи UDP кадри за повишаване на пропускната способност.
- За TCP е добавена поддръжка на алгоритъма RACK-TLP за определяне на загубата на пакети.
- Добавен е нов параметър sysctl tcp_tw_reuse_delay, действащ в контекста на мрежовото пространство и позволяващ да се определи забавянето, преди системата да може да повторно използва номера на мрежовия порт след затваряне на TCP-сокета.
- Добавена е възможност за избор на доставчик на точно време (PTP) за генериране на времеви отметки на физическите и MAC нива.
- За IPsec е реализирана поддръжка на механизма за агрегация и фрагментиране на инкапсулирани IP-пакети — IP-TFS/AGGFRAG (IP Traffic Flow Security/Aggregation and Fragmentation Mode for Encapsulating Security Payload).
- В системата за мрежови сокети е добавена поддръжка за предаване на информация за приоритета (SO_PRIORITY) под формата на управляващи съобщения (cmsg — control messages). За мрежовите сокети е добавена опцията SO_RCVPRIORITY, прилагаща информация за приоритета на сокета в функциите на recvmsg().
- Оборудване
- Добавен е драйверът amdxdna за интегрираните в CPU AMD ускорители NPU (Neural Processing Unit) на базата на архитектурата XDNA, предназначени за ускоряване на операции, свързани с машинното обучение. NPU на базата на архитектурата XDNA се доставя в серий 7040 и 8040 на процесорите AMD Ryzen, ускорителите AMD Alveo V70 и SoC AMD Versal.
- В драйвера i915 са добавени идентификатори за нови GPU, реализиран е обработчик на неуспехи при инициализацията на HDMI, повишена е надеждността на нулирането на GPU двигателите на Haswell и по-стари системи.
- Продължава работата по drm-драйвера (Direct Rendering Manager) Xe за GPU на базата на архитектурата Intel Xe, която се използва в видеокартите Intel от семейство Arc и интегрираната графика, започвайки от процесорите Tiger Lake.
- В драйвера Nouveau е добавена възможност за предаване на буфери с логове GSP-RM чрез debugfs.
- В драйвера AMDGPU е реализирана поддръжка на механизма DRM panic, показващ аналог на 'синия екран на смъртта' при сбои. Продължава подготовката за поддръжка на бъдещата серия графични карти Radeon RX 9000 на базата на архитектурата RDNA4. Актуализирана е поддръжката на DCN 3.5, GG 9.5, IH 4.4, PSP 13.x, SMU 13.x, VCN 5.x, JPEG 5.x, GC 12.x, DC FAMS, RAS и ISP.
- В DRM-драйвера msm (GPU Qualcomm Adreno) е добавена поддръжка на платформата Qualcomm SM6150 (QCS615).
- В DRM-драйвера panfrost е добавена поддръжка на SoC MediaTek MT8188 с GPU Mali-G57.
- В DRM-драйвера vc4 е добавена поддръжка на SoC Broadcom BCM2712 (Raspberry Pi 5).
- В vfio-драйвера nvgrace-gpu е добавена поддръжка на чиповете NVIDIA Grace Blackwell 200.
- Включен драйвер за контролерите Intel THC (Touch Host Controller), използван за взаимодействие с тъчскрийн и тъчпадове на някои лаптопи. Добавена е поддръжка на устройства Wacom с PCI интерфейс. Добавена е поддръжка на игрови контролери QH Electronics.
- Добавена е поддръжка за ARM платформи, SoC и устройства: Qualcomm Snapdragon 8 Elite (SM8750), Qualcomm Snapdragon AR2 (SAR2130P), Qualcomm IQ6/IQ8, Snapdragon 425 (MSM8917), Samsung Exynos 9810, Blaize BLZP1600, Microchip SAMA7D65, Renesas R-Car V4H ES3.0, Renesas RZ/G3E. Добавена е поддръжка на SoC SpacemiT K1, базирана на архитектура RISC-V.
- В звуковата подсистема ALSA за MIDI 2.0 са разширени API rawmidi и sequencer. В API за изнасяне на операции по компресия на звуковата карта е добавена поддръжка на ASRC (Asynchronous Sample Rate Conversion).
- Добавена е поддръжка на звукови системи за устройства Allwinner suinv F1C100s, Awinc AW88083, Realtek ALC5682I-VE, TAS2781, Focusrite Scarlett 4th Gen 16i16, 18i16 и 18i20. Добавена е поддръжка на безжични слушалки SteelSeries Arctis 9.
Източник: opennet.ru
