Издаване на ядрото Linux 6.14

След като преминаха два месеца разработка, Линус Торвалдс представи изданието на ядрото Linux 6.14. Сред най-забележителните промени са: драйвер ntfs с примитиви за синхронизация Windows NT, конфигурация на баланса на операции за четене в Btrfs RAID1, поддръжка на reflink в XFS в режим realtime, възможност за некеширано буферирано I/O, dmem cgroup за ограничаване на GPU памет, използване на io_uring в FUSE, делегиране на атрибути в NFS, поддръжка на атомарно записване в Device mapper, ускоряване на символични линкове, управление на възможността за изпълнение на скриптове, поддръжка на Qualcomm Snapdragon 8 Elite чипове, драйвер за AMD NPU.

В новата версия са направени 12115 корекции от 1984 разработчици, размерът на пача е 39 МБ (промените засягат 10170 файла, добавени са 531586 реда код, премахнати са 235999 реда). В предишното издание имаше 14172 корекции от 2086 разработчици, размерът на пача беше 46 МБ. Около 41% от всички представени в 6.14 промени са свързани с драйвери на устройства, около 13% от промените са свързани с обновяване на код, специфициран за хардуерни архитектури, 14% са свързани с мрежовия стек, 7% — с файловите системи и 4% — с вътрешните подсистеми на ядрото.

Основни нововъведения в ядрото 6.14:

  • Дисковата подсистема, вход/изход и файловите системи
    • В файловата система 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).
    • Файловите системи 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 е обяснимо с проблемите при коректното реализиране на 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/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, който работи в пространството на имената (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 и 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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster