След два месеца разработка, Линус Торвалдс представи версията на ядрото Linux 6.0. Значителната промяна на номера на версията е направена по естетически причини и представлява формален ход, който премахва дискомфорта от натрупването на голям брой издания в серията (Линус се пошегува, че причината за смяната на номера на клон е по-скоро поради изчерпване на пръстите на ръцете и краката му да брои версиите). Сред най-забележителните промени: поддръжка на асинхронна буферизирана запис в XFS, блочен драйвер ublk, оптимизация на планиращото устройство, механизъм за верификация на коректността на работата на ядрото, поддръжка на блочен шифър ARIA.
Основни нововъведения в ядрото 6.0:
- Дисковата подсистема, вход/изход и файловите системи
- В файловата система XFS е добавена поддръжка на асинхронно буферирано записване с използване на механизма io_uring. Тестовете за производителност, проведени с помощта на инструмента fio (1 поток, размер на блока 4KB, 600 секунди, последователно записване), показват увеличение на броя на операциите за вход/изход в секунда (IOPS) от 77k до 209k, на скоростта на предаване на данни – от 314MB/s до 854MB/s, и намаляване на латентността от 9600ns до 120ns (80 пъти).
- В файловата система Btrfs е реализирана втора версия на протокола за командата „send“, която осигурява поддръжка на допълнителни метаданни, изпращане на данни с по-големи блокове (над 64K) и предаване на екстенти в компресиран вид. Значително (до 3 пъти) е увеличена производителността на операциите с директно четене (direct read) чрез едновременното четене на до 256 сектора. Намалени са конфликтите на заключванията и е ускорена проверката на метаданни чрез съкращаване на резервираните метаданни за отложени елементи.
- В файловата система ext4 са добавени нови ioctl-операции EXT4_IOC_GETFSUUID и EXT4_IC_SETFSUUID за извличане или задаване на UUID идентификатора, съхраняван в суперблока.
- В файловата система F2FS е предложен режим с ниско потребление на памет, който оптимизира работата на устройства с малък обем ОЗУ и позволява намаляване на потреблението на памет за сметка на производителността.
- Добавена е поддръжка за удостоверяване на NVMe носители.
- В сървър В NFSv4 е въведен лимит на броя на активните клиенти, който е 1024 допустими клиенти на всеки гигабайт оперативна памет в системата.
- В изпълнението на CIFS клиента е повишена производителността в режим на многоканална предача.
- В подсистемата за проследяване на събития във ФС fanotify е добавен нов флаг FAN_MARK_IGNORE за игнориране на специфични събития.
- В Overlayfs, при монтиране върху ФС с мапиране на идентификатори на потребители, е осигурена коректна поддръжка на списъци за управление на достъпа, съвместими с POSIX.
- Добавен е блочен драйвер ublk, който пренася специфичната логика на страната на фонов процес в пространството на потребителя и използва подсистемата io_uring.
- Памет и системни услуги
- В подсистемата DAMON (Data Access MONitor) са добавени нови функции, които позволяват не само да се следи достъпа на процесите до оперативната памет от пространство на потребителя, но и да се влияе на управлението на паметта. В частност, предложен е нов модул „LRU_SORT“, който осигурява прегрупиране на списъците LRU (Least Recently Used), за да повиши приоритета на определени страници памет.
- Реализирана е възможност за създаване на нови региони памет, използвайки възможностите на шина CXL (Compute Express Link), която се прилага за организиране на високоскоростна връзка между CPU и устройства за памет. CXL позволява свързването на нови региони памет, предоставяни от външни устройства за памет, и използването им като допълнителни ресурси на физическото адресно пространство за разширяване на системната оперативна памет (DDR) или постоянна памет (PMEM).
- Решени са проблеми с производителността на системи с процесори AMD Zen, причинени от код, добавен преди 20 години за заобикаляне на хардуерен проблем в някои чипсети (беше добавена допълнителна инструкция WAIT, забавяща процесора, за да може чипсетът да успее да премине в режим на готовност). Това изменение водеше до намаляване на производителността при натоварвания, при които често се редуват състояния на готовност (idle) и активност (busy). Например, след отключване на заобиколния маньовър, средните показатели от теста tbench се увеличиха от 32191 MB/s до 33805 MB/s.
- От планировчика на задачи е премахнат кодът с хеуристика, който осигурява миграция на процеси към най-малко натоварените CPU с оглед на предвиждането на спестяване на енергия. Разработчиците достигнаха до заключението, че хеуристиката не носи достатъчна полза и е по-лесно да се премахне, пренасяйки процесите без допълнителни оценки всеки път, когато подобно пренасяне потенциално може да доведе до намаляване на енергопотреблението (например, когато целевият CPU работи на ниво с по-ниско енергопотребление). Деактивирането на хеуристиката доведе до намаляване на енергопотреблението при интензивни задачи, например, в тест с декодиране на видео, енергопотреблението намаля с 5.6%.
- Оптимизирано е разпределението на задачите по ядра CPU в големи системи, което повиши производителността при определени видове натоварване.
- В интерфейса на асинхронния въвеждане/извеждане io_uring е предложен нов флаг IORING_RECV_MULTISHOT, който позволява използването на режима „multi-shot“ с системния повик recv() за извършване на няколко операции на четене от един мрежов сокет едновременно. В io_uring също е реализирана поддръжка на мрежова предаване без междинно буфериране (zero-copy).
- Реализирана е възможност за прехвърляне на програми BPF, прикрепени към uprobes, в режим на сън. В BPF също е добавен нов итератор ksym за работа с таблиците на символите на ядрото.
- Премахнат е остарелият интерфейс „efivars“ в sysfs, предназначен за достъп до заредени променливи UEFI (за достъп до данни EFI сега повсеместно се прилага виртуалната файлова система efivarfs).
- В утилитата perf са реализирани нови отчети за анализ на конфликти на блокировки и времето, което процесорът прекарва за изпълнение на компонентите на ядрото.
- Премахнат е параметър CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, който позволяваше компилирането на ядрото в режим на оптимизация „-O3“. Уточнено е, че експерименти с режимите на оптимизация могат да се провеждат чрез предаване на флагове при компилиране („make KCFLAGS=-O3“), а за добавяне на настройката в Kconfig е необходимо да се осигури възпроизводимо профилиране на производителността, което показва, че приложението в режим „-O3“ представя цикли, даващи преимущество спрямо нивото на оптимизация „-O2“.
- Добавен интерфейс debugfs за получаване на информация за работата на отделни «memory shrinker» (обработчици, извиквани при недостиг на памет и осъществяващи опаковане на структури от данни в ядрото, за да се намали потреблението им на памет).
- За архитектурите OpenRISC и LoongArch е реализирана поддръжка на PCI шина.
- За архитектурата RISC-V е реализирано разширение «Zicbom» за управление на устройства с DMA, несъгласувани с кеша (non-cache-coherent).
- Виртуализация и сигурност
- Добавен е механизъм за верификация RV (Runtime Verification) за проверка на коректността на работа в системи с висока надеждност, гарантиращи отсъствие на сривове. Проверката се извършва по време на изпълнение чрез присъединяване на обработчици към точки за трасировка, които съпоставят действителния напредък на изпълнението с предварително определената референтна детерминирана моделна машина, задаваща очакваното поведение на системата. Съпоставянето с модела по време на изпълнение се позиционира като по-лек и по-лесен за реализация в практика метод за потвърждаване на коректността на изпълнението в критични системи, допълващ класическите методи за потвърждение на надеждността. Сред предимствата на RV се отбелязва възможността за осигуряване на строга верификация без отделно реализиране на цялата система на език за моделиране, а също така и гъвкаво реагиране на непредвидени събития.
- Интегрирани са компоненти на ядрото за управление на анклави на базата на технологията Intel SGX2 (Software Guard eXtensions), позволяваща на приложенията да изпълняват код в изолирани, криптирани области на паметта, до които достъпът на останалата система е ограничен. Технологията Intel SGX2 се поддържа в чиповете Intel Ice Lake и Gemini Lake и се различава от Intel SGX1 с допълнителни инструкции за динамично управление на паметта на анклавите.
- За архитектурата x86 е реализирана възможност за предаване на семенца за генератора на псевдослучайни числа чрез настройките на зареждача.
- В LSM модула SafeSetID е добавена възможност за управление на изменения, извършвани чрез извикване на setgroups(). SafeSetID позволява на системните услуги безопасно да управляват потребителите без повишаване на привилегиите (CAP_SETUID) и без получаване на правомощията на потребителя root.
- Добавена е поддръжка за блочния шифър ARIA.
- В модула за управление на сигурността, базиран на BPF, е реализирана възможност за прикрепване на обработчици към отделни процеси и групи от процеси (cgroup).
- Добавен е механизъм с реализация на watchdog за определяне на зависвания в гостовите системи, основаващ се на мониторинг на активността на vCPU.
- Мрежова подсистема
- В подсистемата BPF са добавени обработчици за генериране и проверка на SYN cookies. Също така е добавен набор от функции (kfunc) за достъп и изменение на състоянието на връзките.
- В безжичния стек е добавена поддръжка на механизма MLO (Multi-Link Operation), определен в спецификацията WiFi 7, и позволяващ на устройствата да получават и изпращат данни едновременно, използвайки различни честотни диапазони и канали, например, за създаване на няколко канала на свързване между точката за достъп и клиентското устройство.
- Повишена е производителността на вградената в ядрото реализация на протокола TLS.
- Добавен е параметърът на командния ред на ядрото «hostname=», позволяващ задаване на името на хоста в ранната фаза на зареждане, преди да бъдат стартирани компонентите на потребителското пространство.
- Оборудване
- В драйвера i915 (Intel) е осигурена поддръжка за дискретни видео карти Intel Arc (DG2/Alchemist) A750 и A770. Предложена е начална реализация на поддръжката на GPU Intel Ponte Vecchio (Xe-HPC) и Meteor Lake. Продължава работата по поддръжката на платформата Intel Raptor Lake.
- В драйвера amdgpu е продължена работата по осигуряване на поддръжка на платформите AMD RDNA3 (RX 7000) и CDNA (Instinct).
- В драйвера Nouveau е преработен кодът за поддръжка на дисплейните механизми на GPU NVIDIA nv50.
- Добавен е нов DRM-драйвер logicvc за екрани LogiCVC.
- В драйвера v3d (за GPU Broadcom Video Core) е реализирана поддръжка за платките Raspberry Pi 4.
- В драйвера msm е добавена поддръжка на GPU Qualcomm Adreno 619.
- В драйвера Panfrost е добавена поддръжка на GPU ARM Mali Valhall.
- Добавена е начална поддръжка на процесори Qualcomm Snapdragon 8cx Gen3, използвани в лаптопи Lenovo ThinkPad X13s.
- Добавени са звукови драйвери за платформите AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake и Mediatek MT8186.
- Добавена е поддръжка на ускорители за системи за машинно обучение Intel Habana Gaudi 2.
- Добавена е поддръжка на ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530 и Google Chameleon v3.
Същевременно латиноамериканският Фонд за свободен софтуер създаде вариант на напълно свободното ядро 6.0 — Linux-libre 6.0-gnu, почистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чиято употреба е ограничена от производителя. В новото издание е изключено използването на блобове в драйвера CS35L41 HD-аудио и драйвера с интерфейс UCSI за микроконтролерите STM32G0. Извършена е чистка на dts-файловете за чиповете Qualcomm и MediaTek. Преработено е изключването на блобове в драйвера MediaTek MT76. Обновен е кодът за чистене на блобове в драйверите и подсистемите AMDGPU, Adreno, Tegra VIC, Netronome NFP и Habanalabs Gaudi2. Прекратено е чистенето на драйвера VXGE, премахнат от ядрото.
Източник: opennet.ru
