След като работи два месеца, Линус Торвалдс представи релиз на ядрото на 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% – до вътрешните подсистеми на ядрото.
- Дисковата подсистема, вход/изход и файловите системи
- В файловата система Btrfs се появи поддръжка на нови методи за баланс на операции за четене между устройствата в масива RAID1. Освен предишното разпределение на натоварването на базата на идентификатори на процеси (pid), в новата версия са предложени три нови режима на баланс: «rotation» (равномерно разпределение на натоварването между всички устройства, режимът е включен по подразбиране); «latency» (разпределение с оглед на закъсненията, който може да бъде полезен при повреди или нестабилна работа на устройствата); devid (ръчно управление). За промяна на режима на баланс е добавен интерфейс /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) в режим на работа с предсказуеми закъснения ("real-time device"). Обратното мапинг позволява да се определи за съхранение на кои файлове се използва определен блок на устройството за съхранение. С помощта на rmap в XFS за реaltime режима е реализирана поддръжка на операцията reflink, позволяваща създаването на копия на файлове чрез клониране на метаданните на файла и създаване на връзка към вече съществуващите данни без реално копиране.
- В VFS реализирано кеширане на размера на символичните връзки, което позволи да се ускори с 1.5% изпълнението на операцията readlink (в теста с /initrd.img в ext4). Кеширането е включено във файловите системи ext4 и tmpfs.
- В реализацията NFSv4.2 е добавена поддръжка на делегиране на атрибути на файлове, позволяваща управление на такива атрибути на файловете, каквито са времето на промяна (mtime), на страната на NFS клиента, без необходимост от изпращане на промените на сървъра. В NFS също така е подобрена поддръжката на протокола "LOCALIO", позволяващ да се установи дали клиентът и сървърът NFS се намират на един и същи хост, за да се активират съответните оптимизации, като например използване на директен вход/изход от клиента (Direct I/O).
- Повишена производителност на операциите за четене във файловите системи NETFS, CIFS и AFS (Andrew File System).
- В 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 са преминали на използване на листи от страници за памет (странични фолиа).
- В драйвера 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 се обяснява с трудността на коректното реализиране на API за синхронизация на NT върху съществуващите примитиви в ядрото.
- Добавен е нов контролер 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) е добавена утилита 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, който действа в контекста на името на мрежата (network namespace) и позволява да се определи закъснението, необходимо преди системата да може повторно да използва номера на мрежовия порт след затварянето на TCP сокета.
- Добавено възможност за избор на доставчик на точно време (PTP) за генериране на времеви марки на нива PHY и 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 се доставя с процесори AMD Ryzen от серии 7040 и 8040, ускорители 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.
Източник: linux.org.ru
