Релиз на ядрото Linux 5.19

След два месеца разработка Линус Торвалдс представи релиза на ядрото 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 МБ (промените обхванаха 13847 файла, добавени са 1149456 реда код, изтрити са 349177 реда). Около 39% от всички представени в 5.19 промени са свързани с драйвери на устройства, приблизително 21% от промените са свързани с обновление на код, специфичен за хардуерни архитектури, 11% са свързани с мрежовия стек, 4% - с файловите системи и 3% с вътрешните подсистеми на ядрото.

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

  • Дискова подсистема, вход/изход и файлови системи
    • Файловата система EROFS (Enhanced Read-Only File System), предназначена за използване на дялове, достъпни в режим само за четене, е подобрена да използва подсистемата 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 пакета до 4ГБ за оптимизация на работата на високоскоростни вътрешни мрежи на дата-центрове. Такова увеличаване на размера на пакета при 16-битово поле в заглавката се постига чрез реализация на 'jumbo' пакети, чийто размер в IP заглавката е установен на 0, а действителният размер се предава в отделно 32-битово поле в отделен прикачен заглавие. При тестовете на производителността задаването на размера на пакета на 185 КБ е довело до увеличаване на пропускателната способност с 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 изходни текстове на модулите на ядрото, работата все още се състои в откриването и отстраняването на грешки. В по-нататъшна перспектива публикуваното фърмуерно обновление ще се използва за повишаване на производителността на драйвера.
    • Добавен е драйвер за контролера 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

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