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

След два месеца разработка, Линус Торвалдс представи версията на Linux ядрото 6.1. Сред най-забележителните промени: поддръжка за разработване на драйвери и модули на езика Rust, модернизация на механизма за определяне на използвани страници с памет, специален мениджър на паметта за BPF програми, система за диагностициране на проблеми с паметта KMSAN, KCFI (Kernelk Control -Flow Integrity) механизъм за защита, въвеждането на структурното дърво на Maple.

Новата версия включва 15115 2139 корекции от 51 разработчици, размерът на корекцията е 2 MB, което е приблизително 6.0 пъти по-малко от размера на корекциите от ядра 5.19 и 13165. Промените засегнаха 716247 304560 файла, бяха добавени 45 6.1 реда код и 14 14 реда бяха изтрити. Около 3% от всички промени, въведени в 3, са свързани с драйвери на устройства, приблизително XNUMX% от промените са свързани с актуализиране на код, специфичен за хардуерни архитектури, XNUMX% са свързани с мрежов стек, XNUMX% са свързани с файлови системи и XNUMX% са свързани с вътрешни подсистеми на ядрото.

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

  • Памет и системни услуги
    • Добавена е възможност за използване на Rust като втори език за разработване на драйвери и модули на ядрото. Основната причина за поддръжката на Rust е да се улесни писането на безопасни и висококачествени драйвери за устройства чрез намаляване на вероятността от допускане на грешки при работа с памет. Поддръжката на Rust е деактивирана по подразбиране и не води до включването на Rust като задължителна зависимост за изграждане на ядрото. Ядрото досега е приело минимална, съкратена версия на пачовете, която е намалена от 40 на 13 хиляди реда код и предоставя само необходимия минимум, достатъчен за изграждане на прост модул на ядрото, написан на езика Rust. В бъдеще се планира постепенно увеличаване на съществуващата функционалност, прехвърляне на други промени от клона Rust-for-Linux. Успоредно с това се разработват проекти за използване на предложената инфраструктура за разработване на драйвери за NVMe устройства, мрежовия протокол 9p и Apple M1 GPU на езика Rust.
    • За системи, базирани на архитектури AArch64, RISC-V и LoongArch с EFI, е внедрена възможност за директно зареждане на компресирани изображения на ядрото. Добавени манипулатори за зареждане, изпълнение и разтоварване на изображения на ядрото, извиквани директно от EFI zboot. Добавени са също манипулатори за инсталиране и изтриване на протоколи от базата данни с протоколи EFI. Преди това разопаковането се извършваше от отделен буутлоудър, но сега това може да се направи от манипулатор в самото ядро ​​- изображението на ядрото се формира като EFI приложение.
    • Съставът включва част от пачовете с внедряването на многостепенен модел за управление на паметта, който ви позволява да отделяте банки памет с различни характеристики на производителност. Например, най-често използваните страници могат да се съхраняват в най-бързата памет, докато най-рядко използваните страници могат да се съхраняват в относително бавна памет. Ядрото 6.1 въвежда механизъм за определяне къде се намират силно използваните страници в бавната памет, така че да могат да бъдат повишени към бърза памет, и също така въвежда обща концепция за нивата на паметта и тяхната относителна производителност.
    • Той включва механизма MGLRU (Multi-Generational LRU), който заменя старата реализация LRU (Lest Recently Used), базирана на две опашки с многоетапна структура, която по-добре определя кои страници от паметта действително се използват и кои могат да бъдат изтласкани към суап дяла.
    • Добавена е поддръжка за структурата на данните „кленово дърво“, предложена от инженерите на Oracle, която се позиционира като по-ефективен заместител на структурата „червено-черно дърво“. Maple tree е вариант на B-tree, който поддържа индексиране на обхват и е проектиран да използва ефективно кеша на съвременните процесори. Някои подсистеми за управление на паметта вече са прехвърлени към кленово дърво, което има положителен ефект върху тяхната производителност. В бъдеще кленовото дърво може да се използва за прилагане на заключване на диапазон.
    • Възможността за създаване на „разрушителни“ BPF програми, специално проектирани да инициират аварийно изключване чрез извикването crash_kexec(), е добавена към подсистемата BPF. Такива BPF програми може да са необходими за целите на отстраняване на грешки, за да инициират създаването на дъмп за срив в определен момент от време. За достъп до деструктивни операции при зареждане на BPF програма, трябва да посочите флага BPF_F_DESTRUCTIVE, да активирате sysctl kernel.destructive_bpf_enabled и да имате CAP_SYS_BOOT права.
    • За BPF програми е възможно да се изброят елементи на cgroup, както и да се изброят ресурси (файлове, vma, процеси и т.н.) на конкретна нишка или задача. Въведен е нов тип карта за създаване на потребителски пръстенни буфери.
    • Добавено е специално извикване за разпределение на памет в BPF програми (разпределител на памет), което осигурява по-безопасно разпределение на памет в контекста на BPF от стандартния kmalloc().
    • Първата част от промените е интегрирана, предоставяйки възможност за създаване на драйвери за входни устройства с HID (Human Interface Device) интерфейс, реализиран под формата на BPF програми.
    • Ядрото напълно премахна кода, за да поддържа формата на изпълним файл a.out, който беше остарял във версия 5.1 и беше деактивиран за основните архитектури от версии 5.18 и 5.19. Форматът a.out отдавна е остарял в Linux системите и генерирането на a.out файлове не се поддържа от съвременните инструменти в конфигурациите на Linux по подразбиране. Зареждащото устройство за a.out файлове може да бъде внедрено изцяло в потребителското пространство.
    • За системи, базирани на архитектурата на набора от инструкции LoongArch, използвана в процесорите Loongson 3 5000 и внедряваща новия RISC ISA, подобен на MIPS и RISC-V, е внедрена поддръжка за събития за измерване на производителността (perf събития), kexec, kdump и BPF JIT компилация .
    • Асинхронният входно/изходен интерфейс io_uring предлага нов режим, IORING_SETUP_DEFER_TASKRUN, който позволява работата, свързана с пръстенния буфер, да бъде временно отложена, докато не бъде направена заявка за приложение, което може да се използва за групова работа и избягване на проблеми със закъснението поради изпреварване. грешно време.
    • На процесите в потребителското пространство е дадена възможността да инициират преобразуване на диапазон от нормални страници с памет в набор от големи страници с памет (Transparent Huge-Pages).
    • Добавена е реализация на устройството /dev/userfaultfd, което позволява достъп до функционалността на системното извикване userfaultfd(), използвайки права за достъп във FS. Функционалността userfaultfd ви позволява да създавате манипулатори за достъп до страници с неразпределена памет (грешки на страници) в потребителското пространство.
    • Изискванията за версията на помощната програма GNU Make са увеличени - сега е необходима поне версия 3.82 за изграждане на ядрото.
  • Дискова подсистема, I/O и файлови системи
    • Направени са значителни оптимизации на производителността на файловата система Btrfs; наред с други неща, производителността на FIEMAP ioctl повикването е увеличена с порядъци. Добавена е поддръжка за асинхронни буферирани записи за приложения, използващи io_uring. Добавена е поддръжка за файлове, защитени с fs-verity към операцията „изпращане“.
    • Файловата система ext4 има добавени оптимизации на производителността, свързани с поддръжката на журнала и операцията само за четене.
    • Файловата система EROFS (Подобрена файлова система само за четене), предназначена за използване на дялове, достъпни в режим само за четене, реализира възможността за споделяне на данни, дублирани в различни файлови системи.
    • Системното извикване statx() е добавено за показване на информация за това дали директният I/O може да бъде приложен към файл.
    • Поддръжката за създаване на временни файлове с флага O_TMPFILE е добавена към подсистемата FUSE (Файлови системи в потребителското пространство).
  • Виртуализация и сигурност
    • Изпълнението на механизма за защита на CFI (интегритет на контролния поток) е заменено, добавяйки проверки преди всяко непряко извикване на функция за откриване на някои форми на недефинирано поведение, което потенциално може да доведе до нарушаване на нормалния ред на изпълнение (поток на управление) като резултат от използването на експлойти, които променят указатели към функции, съхранени в паметта. Стандартното внедряване на CFI от проекта LLVM е заменено с опция, също базирана на използването на Clang, но специално адаптирана за защита на подсистемите от ниско ниво и ядрата на операционната система. В LLVM ще бъде предложена нова реализация в изданието Clang 16 и ще бъде активирана с опцията "-fsanitize=kcfi". Ключовата разлика с новата реализация е, че тя не е обвързана с оптимизации на времето за връзка (LTO) и не води до заместване на указатели на функции с връзки в таблицата за прескачане.
    • За LSM модули (Linux Security Module) е възможно да се създадат манипулатори, които прихващат операции за създаване на пространства от имена.
    • Осигурени са инструменти за проверка на PKCS#7 цифрови подписи в BPF програми.
    • Възможността за отваряне в неблокиращ режим (O_NONBLOCK), която беше премахната по невнимание в ядрото 5.6, беше върната в /dev/random.
    • В системи с x86 архитектура е добавено предупреждение в случай на картографиране на страници с памет от подсистеми на ядрото, които едновременно позволяват изпълнение и запис. В бъдеще се обмисля възможността за пълна забрана на подобно картографиране на паметта.
    • Добавен е KMSAN (Kernel Memory Sanitizer) механизъм за отстраняване на грешки за откриване на неинициализирано използване на паметта в ядрото, както и неинициализирано изтичане на памет между потребителското пространство и устройствата.
    • Направени са подобрения в крипто-сигурния генератор на псевдослучайни числа CRNG, използван в повикването getrandom. Промените са подготвени от Джейсън А. Доненфелд, автор на VPN WireGuard, и са насочени към подобряване на сигурността на извличането на псевдослучайни цели числа.
  • Мрежова подсистема
    • TCP стекът предоставя възможност (забранено по подразбиране) за използване на хеш-таблици на сокет отделно за всяко пространство от имена, което подобрява производителността на системи с голям брой пространства от имена.
    • Премахнат код за поддръжка на наследения протокол DECnet. API за потребителско пространство са оставени на място, за да позволят компилирането на приложения, които използват DECnet, но тези приложения няма да могат да се свързват с мрежата.
    • Протоколът netlink е документиран.
  • Оборудование
    • Драйверът amdgpu добави поддръжка за DSC (Display Stream Compression) пренасочване за компресиране на данни без загуба при обмен на информация с екрани, които поддържат много високи разделителни способности. Продължава работата по осигуряване на поддръжка за платформите AMD RDNA3 (RX 7000) и CDNA (Instinct). Добавена е поддръжка за DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x и GMC 11.x IP компоненти. Драйверът amdkfd (за дискретни графични процесори AMD като Polaris) осигурява поддръжка за GFX 11.0.3.
    • Драйверът i915 (Intel) включва поддръжка за Meteor Lake GPU. Meteor Lake и по-новите графични процесори поддържат интерфейс DP 2.0 (DisplayPort). Добавени са идентификатори за видеокарти, базирани на микроархитектурата Alder Lake S.
    • Добавена е поддръжка за аудио подсистеми, внедрени в процесорите Apple Silicon, Intel SkyLake и Intel KabyLake. Аудио драйверът CS35L41 HDA поддържа режим на заспиване. Добавена поддръжка на ASoC (ALSA System on Chip) за интегрирани аудио чипове Apple Silicon, AMD Rembrant DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake и Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qualcomm SC8280XP, SM8250, SM8450 и Texas Instruments SRC4392
    • Добавена е поддръжка за LCD панели Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116W H M-N21, INX N116BCA- EA2 , INX N116BCN-EA1, Multi-Inno Technology MI0800FT-9.
    • Добавена е поддръжка за AHCI SATA контролери, използвани в Baikal-T1 SoC.
    • Добавена е поддръжка за Bluetooth чипове MediaTek MT7921, Intel Magnetor (CNVi, интегрирана свързаност), Realtek RTL8852C, RTW8852AE и RTL8761BUV (Edimax BT-8500).
    • Драйверът ath11k за безжични модули на Qualcomm е добавил поддръжка за спектрално сканиране в диапазона от 160 MHz, реализиран многонишков NAPI и подобрена поддръжка за Wi-Fi чипове Qualcomm WCN6750.
    • Добавени са драйвери за клавиатура PinePhone, тъчпадове InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, дистанционни XBOX One Elite, таблети XP-PEN Deco Pro S и Intuos Pro Small (PTH-460).
    • Добавен драйвер за Aspeed HACE (Hash and Crypto Engine) криптографски ускорители.
    • Добавена е поддръжка за интегрирани контролери Thunderbolt/USB4 Intel Meteor Lake.
    • Добавена е поддръжка за смартфони Sony Xperia 1 IV, Samsung Galaxy E5, E7 и Grand Max, Pine64 Pinephone Pro.
    • Добавена поддръжка за ARM SoC и платки: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 и RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/ BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Актуализирани драйвери за SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom и NXP.

В същото време Латиноамериканската фондация за свободен софтуер създаде версия на напълно безплатното ядро ​​6.1 - Linux-libre 6.1-gnu, изчистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или части от код, чийто обхват е ограничено от производителя. Новата версия почиства новия драйвер rtw8852b и DTS файловете за различни Qualcomm и MediaTek SoC с процесори, базирани на архитектурата AArch64. Актуализиран код за почистване на петна в драйвери и подсистеми amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Почистването на остарели драйвери tm6000 TV карти, cpia2 v4l, sp8870, av7110 е коригирано.

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

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