След два месеца разработка, Линус Торвалдс представи версията на ядрото Linux 5.19. Сред основните промени са: поддръжка на процесорната архитектура LoongArch, интеграция на патчовете „BIG TCP“, режим „on-demand“ в fscache, премахване на кода за поддръжка на формата a.out, възможност за прилагане на ZSTD за компресия на фърмуерите, интерфейс за управление на извличането на памет от потребителското пространство, повишаване на надеждността и производителността на генератора на псевдослучайни числа, както и поддръжка на разширенията Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) и ARM SME (Scalable Matrix Extension).
В анонса Линус посочи, че най-вероятно следващото издание на ядрото ще получи номер 6.0, тъй като в клон 5.x се е натрупало достатъчно издания, за да бъде сменен първият номер в версията. Смяната на номерацията се извършва от естетически съображения и е формален ход, който премахва дискомфорта от натрупването на голям брой издания в серията.
Линус също така спомена, че е използвал лаптоп Apple, базиран на архитектурата ARM64 (Apple Silicon), с Linux среда на базата на дистрибуцията Asahi Linux, за оформлението на изданието. Това не е основната работна станция на Линус, но той е използвал тази платформа, за да провери нейната пригодност за работа върху ядрото и да бъде сигурен, че може да създава издания на ядрото в движение, имайки под ръка лек лаптоп. Преди много години, Линус имаше опит с използването на оборудване Apple за разработка — той някога е ползвал компютър, основан на CPU ppc970 и лаптоп Macbook Air.
В новата версия са приети 16401 корекции от 2190 разработчици (в предното издание имаше 16206 корекции от 2127 разработчици), размерът на патча е 90 MB (промените засягат 13847 файлове, добавени са 1149456 реда код, премахнати са 349177 реда). Около 39% от всички представени в 5.19 промени са свързани с драйвери за устройства, приблизително 21% от промените се отнасят до обновление на код, специфичен за хардуерни архитектури, 11% са свързани с мрежовия стек, 4% — с файлови системи и 3% с вътрешни подсистеми на ядрото.
Основните нововъведения в ядрото 5.19:
- Дисковата подсистема, вход/изход и файловите системи
- Файловата система EROFS (Подобрена само за четене файлова система), предназначена за използване на дялове, достъпни в режим само за четене, е адаптирана да използва подсистемата fscache, която предоставя кеширане на данни. Промяната е позволила значително увеличаване на производителността на системите, в които се стартират голям брой контейнери от образ на EROFS.
- В подсистемата fscache е добавен режим на четене по запитване («on-demand»), който е активиран за оптимизиране на EROFS. Новият режим позволява организиране на кеширане на четенето от изображения на файловата система, които се намират в локалната система. В контекста на първоначално наличния режим на работа, насочен към кеширане в локалната файлова система на данни, предавани чрез мрежови файлови системи, режимът «on-demand» делегира функциите за извличане на данни и тяхното записване в кеш на отделен фонов процес, изпълняван в пространството на потребителя.
- В XFS е реализирана възможност за съхранение на милиарди разширени атрибути в i-node. Максималният брой на екстентите за един файл е увеличен от 4 милиарда на 247. Осъществен е режим за атомно обновление наведнъж на няколко разширени атрибута на файла.
- В файловата система Btrfs е оптимизирана работата с блокировки, което е довело до увеличение на производителността с около 7% при директно записване в режим nowait. Производителността на операциите в режим NOCOW (без copy-on-write) е увеличена приблизително с 3%. Намалена е натовареността на страницовия кеш при работа на командата «send». Минималният размер на подсистемите е намален от 64K на 4K (възможно е използването на подсистеми с размери по-малки от страниците на ядрото). Осуществен е преход от използването на основно дърво (radix tree) към алгоритъма XArrays.
- В NFS-сервера е добавен режим за удължаване на състоянието на блокировката, установена от клиента, който е престанал да отговаря на запитвания. Новият режим позволява забавяне на изчистването на блокировката до 24 часа, ако друг клиент не поиска конкурираща блокировка. В нормален режим блокировката се изчиства след 90 секунди, след като клиентът е престанал да отговаря.
- В подсистемата за проследяване на събития във файловата система fanotify е реализиран флаг FAN_MARK_EVICTABLE, с помощта на който може да се изключи закрепването на целевите i-node в кеша, например, за игнориране на клонки без закрепване на частите им в кеша.
- В драйвера за файловата система FAT32 е добавена поддръжка за получаване на информация за времето на създаване на файл чрез системния повик statx с реализиране на по-ефективна и функционална версия на stat(), която връща разширена информация за файла.
- Внесени са значителни оптимизации в драйвера exFAT, свързани с осигуряване на едновременно изчистване на група сектори при активен режим ‘dirsync’, вместо последователно по сектори изчистване. Благодарение на намаляването на броя на заявките за блокове след оптимизациите, производителността при създаването на голям брой каталози на SD-картата се е увеличила с над 73-85% в зависимост от размера на кластерите.
- В ядрото е включено първото коригиращо обновление на драйвера ntfs3. От момента, в който ntfs3 бе включен в ядрото 5.15 миналия октомври, драйверът не е обновяван и връзката с разработчиците е била загубена, но сега разработчиците са възобновили публикуването на промените. В предложените пачове са отстранени грешки, водещи до изтичане на памет и аварийни приключвания, решени са проблеми с изпълнението на xfstests, извършена е почистване на неизползван код и са поправени правописни грешки.
- За OverlayFS е реализирана възможност за мапиране на идентификатори на потребители на монтирани файлови системи, използвана за свързване на файлове на определен потребител в монтирана чужда партиция с друг потребител в текущата система.
- Памет и системни услуги
- Добавена е начална поддръжка за архитектурата на набор от команди LoongArch, използвана в процесорите Loongson 3 5000 и реализираща нов RISC ISA, подобен на MIPS и RISC-V. Архитектурата LoongArch е налична в три варианта: съкратен 32-битов (LA32R), стандартен 32-битов (LA32S) и 64-битов (LA64).
- Премахнат е кодът за поддръжка на формата на изпълними файлове a.out, който е бил класиран като остарял в версия 5.1. Форматът a.out отдавна не се използва в системи с Linux, а генерирането на файлове a.out не се поддържа в съвременните инструменти по подразбиране в конфигурации за Linux. Зареждачът за a.out файлове може да бъде реализиран изцяло в пространството на потребителя.
- Прекратена е поддръжката на зареждащи опции, специфични за архитектурата x86: nosep, nosmap, nosmep, noexec и noclflush).
- Прекратена е поддръжката на остарялата CPU архитектура h8300 (Renesas H8/300), която отдавна е останала без поддръжка.
- Разширени са възможностите, свързани с реакцията при откриване на разделителни блокировки („split lock“), възникващи при достъп до неравномерни данни в паметта, поради което при изпълнение на атомарна команда данните пресичат две линии на кеша на CPU. Подобни блокировки водят до значително спадане на производителността. Ако по-рано ядрото по подразбиране издаваше предупреждение с информация за блокирания процес, сега проблемният процес ще бъде допълнително забавен, за да се запази производителността на останалата част от системата.
- Добавена е поддръжка за механизма IFS (In-Field Scan), реализиран в процесорите Intel, който позволява извършването на нискоуровневни диагностични тестове на CPU, способни да откриват проблеми, които не се установяват от стандартните средства на базата на кодове за корекция на грешки (ECC) или четни битове. Извършените тестове се предоставят под формата на зареждаема фърмуер, оформена по аналогия с актуализациите на микрокода. Резултатите от тестването са достъпни чрез sysfs.
- Добавена е възможност за вграждане на файла bootconfig в ядрото, позволяваща извън опции за командния ред да се определят параметри за работа на ядрото чрез файл с настройки. Вграждането се осъществява с помощта на опцията за сборка ‘CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"‘. По-рано bootconfig се определяше чрез прикрепване към образа initrd. Вграждането в ядрото позволява използването на bootconfig в конфигурации без initrd.
- Реализирана е възможност за зареждане на фърмуер, компресиран с алгоритъма Zstandard. В sysfs е добавен набор от управляващи файлове /sys/class/firmware/*, позволяващи инициране на зареждане на фърмуер от потребителското пространство.
- В интерфейса на асинхронния вход/изход io_uring е предложен нов флаг IORING_RECVSEND_POLL_FIRST, при който мрежовата операция първо ще бъде предадена за обработка с използване на полинг (polling), което може да спести ресурси в ситуации, когато е допустима обработка на операцията с известно забавяне. В io_uring е добавена и поддръжка на системния повик socket(), предложени са нови флагове за опростяване на управлението на файловите дескриптори, добавен е режим „multi-shot“ за приемане на няколко връзки наведнъж при повикването accept(), добавени са операции за прокарване на команди NVMe директно към устройството.
- За архитектурата Xtensa е осигурена поддръжка на инструмент за отстраняване на грешки KCSAN (Kernel Concurrency Sanitizer), предназначен за динамично откриване на условия на състезание в ядрото. Също така е добавена поддръжка на спящ режим и съпроцесори.
- За архитектурата m68k (Motorola 68000) е реализирана виртуална машина (симулатор на платформата), основан на емулатора Android Goldfish.
- За архитектурата AArch64 е реализирана поддръжка на разширения Armv9-A SME (Scalable Matrix Extension).
- В подсистемата eBPF е разрешено съхранението на типизирани указатели в map-структури, както и е добавена поддръжка на динамични указатели.
- Предложен е нов предварителен механизъм за изчистване на паметта, който поддържа управление от потребителското пространство чрез файла memory.reclaim. Записването на число в посочения файл ще доведе до опит за изчистване на съответния брой байтове от набора, свързан с cgroup.
- Увеличена е точността на отчитането на използването на паметта при компресиране на данни в раздела за обмен с помощта на механизма zswap.
- За архитектурата RISC-V е осигурена поддръжка за стартиране на 32-битови изпълними файлове на 64-битови системи, добавен е режим за свързване на ограничителни атрибути към страници в паметта (например за забрана на кеширането) и е реализирана функцията kexec_file_load().
- Реализацията на поддръжката на 32-битови системи Armv4T и Armv5 е адаптирана за използване в универсални многоплатформени сборки на ядрото, подходящи за различни ARM-системи.
- Виртуализация и сигурност
- В подсистемата EFI е реализирана възможността за конфиденциално предаване на секретна информация на гостуващи системи, без да се разкрива на хост-системата. Данните се предоставят чрез каталога security/coco в securityfs.
- В режим на защита Lockdown, който ограничава достъпа на потребителя root до ядрото и блокира обходните пътища на UEFI Secure Boot, е отстранена задна врата, позволяваща заобикалянето на защитата чрез манипулации с отладчика на ядрото.
- Включени са пачове, насочени към повишаване на надеждността и производителността на генератора на псевдослучайни числа.
- При събиране с Clang 15 е реализирана поддръжка на механизма за рандомизация на структури в ядрото.
- В механизма Landlock, който позволява ограничаване на взаимодействието на група процеси с външната среда, е предоставена поддръжка на правила, позволяващи контрол над изпълнението на операции за преименуване на файлове.
- Подсистемата IMA (Integrity Measurement Architecture), предназначена за проверка на целостта на компонентите на операционната система чрез цифрови подписи и хешове, е преминала на използване на модула fs-verity за верификация на файлове.
- Логиката на действията при деактивиране на непривилегирован достъп до подсистемата eBPF е променена — преди деактивиране на всички команди, свързани със системния повик bpf(), а от версия 5.19 е оставен достъп до команди, които не водят до създаване на обекти. При такова поведение за зареждане на BPF програма е необходим привилегирован процес, но след това непривилегированите процеси могат да взаимодействат с тази програма.
- Добавена е поддръжка за разширението AMD SEV-SNP (Secure Nested Paging), осигуряващо безопасна работа с вложени таблици страници в паметта и защитата от атаки „undeSErVed“ и „SEVerity“ на процесорите AMD EPYC, които позволяват заобиколяване на механизма за защита AMD SEV (Secure Encrypted Virtualization).
- Добавена е поддръжка на механизма Intel TDX (Trusted Domain Extensions), който позволява блокиране на опити за външен достъп до криптирана памет. виртуални машини.
- В драйвера virtio-blk, използван за емулация на блочни устройства, е добавена поддръжка за вход/изход с използване на полинг (polling), което в проведени тестове е позволило да се намалят закъсненията с около 10%.
- Мрежова подсистема
- Включена е серия от пачове BIG TCP, позволяващи да се увеличи максималният размер на TCP пакета до 4GB за оптимизация на работата на високоскоростни вътрешни мрежи в дата центрове. Това увеличение на размера на пакета при 16-битово поле в заглавката се постига чрез реализиране на „jumbo“ пакети, размерът в IP заглавката на които е зададен на 0, а фактическият размер се предава в отделно 32-битово поле в отделен прикрепен заглавие. При тестове на производителността задаването на размера на пакета на 185 KB е увеличило пропускната способност с 50% и значително е намалило закъсненията при предаване на данни.
- Продължена е работата по интегрирането в мрежовия стек на средства за проследяване на причините за отхвърляне на пакети (кодове reason). Кодът на причината се предава по време на освобождаването на паметта, свързана с пакета, и позволява да се вземат предвид ситуации като отхвърляне на пакет поради грешки при попълването на полета в заглавието, разпознаване на спуфинг от филтъра rp_filter, неправилна контролна сума, недостиг на памет, активиране на IPSec XFRM правила, неправилен номер на последователността TCP и т.н.
- Добавена е поддръжка за преминаване на MPTCP (MultiPath TCP) към обикновен TCP в ситуации, когато определени функции на MPTCP не могат да бъдат използвани. MPTCP представлява разширение на протокола TCP за организиране на работата на TCP-соединението, като предоставя доставка на пакети едновременно по няколко маршрута чрез различни мрежови интерфейси, свързани с различни IP адреси. Добавен е API за управление на потоците MPTCP от потребителското пространство.
- Оборудване
- Добавени са над 420 хиляди реда код, свързани с драйвера amdgpu, от които около 400 хиляди реда са автоматично генерирани заглавни файлове с данни за регистри ASIC в драйвера за GPU AMD, а още 22.5 хиляди реда осигуряват начална реализация на поддръжка за AMD SoC21. Общият размер на драйвера за GPU AMD е над 4 милиона реда код. Освен SoC21, в драйвера AMD е включена поддръжка за SMU 13.x (System Management Unit), обновена е поддръжката за USB-C и GPUVM, извършено е подготовка за поддръжка на следващите поколения платформи RDNA3 (RX 7000) и CDNA (AMD Instinct).
- В драйвера i915 (Intel) са разширени възможностите, свързани с управлението на енергопотреблението. Добавени са идентификатори за GPU Intel DG2 (Arc Alchemist), използвани на лаптопи, осигурена е начална поддръжка на платформата Intel Raptor Lake-P (RPL-P), добавена е информация за графичните карти Arctic Sound-M, реализиран е ABI за изчислителни двигатели, за картите DG2 е добавена поддръжка на формата Tile4, за системи, базирани на микроархитектура Haswell, е реализирана поддръжка на DisplayPort HDR.
- В драйвера Nouveau е реализиран преход към използване на обработчика drm_gem_plane_helper_prepare_fb, за някои структури и променливи е приложено статично разпределение на паметта. Що се отнася до използването на отворените от NVIDIA изходни текстове на модулите на ядрото в Nouveau, работата засега се състои в установяване и отстраняване на грешки. В бъдеще публикуваната версия на фърмуера се планира да се използва за повишаване на производителността на драйвера.
- Добавен е драйвер за контролера NVMe, използван в компютрите Apple на базата на чипа M1.
Междувременно Латиноамериканският Фонд за свободен софтуер създаде вариант на напълно свободно ядро 5.19 — Linux-libre 5.19-gnu, почистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чието приложение е ограничено от производителя. В новото издание е проведено почистване на драйверите за pureLiFi X/XL/XC и TI AMx3 Wkup-M3 IPC. Обновен е кодът за почистване на блобове в драйверите и подсистемите на Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu драйвери. Реализирана е обработка на devicetree файловете на Qualcomm AArch64. Добавена е поддръжка на нова схема за именуване на компоненти Sound Open Firmware. Прекратено е почистването на драйвера ATM Ambassador, премахнат от ядрото. Управлението на почистването на блобове в HDCP и Mellanox Core е преместено в отделни тагове kconfig.
Източник: opennet.ru
