След два месеца разработка Линус Торвалдс представи изданието на ядрото на Linux 6.8. Сред най-забележителните промени: драйвер Xe за Intel GPU, режим за защита на блочни устройства с монтирани файлови системи, механизъм за планиране на задачи Deadline server, автоматична оптимизация на сливането на идентични страници в паметта, първият драйвер на езика Rust, системни повиквания listmount и statmount, премахване на bpfilter и SLAB, механизъм guest_memfd в KVM, профилиране на достъпа до данни.
В новата версия са приети 15641 поправки от 2018 разработчици, размерът на патча е 44 МБ (промените засягат 12212 файла, добавени са 663864 реда код, премахнати са 339094 реда). В предишното издание бяха 18405 поправки от 2066 разработчици, размерът на патча беше 72 МБ. Около 42% от всички представени в 6.8 промени са свързани с устройства драйвери, приблизително 15% от промените са свързани с актуализация на код, специфичен за архитектури, 14% са свързани с мрежовия стек, 6% — с файловите системи и 3% с вътрешните подсистеми на ядрото.
В Git-репозитория с ядрото 6.8 присъстват 9.996 млн. обекта, което показва, че следващото ядро 6.9 ще премине знаковия праг от 10 млн. git-обекта. По-рано смяната на номер на клон 3.x и 4.x беше добре корелирана с броя на git-обектите в репозитория — ядрото 3.0 беше издадено, когато в репозитория се намираха около 2 млн. обекта, а ядрото 4.0 — 4 млн. обекта. Въпреки това, през 2019 г. изданието 5.0 прекъсна тази логическа верига, тъй като при неговото формулиране репозиторият включваше около 6.5 млн. git-обекта.
Основни нововъведения в ядрото 6.8:
- Дискова подсистема, вход/изход и файлови системи
- Добавен е режим на блокиране на директно записване на блочни устройства, на които има монтирани файлови системи (след активиране на режима, потребителят root не може да направи промени в файловата система чрез манипулации на ниво блочно устройство). По подразбиране режимът е деактивиран и изисква указването на параметъра BLK_DEV_WRITE_MOUNTED при компилиране. За раздели с Btrfs блокирането все още не работи, тъй като в кода на Btrfs все още не са приети необходимите промени.
- Добавени са системни повиквания listmount() и statmount(), позволяващи на потребителите да получат подробна информация за монтираните файлови системи.
- Във файловата система XFS продължава работата по реализацията на възможността за използване на утилитата fsck за проверка и коригиране на идентифицираните проблеми в online режим, без демонтиране на файловата система.
- В Ext4 за блокове с размер по-малък от страница памет е задействан повикването dioread_nolock, което позволява повишаване на производителността чрез премахване на излишните блокировки. Някои функции са трансформирани да използват фолианти на страниците памет (page folios).
- В Btrfs е добавена поддръжка на флага за монтиране „nospace_cache“ за деактивиране на кеша на свободните блокове. Някои функции са адаптирани да използват фолианти на страниците памет (page folios).
- Във файловата система EROFS (Extendable Read-Only File System), предназначена за използване на дялове, достъпни само в режим само за четене, е добавена поддръжка на компресия на субстраници и подобрена работа в ситуации на недостиг на памет.
- Във файловата система F2FS е подобрена поддръжката на зонирани устройства за съхранение (разделение на зони от блокови групи или сектори, в които е позволено само последователно добавяне на данни с обновяване на цялата група блокове).
- За файловата система SMB е реализирана възможност за създаване на блочни и символните файлове на устройства.
- В Bcachefs е добавена частична поддръжка за проверка и възстановяване на целостта на монтираните файлови системи.
- В подсистемата device-mapper е прекратена поддръжката на обработчици MD_LINEAR, MD_MULTIPATH и MD_FAULTY, обявени за остарели през 2021 година.
- Памет и системни услуги
- В подсистемата Zswap е добавена активирана при недостиг на оперативна памет функция за принудително изхвърляне в реален дял за подкачка на "студени" страници памет, до които не е имало достъп и които вероятно ще останат неизползвани. Zswap кешира страниците, които се изхвърлят в дяла за подкачка, съхранявайки ги в оперативната памет в компресиран вид, ако е възможно, без да ги сбрасыва в реалния неконпресирания дял на диска. Промените при недостиг на памет позволяват намаляване на размера на хранилището в оперативната памет на пул Zswap и освобождаване на памет за системата.
- В Zswap е предложен нов режим, който напълно деактивира отложеното записване (writeback) в реалния дял за подкачка, ако опитът за запис е неуспешен, и не сбрасыва вече съществуващите в пула Zswap страници в дяла за подкачка.
- В задачника е добавен механизъм SCHED_DEADLINE server, който решава проблема с недостига на CPU ресурси при обикновените задачи поради монополизирането им от високоприоритетни (realtime) задачи. За да се предотврати монополизацията на CPU, в ядрото преди е използван механизъм Realtime throttling, който се опитваше да резервира 5% от времето за нископриоритетни задачи, оставяйки 95% за realtime задачите. Този механизъм обаче не беше достатъчно ефективен, тъй като обикновените задачи често не получаваха нужното процесорно време. SCHED_DEADLINE server реализира по-ефективен механизъм за резервиране на ресурси.
- В подсистемата DAMON (Data Access MONitor), която позволява да се следи достъпа на процесите до данни в оперативната памет (например, можете да разберете до кои области на паметта е имал достъп процесът и кои области са останали невостребвани), е добавен механизъм за автоматична настройка на агресивността на потреблението на паметта на база зададени квоти.
- Добавена е поддръжка за многоразмерни големи страници памет (mTHP — multi-size Transparent Huge Pages), която позволява разпределяне на памет в блокове, по-големи от основната страница, но по-малки от традиционната THP страница.
- Добавена е поддръжка за големи фолианти (page folios, комбинирани страници памет) за анонимна памет (не свързана с файловата система, например, разпределена чрез malloc). Тази промяна е насочена към повишаване на производителността чрез разпределяне на по-големи блокове памет при достъпа до неразпределени страници памет (page faults). Например, използването на големи фолианти е позволило да се намали времето за повторно сглобяване на ядрото с 5% (при намаляване на времето прекарано на ядрото с 40%).
- В конфигурационния файл на ядрото е добавен параметър TRANSPARENT_HUGEPAGE_NEVER, който позволява да се изключи използването на големи страници памет (Transparent Huge Pages).
- В системния повик userfaultfd(), който позволява създаването на обработчици за достъпи до неразпределени страници памет (page faults) в потребителското пространство, е добавена операция UFFDIO_MOVE, която позволява при опаковане на купчини (heap compaction) да се преместят страници памет в виртуалното адресно пространство без извършване на операция по разпределяне на страница памет. В проведените тестове, използването на UFFDIO_MOVE е позволило да се намали времето за опаковане с 40% в сравнение с използването на операцията UFFDIO_COPY.
- Добавен механизъм „KSM advisor“, който автоматично оптимизира параметрите на подсистемата за сливане на идентични страници в паметта (KSM — Kernel Samepage Merging).
- Продължава прехвърлянето на изменения от клон Rust-for-Linux, свързани с използването на Rust като втори език за разработка на драйвери и модули на ядрото (поддръжката на Rust не е активна по подразбиране и не води до включване на Rust сред задължителните зависимости за компилация на ядрото). В новата версия са включени изменения, добавящи Rust обвивка над нивото на абстракция phylib и използваща тази обвивка драйвер ax88796b_rust, осигуряващ поддръжка за PHY интерфейса на Ethernet контролера Asix AX88772A (100MBit). По функционалност драйверът на Rust е напълно еквивалентен на стария драйвер ax88796b, написан на C, и може да бъде използван с мрежови карти X-Surf 100, оборудвани с чип AX88796B. За архитектурата LoongArch е предоставена възможност за писане на модули на езика Rust. Извършен е преход към използване на версия Rust 1.74.1.
- Добавен е механизъм BPF токен, позволяващ селективно делегиране на обработка на отделни възможности на BPF, като зареждане на BPF програма или създаване на BPF карта, на непривилегировани процеси в потребителското пространство, чиято достоверност е потвърдена от специален токен.
- Разширена е функционалността на верификатора на BPF програми.
- В утилитата perf е добавена поддръжка за профилиране на данни, позволяваща проследяване на четене и запис в структури от данни, например, с цел идентифициране на най-активно модифицираните полета в структурите. На системи с процесори, поддържащи събиране на информация за операции с паметта (Intel, AMD, ARM), за натрупване на статистика следва да се използва командата „perf mem record“, а за извеждане на отчет за достъпа до структури от данни — „perf annotate —data-type“.
- Извършена е оптимизация на производителността при обработката на системни повиквания на архитектурата s390 (IBM Z), което доведе до ускоряване на входа в системното повикване с около 11% в тестовете.
- Предоставена е възможност за промяна на размера на буферите за проследяване, използвани за буфериране на информация за събитията от проследяването, предавани в потребителското пространство.
- Премахнат е остарелият механизъм за разпределение на памет SLAB, вместо който в ядрото сега се използва само SLUB. Причината за това са проблемите с поддръжката, наличие на проблеми в кода и дублирането на функционалността с по-усъвършенствания алокатор SLUB.
- При компилирането на ядрото е включен флагът „-Wmissing-prototypes“, който генерира предупреждения за извиквания на глобални функции, които нямат определение на прототип.
- За архитектурата RISC-V на системи с поддръжка на разширението SUSP е реализирана поддръжка за преминаване в режим на покой с запазване на състоянието в ОЗУ. Предоставена е възможност за използване на системния повик riscv_hwprobe() за получаване на информация за поддържаните разширения на архитектурата на командния набор RISC-V.
- Виртуализация и безопасност
- Добавени са нови системни повици lsm_list_modules(), lsm_get_self_attr() и lsm_set_self_attr() за извеждане на списък с заредените LSM модули (Linux Security Modules) и за получаване/установяване на атрибутите на LSM модула. Добавена е нова структура lsm_ctx за комуникация в контекста на LSM между потребителското пространство и ядрото.
- Подсистемата AppArmor е преместена на използването на алгоритъма SHA-256 за верифициране на правилата, вместо хешовете SHA-1.
- От ядрото е премахната реализацията на функцията strlcpy(), която през лятото беше включена в състава на C библиотеката Glibc 3.38. Strlcpy е алтернатива на функцията strncpy(), която има защита срещу препълване на буфера и задължително поставя нулев байт за завершваща низ.
- В хипервизора KVM е добавена поддръжка на подсистемата guest_memfd (гост-first памет), която предоставя функции за управление на паметта, позволяващи реализиране на възможности и оптимизации, недостижими при използване на общата подсистема за управление на паметта. Например, guest_memfd предоставя възможност за резервиране и отразяване на неизменяема за хост средата област от паметта за гостуващата система, което може да се използва за организиране на конфиденциални изчисления.
- За системите на гости, работещи под управлението на хипервизора KVM, е включена поддръжка на режима LAM (Linear Address Masking), предоставян от процесорите Intel, който позволява използването на част от битовете на 64-битови указатели (от 57 до 62 бит) за съхранение на несвързани с адресирането метадани.
- KVM хипервизорът с архитектура ARM64 добави поддръжка за 52-битови (LPA2) физически адреси. За системи с x86 архитектура е предоставена възможност за компилация без емулация на Hyper-V хипервизии, което позволява намаляване на размера на ядрото.
- Добавен е драйверът iaa (IAA Compression Accelerator) за ускоряване на операцията по компресия и разархивиране на данни с метода DEFLATE, използвайки възможностите на криптографските ускорители Intel Analytics Accelerator (IAA).
- На страната на хост-околната среда е реализирана поддръжка на механизма Intel TDX (Trusted Domain Extensions), който позволява създаването на защитени гост-проекти с хипервизор KVM, при които се използва криптиране на паметта. на виртуални машини.
- В SELinux е добавен идентификатор SID «init», който позволява отделяне на процесите, стартирани в началния етап на зареждане, преди прилагането на политиките на SELinux. Интерфейсът /sys/fs/selinux за управление на SELinux е подобрен.
- Мрежовата подсистема
- Извършена е нискоуровнева реорганизация на основните мрежови структури от данни с цел подобряване на ефективността на кеширането. По-рано полетата в структурите на мрежовия стек socks, netdev, netns и mibs бяха разположени произволно, което ограничаваше използването на процесорния кеш. Преразглеждането на разположението на променливите в структурите доведе до значително увеличаване на скоростта на работа на TCP, благодарение на минимизацията на използването на кешни редове на етапа на предаване на данни и оптимизацията на достъпа до променливите. В случаи на обработка на множество паралелни TCP връзки ускорението може да достигне 40%.
- Премахната е подсистемата bpfilter, използваща BPF за филтриране на пакети. Bpfilter се доставяше от версия 4.18, но не беше достигнато ниво, подходящо за широко използване. През последните години кодът на bpfilter в ядрото не се развиваше, а разработката продължаваше от компанията Facebook в отделно хранилище.
- Оборудване
- Включен новия drm-драйвер (Direct Rendering Manager) Xe за GPU, базирани на архитектурата Intel Xe, която се използва в видеокартите Intel от серията Arc и интегрираната графика, започвайки с процесорите Tiger Lake. Драйверът Xe се позиционира като основа за работа на новите чипове, независима от кода за поддръжка на стари платформи. Драйверът е построен с нова архитектура, при която по-активно се използват вече съществуващи компоненти на подсистемата DRM, както и типични компоненти на драйвера i915, не зависещи от конкретни GPU, например, код за взаимодействие с екрани, модел на паметта и реализация на execbuf. В Mesa работата на OpenGL и Vulkan над драйвера Xe е реализирана на база изменения, внесени в съществуващите Mesa-драйвери Iris и ANV.
- В драйвера i915 продължава работата по реализацията на поддръжка за чиповете Intel LunarLake (Xe 2). Подобрена е поддръжката на чиповете Intel Meteor Lake.
- В драйвера Nouveau е реализирана настройка за използване по подразбиране на функции за фърмуер GSP за работа с GPU NVIDIA, базирани на микроархитектурите Turing и Ampere, при които операциите по инициализация и управление на GPU се извършват от отделен микроконтролер GSP (GPU System Processor). При включване на настройката драйверът ще работи чрез повикване към фърмуера, вместо чрез директно програмиране на операции за взаимодействие с хардуера.
- В драйвера AMDGPU е реализирана поддръжка на ACPI WBRF и VPE DPM, променена е обработката на скоростта на канала PCIe, в използваните за синхронизация опашки са задействани 64-битови поредни номера, добавена е поддръжка на специфични за AMD механизми за управление на цвят, решен е проблемът с преминаването в спящ режим.
- Добавена е начална реализация на драйвера за GPU Broadcom VideoCore 7.1, използван в Raspberry Pi 5.
- Добавен е драйвер за GPU серия PowerVR 6, базиран на микроархитектурата Rogue от Imagination Technologies.
- Добавена е поддръжка на контролери Thunderbolt/USB4, интегрирани в чиповете на база микроархитектурата Intel Lunar Lake.
- Добавени са драйвери за камери, използвани в SoC Starfive, GalaxyCore GC2145/GC0308, Chips&Media Wave и THine THP7312.
- Добавена е поддръжка на игрови контролери NSO (Nintendo Switch Online) — варианти на стари контролери от SNES (Super Nintendo), Genesis и N64 (Nintendo 64), адаптирани за Nintendo Switch. Добавен е драйвер за геймпадове Adafruit Seesaw. В драйвера xpad е добавена поддръжка на контролерите Lenovo Legion Go.
- В драйвера dts е добавена поддръжка на игровите устройства Powkiddy RK2023, Powkiddy X55 и Anbernic RG351V.
- Добавена е поддръжка за звукозаписни системи, използвани в чиповете NXP i.MX8m MICFIL, Qualcomm SM8250, AMD ACP5x, Intel Arrow Lake, SM8550, SM8650 и X1E80100.
- Компанията AMD направи промени, свързани с поддръжката на бъдещата серия процесори на новата микроархитектура Zen 5.
- Добавена е поддръжка за ARM64 SoC: Qualcomm SM8650 (Snapdragon 8 Gen 3), Qualcomm X1E80100 (Snapdragon X Elite), Samsung Exynos Auto v920, Google GS101 (Tensor G1), MediaTek MT8188 и Unisoc UMS9620 (Tanggula 7).
- Добавена е поддръжка за ARM платформи и устройства: Huashan Pi, Microsoft Lumia, HTC One Mini 2, Motorola MotoG 4G, Huawei Honor 5X/GR5, Anbernic RG351V, Powkiddy RK2023, Powkiddy X55, ComXpress на базата на Marvell CN913x, Chromebook Lenovo, Asus и Acer на базата на Mediatek MT8183, Toradex Verdin AM62, платки на базата на Allwinner H616/H618.
- Поддръжката на процесори ARM11 ARMv6K SMP е прекратена.
Междувременно Латинска Америка Фонд за свободен софтуер създаде вариант на напълно свободното ядро 6.8 - Linux-libre 6.8-gnu, освободено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чиято употреба е ограничена от производителя. В версия 6.8 е обновен кодът за почистване на блобове в различни драйвери и подсистеми. Извършено е почистване на драйверите Intel qat_420xx, Imagination PowerVR, Intel Xe, Chips&Media Wave5, Intel VSC, Aquantia PHY и Realtek rtw8922a. С премахването от ядрото е прекратено почистването на драйверите atmel, hermes, orinoco_usb, libertas_cs и zd1201. Извършено е почистване на имената на блобовете в dts файловете (devicetree) за архитектурите ARM и Aarch64. Решени са проблемите с почистването на драйвера i915.
Източник: opennet.ru
