След талантливата разработка на Линус Торвалдс представи релиз на ядрото на 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) в режим на работа с предсказуеми закъснения («realtime device»). Обратното мапиране позволява да се определи за съхранение на кой файл се използва указаният блок на устройството за съхранение. С помощта на rmap в XFS за realtime-режима е реализирана поддръжка на операцията reflink, позволяваща създаването на копия на файлове чрез клониране на метаданни на файла и създаване на връзка към вече съществуващи данни без действително копиране.
- В VFS е реализирано кеширане на размерите на символични връзки, което позволи да се ускори изпълнението на операцията readlink с 1.5% (в теста с /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 са преминали на използване на фолианти на страници в паметта (page folios).
- в драйвера 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, lazy preemption), който съответства на режима на пълно изтласкване („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 по подразбиране macOS: За всички прозорци на цял екран алгоритъмът 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 се предлага в серия 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 и секвенсер. В 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
