Версия на ядрото на Linux 5.19

След два месеца разработка Линус Торвалдс представи версията на Linux ядрото 5.19. Сред най-забележителните промени: поддръжка за архитектурата на процесора LoongArch, интегриране на "BIG TCP" пачове, режим при поискване във 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 за разработка - веднъж той използва компютър, базиран на процесора ppc970 и лаптоп Macbook Air.

Новата версия включва 16401 2190 корекции от 16206 разработчици (в последната версия имаше 2127 90 корекции от 13847 разработчици), размерът на корекцията е 1149456 MB (промените засегнаха 349177 39 файла, добавени са 5.19 21 11 реда код, 4 3 реда са изтрити). Около XNUMX% от всички промени, въведени в XNUMX, са свързани с драйвери на устройства, приблизително XNUMX% от промените са свързани с актуализиране на код, специфичен за хардуерни архитектури, XNUMX% са свързани с мрежов стек, XNUMX% са свързани с файлови системи и XNUMX% са свързани с вътрешни подсистеми на ядрото.

Ключови иновации в ядрото 5.19:

  • Дискова подсистема, I/O и файлови системи
    • Файловата система EROFS (Подобрена файлова система само за четене), предназначена за използване на дялове само за четене, е преобразувана да използва подсистемата fscache, която осигурява кеширане на данни. Промяната значително подобри производителността на системи, в които голям брой контейнери се стартират от базирано на EROFS изображение.
    • Към подсистемата fscache е добавен режим на четене при поискване, който се използва за оптимизиране на EROFS. Новият режим ви позволява да организирате кеширане на четене от FS изображения, разположени в локалната система. За разлика от първоначално наличния режим на работа, който е фокусиран върху кеширане в локалната файлова система на данни, прехвърлени през мрежови файлови системи, режимът „при поискване“ делегира функциите за извличане на данни и записването им в кеша на отделен фонов процес, работещ в потребителското пространство.
    • XFS предоставя възможност за съхраняване на милиарди разширени атрибути в i-node. Максималният брой екстенти за един файл е увеличен от 4 милиарда на 247. Въведен е режим за атомарно актуализиране на няколко разширени файлови атрибута наведнъж.
    • Файловата система Btrfs е оптимизирала работата с ключалки, което позволява приблизително 7% увеличение на производителността при директно писане в режим Nowait. Производителността на операциите в режим NOCOW (без копиране при запис) се увеличава с приблизително 3%. Натоварването на кеша на страницата при изпълнение на командата „изпрати“ е намалено. Минималният размер на подстраниците е намален от 64K на 4K (могат да се използват подстраници, по-малки от страниците на ядрото). Направен е преход от използването на коренно дърво към алгоритъма XArrays.
    • Към NFS сървъра е добавен режим за разширяване на запазването на състоянието на заключване, зададено от клиент, който е спрял да отговаря на заявки. Новият режим ви позволява да отложите изчистването на заключване до един ден, освен ако друг клиент не поиска конкурентно заключване. В нормален режим блокирането се изчиства 90 секунди след като клиентът спре да отговаря.
    • Подсистемата за проследяване на събития във fanotify FS имплементира флага FAN_MARK_EVICTABLE, с който можете да деактивирате фиксирането на целеви i-възли в кеша, например, за да игнорирате под-клонове, без да закрепвате техните части в кеша.
    • Драйверът за файловата система 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, е преустановена: nosp, nosmap, nosmep, noexec и noclflush).
    • Поддръжката на остарялата CPU архитектура h8300 (Renesas H8/300), която отдавна не се поддържа, е преустановена.
    • Разширени възможности, свързани с реагиране при откриване на разделени ключалки („разделени ключалки“), които възникват при достъп до неподравнени данни в паметта поради факта, че при изпълнение на атомарна инструкция данните пресичат две линии на кеша на процесора. Такива блокажи водят до значителен спад в производителността. Ако преди по подразбиране ядрото издаваше предупреждение с информация за процеса, който е причинил блокирането, сега проблемният процес ще бъде допълнително забавен, за да се запази производителността на останалата част от системата.
    • Добавена е поддръжка за механизма IFS (In-Field Scan), внедрен в процесорите на Intel, който ви позволява да изпълнявате диагностични тестове на процесора на ниско ниво, които могат да идентифицират проблеми, които не се откриват от стандартни инструменти въз основа на кодове за коригиране на грешки (ECC) или битове за четност . Извършените тестове са под формата на фърмуер за изтегляне, проектиран подобно на актуализациите на микрокод. Резултатите от тестовете са достъпни чрез sysfs.
    • Добавена е възможност за вграждане на bootconfig файл в ядрото, което позволява, в допълнение към опциите на командния ред, да се определят параметрите на ядрото чрез файл с настройки. Вграждането се извършва с помощта на опцията за асемблиране 'CONFIG_BOOT_CONFIG_EMBED_FILE=»/PATH/TO/BOOTCONFIG/FILE»'. Преди това bootconfig се определяше чрез прикачване към initrd изображението. Интегрирането в ядрото позволява bootconfig да се използва в конфигурации без initrd.
    • Въведена е възможност за изтегляне на фърмуер, компресиран с помощта на алгоритъма Zstandard. Набор от контролни файлове /sys/class/firmware/* е добавен към sysfs, което ви позволява да инициирате зареждането на фърмуера от потребителското пространство.
    • Асинхронният входно-изходен интерфейс io_uring предлага нов флаг, IORING_RECVSEND_POLL_FIRST, който, когато е зададен, първо ще изпрати мрежова операция, която да бъде обработена с помощта на запитване, което може да спести ресурси в ситуации, в които обработката на операцията с известно забавяне е приемлива. 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 позволява съхраняване на въведени указатели в картографски структури и също така добавя поддръжка за динамични указатели.
    • Предлага се нов проактивен механизъм за възстановяване на паметта, който поддържа контрол на потребителското пространство с помощта на файла memory.reclaim. Записването на число в указания файл ще се опита да изхвърли съответния брой байтове от набора, свързан с cgroup.
    • Подобрена точност на използването на паметта при компресиране на данни в суап дяла с помощта на механизма zswap.
    • За архитектурата RISC-V е осигурена поддръжка за стартиране на 32-битови изпълними файлове на 64-битови системи, добавен е режим за свързване на ограничителни атрибути към страници с памет (например за деактивиране на кеширането) и е внедрена функцията kexec_file_load(). .
    • Реализацията на поддръжка за 32-битови системи Armv4T и Armv5 е адаптирана за използване в универсални многоплатформени компилации на ядрото, подходящи за различни ARM системи.
  • Виртуализация и сигурност
    • Подсистемата EFI реализира способността за поверително прехвърляне на секретна информация към системите за гости, без да я разкрива на хост системата. Данните се предоставят чрез директорията security/coco в securityfs.
    • Защитният режим на блокиране, който ограничава достъпа на 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, използван за емулиране на блокови устройства, има добавена поддръжка за I/O, използвайки запитване, което според тестовете е намалило латентността с около 10%.
  • Мрежова подсистема
    • Пакетът включва серия от ГОЛЕМИ TCP корекции, които ви позволяват да увеличите максималния размер на TCP пакета до 4 GB, за да оптимизирате работата на високоскоростни вътрешни мрежи на центрове за данни. Подобно увеличение на размера на пакета с 16-битов размер на полето на заглавието се постига чрез внедряване на „джъмбо“ пакети, чийто размер в IP заглавието е зададен на 0, а действителният размер се предава в отделен 32-битов поле в отделна прикачена заглавка. При тестване на производителността настройката на размера на пакета на 185 KB увеличи пропускателната способност с 50% и значително намали забавянето при трансфер на данни.
    • Продължи работата по интегрирането на инструменти в мрежовия стек за проследяване на причините за изпускане на пакети (кодове на причини). Кодът на причината се изпраща, когато паметта, свързана с пакета, е освободена и позволява ситуации като отхвърляне на пакет поради грешки в заглавието, откриване на фалшифициране на rp_filter, невалидна контролна сума, недостиг на памет, задействани IPSec XFRM правила, невалиден пореден номер TCP и др.
    • Добавена е поддръжка за възстановяване на MPTCP (MultiPath TCP) връзки за използване на обикновен TCP в ситуации, в които определени MPTCP функции не могат да се използват. MPTCP е разширение на TCP протокола за организиране на работата на TCP връзка с доставка на пакети едновременно по няколко маршрута през различни мрежови интерфейси, свързани с различни IP адреси. Добавен API за управление на MPTCP потоци от потребителско пространство.
  • Оборудование
    • Добавени са над 420 400 реда код, свързани с драйвера amdgpu, от които около 22.5 21 реда са автоматично генерирани заглавни файлове за данни от регистъра на ASIC в драйвера на AMD GPU, а други 4 21 реда осигуряват първоначална реализация на поддръжка за AMD SoC13. Общият размер на драйвера за GPU на AMD надхвърли 3 милиона реда код. В допълнение към SoC7000, AMD драйверът включва поддръжка за SMU XNUMX.x (System Management Unit), актуализирана поддръжка за USB-C и GPUVM и е готов да поддържа следващите поколения RDNAXNUMX (RX XNUMX) и CDNA (AMD Instinct) платформи.
    • Драйверът i915 (Intel) има разширени възможности, свързани с управлението на захранването. Добавени идентификатори за графични процесори 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 драйвери и подсистеми. Обработката на Qualcomm AArch64 devicetree файлове е внедрена. Добавена е поддръжка за новата схема за именуване на компонентите на Sound Open Firmware. Спря почистването на драйвера ATM Ambassador, който беше премахнат от ядрото. Управлението на почистването на петна в HDCP и Mellanox Core е преместено в отделни тагове kconfig.

Източник: opennet.ru

Добавяне на нов коментар