Издание на ядрото Linux 6.1.

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

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

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

  • Памет и системни услуги
    • Добавена е възможност за използване на езика Rust като втори език за разработка на драйвери и модули на ядрото. Основната причина за поддръжката на Rust е опростяване на написването на безопасни и качествени драйвери на устройства, чрез намаляване на вероятността от овладяване на грешки при работа с паметта. Поддръжката на Rust не е активна по подразбиране и не води до включване на Rust в задължителните зависимости за изграждане на ядрото. В ядрото е приет минимален вариант на пачовете, който е съкратен от 40000 до 13000 реда код и осигурява само необходимия минимум, достатъчен за изграждане на прост модул на ядрото, написан на езика Rust. В бъдеще се планира постепенно разширяване на наличната функционалност, пренасяйки и други изменения от клонa Rust-for-Linux. Паралелно с това се развиват проекти за използване на предложената инфраструктура за разработка на езика Rust за драйвери на NVMe дискове, мрежовия протокол 9p и графичния процесор Apple M1.
    • За системите с архитектури AArch64, RISC-V и LoongArch с EFI е реализирана възможност за директно зареждане на компресирани изображения на ядрото. Добавени са обработчици за зареждане, стартиране и изключване на изображения на ядрото, повиквани директно от EFI zboot. Също така са добавени обработчици за инсталиране и премахване на протоколи от базата данни на EFI протоколите. По-рано разархивирането се извършваше чрез отделен зареждащ модул, а сега това може да бъде направено от обработчик в самото ядро — изображението на ядрото се формира като EFI-приложение.
    • Включени са част от пачовете с реализация на многопластовата модел за управление на паметта, позволяваща разпределение на банки с памет с различни характеристики на производителността. Например, най-интензивно използваните страници могат да бъдат разположени в най-бързата памет, докато рядко използваните страници могат да се съхраняват в относително бавна памет. В ядрото 6.1 е приет механизъм за определяне на местоположението на интензивно използваните страници в бавната памет, за да бъдат преместени в бързата памет, както и е реализирана обща концепция за нива на паметта и относителната им производителност.
    • Включен е механизъм MGLRU (Multi-Generational LRU), който замени старата реализация LRU (Least Recently Used) на базата на две опашки с многостепенна структура, която по-добре определя кои страници на паметта наистина се използват и кои могат да бъдат изтласкани в раздел за обмен.
    • Добавена е поддръжка на предложената от инженерите на Oracle структура от данни „maple tree“, която се представя като по-ефективна алтернатива на структурата „red-black tree“. Maple tree е вариант на B-tree, поддържащ индексиране по диапазони на стойности и проектиран за ефективно използване на кеша. модерни процесори. Вече някои подсистеми за управление на паметта са преминали на maple tree, което положително се отрази на тяхната производителност. В бъдеще maple tree може да се използва за реализиране на блокировки по диапазони (range locking).
    • В подсистемата BPF е добавена възможност за създаване на "деструктивни" BPF програми, специално проектирани за инициране на аварийно завършване чрез извикване на crash_kexec(). Подобни BPF програми могат да се изискват за отстраняване на проблеми, за да инициират създаването на crash дамп в определен момент. За достъп до деструктивните операции при зареждане на BPF програмата е необходимо да се зададе флагът BPF_F_DESTRUCTIVE, активиране на sysctl kernel.destructive_bpf_enabled и наличие на права CAP_SYS_BOOT.
    • За BPF програмите е предоставена възможност за обход на елементите на cgroup, както и за обход на ресурсите (файлове, vma, процеси и т.н.) на определен поток или задача. Реализиран е нов тип карта за създаване на потребителски кръгови буфери (user ring buffer).
    • Добавен е специален извикване за разпределение на паметта в BPF програмите (memory allocator), което осигурява по-сигурно разпределение на паметта в контекста на 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 event), kexec, kdump и JIT компилация на BPF.
    • В интерфейса на асинхронния вход/изход io_uring е предложен нов режим IORING_SETUP_DEFER_TASKRUN, позволяващ временно отлагане на изпълнението на свързаните с кръговия буфер задачи до момента, в който постъпи запитване от приложението, което може да се използва за организиране на изпълнение на задачи в пакетен режим и предотвратяване на проблеми със закъснения поради извеждане на приложението в неподходящ момент.
    • На потребителското пространство е предоставена възможност за иницииране на преобразуването на диапазона от обикновени страници памет в набор от големи страници памет (Transparent Huge-Pages).
    • Добавена е реализация на устройството /dev/userfaultfd, която позволява организиране на достъпа до функционалността на системния повик userfaultfd() с използване на права за достъп в FS. Функционалността на userfaultfd позволява създаването на обработчици на повиквания към неразпределени страници памет (page faults) в потребителското пространство.
    • Повишени са изискванията към версията на утилитата GNU Make — за компилиране на ядрото сега се изисква най-малко версия 3.82.
  • Дискова подсистема, вход/изход и файлови системи
    • В файловата система Btrfs са внедрени съществени оптимизации на производителността, сред които значително е увеличена производителността на ioctl-викането FIEMAP. Добавена е поддръжка за асинхронно буферирано записване за приложения, използващи io_uring. Добавена е поддръжка за файлове, защитени с fs-verity, в операцията 'send'.
    • В файловата система ext4 са добавени оптимизации на производителността, свързани с поддържането на журнала и работата в режим само за четене.
    • В файловата система EROFS (Enhanced Read-Only File System), предназначена за работа на дялове, достъпни в режим само за четене, е реализирана възможност за съвместно съхранение на данни, дублиращи се в различни файлови системи.
    • В системния повик statx() е добавена възможност за извеждане на информация за възможността за прилагане на директно четене/запис на файла.
    • В подсистемата FUSE (Filesystems in User Space) е добавена поддръжка за създаване на временни файлове с флага O_TMPFILE.
  • Виртуализация и безопасност
    • Заменена реализация механизма защити CFI (Control Flow Integrity), който добавя проверка преди всеки косвен извик на функция, за да разкрие някои форми на неопределено поведение, които потенциално биха могли да нарушат нормалния ред на изпълнение (control flow) в резултат на експлоити, променящи съхраняваните в паметта указатели към функции. Стандартната реализация на CFI от проекта LLVM е заменена с вариант, също основан на Clang, но специално адаптиран за защита на нискоуровневи подсистеми и ядра на операционни системи. В LLVM новата реализация ще бъде предложена в версия Clang 16 и ще бъде включена с опцията „-fsanitize=kcfi“. Ключовата разлика на новата реализация е, че тя не е обвързана с оптимизации на етапа на свързване (LTO) и не води до замяна на указателите към функции с референции в таблицата за прехвърляния.
    • За LSM модулите (Linux Security Module) е предоставена възможност за създаване на обработчици, които прихващат операции по създаване на пространства с имена.
    • Предоставени са средства за верификация на цифровите подписи PKCS#7 в BPF програми.
    • В /dev/random е възстановена възможността за отваряне в ненатрапващ режим (O_NONBLOCK), която по недоглеждане беше премахната в ядрото 5.6.
    • На системи с архитектура x86 е добавено предупреждение в случай на мапинг от ядрото на страници от паметта, което допуска едновременно изпълнение и запис. В бъдеще се разглежда възможността напълно да се забрани подобен мапинг на паметта.
    • Добавен е отладъчен механизъм KMSAN (Kernel Memory Sanitizer) за разкриване на използването на неинициализирана памет в ядрото, както и изтичането на неинициализирана памет между пространството на потребителя и устройствата.
    • Направени са подобрения в криптонадеждния генератор на псевдослучайни числа CRNG, използван в повикването getrandom. Промените са подготвени от Джейсън Доненфилд (Jason A. Donenfeld), автора на WireGuard, и са насочени към повишаване на сигурността при извличането на псевдослучайни цели числа. VPN В TCP стека е реализирана възможност (деактивирана по подразбиране) за отделно използване на хеш-таблици за сокети за всяко пространство на имена, което позволява подобряване на производителността на системи с голям брой пространства на имена.
  • Мрежовата подсистема
    • В TCP стека е реализирана възможност (изключена по подразбиране) за отделно използване на хеш-таблици за сокети за всяко пространство на имена, което позволява повишаване на производителността на системи с голям брой пространства на имена.
    • Премахнат е кодът за поддръжка на остарял протокол DECnet. За пространството на потребителя са оставени API за модули, позволяващи компилирането на приложения, използващи DECnet, но тези приложения няма да могат да се свържат към мрежата.
    • Документиран е протоколът netlink.
  • Оборудване
    • В драйвера amdgpu е добавена поддръжка за предаване на DSC (Display Stream Compression) за беззагубно компресиране на данни при обмена с дисплеи, поддържащи много висока резолюция. Продължава работата по осигуряване на поддръжка на платформи AMD RDNA3 (RX 7000) и CDNA (Instinct). Добавена е поддръжка за IP компоненти DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x и GMC 11.x. В драйвера amdkfd (за дискретни GPU на AMD, като Polaris) е реализирана поддръжка на GFX 11.0.3.
    • В драйвера i915 (Intel) е включена поддръжка за GPU Meteor Lake. За Meteor Lake и по-нови GPU е осигурена поддръжка на интерфейса 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 NT116WHM-N21, INX N116BCA-EA2, INX N116BCN-EA1, Multi-Inno Technology MI0800FT-9.
    • Добавена е поддръжка за контролери AHCI SATA, използвани в SoC Baikal-T1.
    • Добавена е поддръжка за Bluetooth чипове MediaTek MT7921, Intel Magnetor (CNVi, Integrated Connectivity), 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 (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 файловете за различни SoC на Qualcomm и MediaTek с процесори на базата на архитектура AArch64. Кодът за почистване на блобовете в драйверите и подсистемите amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI е актуализиран. Коригирано е почистването на остарелите драйвери tm6000 TV карти, cpia2 v4l, sp8870, av7110.

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

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