След два месеца разработка, Линус Торвалдс представи версия 6.13 на ядрото Linux. Сред най-забележителните промени: режим на ленивото изтласкване в планиращия модул, поддръжка на атомарно записване в XFS и Ext4, механизъм за «multigrain timestamps», адаптивен режим на включване на polling в мрежовата подсистема, възможност за компилация с оптимизации AutoFDO, поддръжка на механизма за защита ARM65 Guarded Control Stack, изолация на виртуални машини чрез разширение ARM CCA, разделени стекове в BPF, премахване на ReiserFS, драйвер virtual-cpufreq, netlink API net-shaper, режим на монтиране на tmpfs с оглед на регистрацията на символите и поддръжка на POSIX разширения в SMB3, драйвер AMD Cache Optimizer.
В новата версия са включени 14172 поправки от 2086 разработчици, размерът на пача е 46 MB (промените засягат 15375 файла, добавени са 598707 реда код, изтеглени са 406294 реда). В предишната версия имаше 14607 поправки от 2167 разработчици, размерът на пача бе 37 MB. Около 52% от всички промени в 6.13 са свързани с драйверите на устройствата, около 13% от промените касаят обновяване на код, специфичен за хардуерни архитектури, 11% са свързани с мрежовия стек, 4% с файловите системи и 3% с вътрешните подсистеми на ядрото.
Основни нововъведения в ядрото 6.13:
- Дисковата подсистема, вход/изход и файловите системи
- Добавен е механизъм за «multigrain timestamps», който позволява получаване на информация за времето на промяна или достъп до файлове с точност над милисекунда, без негативно влияние върху производителността. Увеличаването на точността на времевите маркери води до допълнителни разходи поради увеличената интензивност на записване на метаданни на диска, затова в предложената реализация по-точни маркери се създават не за всички файлове, а само за тези, за които процесите искат подобни маркери чрез повикване на getattr().
- Добавена е поддръжка на атомарни операции по запис, при които писането на данни, надвишаващи размера на сектора, се извършва атомарно на устройства за съхранение, предоставящи такава възможност. В момента атомарното записване е реализирано за XFS, Ext4 в режим O_DIRECT (Direct I/O) и md RAID 0/1/10.
- Предложен е нов механизъм за броене на референции за файлове, осигуряващ увеличение на производителността с 3-5% при натоварвания с повече от 255 нишки.
- Реализацията на файловата система ReiserFS е премахната, тъй като преди две години беше обявена за остаряла.
- Добавен е sysctl параметър „fs.dentry-negative“ за задаване на политика в VFS за почистване на записи „dentry“ (вътрешно представяне на елементите в каталога) след изтриването на свързаните с тях файлове. За определени натоварвания е по-оптимално да оставяме подобни записи за изтритите файлове, а за други — да ги изтриваме, затова в ядрото е предоставена възможност за избор (по подразбиране „dentry“ автоматично не се изтриват).
- В системния повик statmount() е добавен флаг STATMOUNT_OPT_ARRAY за връщане на списък с опции на файловата система под формата на масив от низове, завършващи с нулев символ и не използващи ескейпиране „\000“. Добавена е поддръжка за връщане на подтип ФС (fs_subtype, за определяне на използването на FUSE), опции за безопасно монтиране и изходен суперблок (sb_source).
- В OverlayFS е предоставена възможност за указване на слоеве чрез файлови дескриптори, а не посредством имена на файлови пътеки.
- В файловата система tmpfs е добавена опция за монтиране „casefold“ за работа без оглед на регистра на символите и опция „strict_encoding“ за блокиране на създаването на файлове с имена, съдържащи некоректни символи UTF-8.
- Предложен е нов набор от системни повиквания за управление на разширените атрибути на файловете: setxattrat(), getxattrat(), listxattrat() и removexattrat(). За разлика от системните повиквания setxattr(), getxattr(), listxattr() и removexattr(), новите варианти изискват указване на файлов дескриптор на каталога, от който се извършва търсенето на файловия път.
- В Btrfs е добавена ioctl-операция BTRFS_IOC_SUBVOL_SYNC_WAIT, която включва изчакване на завършването на почистването на подразделите, което позволява изпълнението на командата „btrfs subvolume sync“ от непривилегирован потребител, който няма достъп до ioctl SEARCH_TREE (полезно в приложения за резервно копие, които почистват подразделите). Добавена е ioctl-операция ENCODED_READ за четене чрез io_uring на кодирани данни, например за директно четене на компресирани експонати без разархивиране. Продължава работата по прехода към използване на томове от паметната страница (page folios). Намалена е появата на конкурентни блокировки („lock contention“) при търсене на вградени обратни препратки и при преглеждане на буферите на експонатите. Повишена е ефективността на компресията на картата на експонатите.
- В файловата система EROFS (Разширена файлова система с само за четене), предназначена за работа с дялове в режим само за четене, е реализирана възможност за използване на опции SEEK_HOLE и SEEK_DATA в системния повик lseek().
- В F2FS е добавена поддръжка за отражение на устройства, позволяваща временно резервиране на област в F2FS за използване на част от блочно устройство в друга файлова система. След приключване на външната операция, резервираната област може да се върне в F2FS. Например, можете да създадете файлова система с командата "mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb", след което съдържанието на устройството /dev/vdc ще бъде резервирано и отражено във файл vdc.file, а дялът /dev/vdc може да се използва за ваши нужди, например, да се форматира за друга файлова система. За връщане на резервираното съдържание, просто изтрийте файла vdc.file.
- В XFS е включена поддръжка за квоти за устройства с реално време. Добавена е поддръжка за директория с метаданни, в която се съхраняват всички inode с метаданни.
- В механизма FUSE е включена възможност за динамично изменение на максималния брой страници (FUSE_MAX_MAX_PAGES), използвайки "sysctl fs.fuse.max_pages_limit". В работата се използват фолианти на страници памет (page folios).
- В SMB е реализирана поддръжка на POSIX разширения за SMB3, необходими за съхранение на специални типове файлове, като fifo, файлове на устройства и символични линкове. Добавена е възможност за монтиране на дял с алтернативна парола, която се прилага при ротация на паролите. Добавена е нова опция за монтиране „cifs.upcall“ за определяне на пространство от имена. Осигурено е разпознаване на файлове на символични и блочни устройства, създадени в Windows NFS Server. Добавена е поддръжка за символични линкове в стил WSL (Windows Subsystem for Linux).
- Файловите системи UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS и ECRYPTFS са преминали на нов API за монтиране на дялове.
- Файловите системи ECRYPTFS, UFS и NILFS2 са преминали на използването на фолианти на страниците памет (page folios).
- Памет и системни услуги
- В планиращия инструмент е реализирана модел за мързеливо изместване на задачи (PREEMPT_LAZY, lazy preemption), който съответства на модела на пълно изместване („full preemption“) за реално време задачи (RR/FIFO/DEADLINE), но отлага изместването на обикновените задачи (SCHED_NORMAL) до границата на тик. Указаното забавяне води до намаляване на случаите на изместване на държателите на заключвания, което позволява подобряване на производителността до конфигурации, използващи модела на доброволно изместване (voluntary preemption). По този начин новият модел запазва възможностите за пълно изместване по отношение на задачите в реално време, но минимизира спадовете в производителността за обикновените задачи. Освен това, новият модел опростява логиката на операциите по изместване на задачи в ядрото, благодарение на изключването от процеса на планиране на обработчици, намиращи се в други компоненти на ядрото (вън от планиращия инструмент).
- При компилиране с Clang е предоставена възможност за използване на оптимизации
Източник: opennet.ru
