След като две месеца разработка, Линус Торвалдс представи релиза на ядро Linux 6.3. Сред най-забележителните промени: почистване на остарели ARM платформи и графични драйвери, продължаване на интеграцията на поддръжка на езика Rust, утилита hwnoise, поддръжка на дървовидни структури red-black в BPF, режим BIG TCP за IPv4, вграден тест за производителност Dhrystone, възможност за забрана на изпълнение в memfd, поддръжка за създаване на HID драйвери, използващи BPF, в Btrfs приети изменения за намаляване на фрагментацията на групи от блокове.
В новата версия са приети 15637 корекции от 2055 разработчици; размерът на пача е 76 MB (промените обхванаха 14296 файла, добавени 1023183 реда код, премахнати 883103 реда). За сравнение, в предишната версия бяха предложени 16843 корекции от 2178 разработчици; размерът на пача е 62 MB. Около 39% от всички представени в ядро 6.3 промени са свързани с драйвери на устройства, приблизително 15% от промените са свързани с обновяване на код, специфичен за хардуерни архитектури, 10% са свързани с мрежовия стек, 5% — с файловите системи и 3% — с вътрешните подсистеми на ядрото.
Основни нововъведения в ядро 6.3:
- Памет и системни услуги
- Проведено е значително почистване на кода, свързано с остарели и неизползвани ARM платформи, което е позволило да се намали размерът на изходните текстове на ядрото с 150 хиляди реда. Премахнати са над 40 стари ARM платформи.
- Реализирана е възможност за създаване на драйвери за устройства с интерфейс HID (Human Interface Device), реализирани под формата на BPF програми.
- Продължава пренасянето от клона Rust-for-Linux на допълнителна функционалност, свързана с използването на езика Rust като втори език за разработка на драйвери и модули на ядрото. Поддръжката на Rust не е активна по подразбиране и не води до включването на Rust в задължителните зависимости за компилиране на ядрото. Предложената в предишни версии функционалност е разширена с поддръжка на типове Arc (реализация на указатели с брой на референции), ScopeGuard (извършва почистване при излизане от обхвастност) и ForeignOwnable (осигурява преместване на указатели между код на C и Rust). От пакета ‘alloc’ е премахнат модулът ‘borrow’ (тип ‘Cow’ и типаж ‘ToOwned’). Отбелязва се, че състоянието на поддръжката на Rust в ядрото вече е близо до началото на приемането на първите модули, написани на Rust.
- В User-mode Linux (стартиране на ядрото като потребителски процес) на системи x86-64 е реализирана поддръжка на код, написан на езика Rust. Добавена е поддръжка за компилация на User-mode Linux с помощта на clang с включване на оптимизации по време на свързването (LTO).
- Добавена е утилита hwnoise за проследяване на закъсненията, причинени от особеностите на хардуера. Определят се отклонения на времето за изпълнение на операциите (jitter) при деактивиране на обработката на прекъсвания, надвишаващи една микросекунда за 10 минути изчисления.
- Добавен е модул на ядрото с реализация на теста за производителност Dhrystone, който може да се използва за оценка на производителността на CPU в конфигурации без компоненти на потребителското пространство (например, в етап на портинг за нови SoC, при които е реализирано само зареждането на ядрото).
- Добавен е параметър на командния ред на ядрото "cgroup.memory=nobpf", който деактивира отчитането на потреблението на памет за BPF програми, което може да бъде полезно за системи с изолирани контейнери.
- За BPF програми е предложена реализация на структура от данни red-black tree, в която се използват kfunc + kptr (bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first) вместо добавяне на нов тип маппинг.
- В механизма за повторяеми последователности (rseq, restartable sequences) е добавена възможност за предаване на идентификатори на паралелни изпълнения (memory-map concurrency ID) на процесите, идентифицирани с номер на CPU. Rseq предоставя средства за бързо атомарно изпълнение на операции, които, в случай на прекъсване от друг поток, се отменят и се предприема повторна опит за изпълнение.
- На ARM процесори е осигурена поддръжка на инструкции SME 2 (Scalable Matrix Extension).
- За архитектурите s390x и RISC-V RV64 е реализирана поддръжка на механизма "BPF trampoline", който минимизира разходите за предаване на повиквания между ядрото и BPF програмите.
- На системи с процесори, базирани на RISC-V архитектура, се реализира използването на инструкции "ZBB" за ускорение на операции с низове.
- За системи, базирани на архитектурата на набор от команди LoongArch (използвана в процесорите Loongson 3 5000 и реализираща нов RISC ISA, подобен на MIPS и RISC-V), е реализирана поддръжка на рандомизация на адресното пространство на ядрото (KASLR), промяна на разположението на ядрото в паметта (relocation), хардуерни точки на спиране и механизъм kprobe.
- В механизма на DAMOS (схеми на основата на наблюдение на достъпа до данни) е реализирана поддръжка на филтри за изключване на определени области от паметта от обработка, в зависимост от честотата на достъпа до паметта.
- В минималната стандартна C-библиотека Nolibc е добавена поддръжка за архитектура s390 и инструкциите Arm Thumb1 (в допълнение към поддръжката на ARM, AArch64, i386, x86_64, RISC-V и MIPS).
- Оптимизирана е objtool за ускоряване на компилацията на ядро и намаляване на пиковото потребление на паметта при компилация (при компилация на ядрото в режим „allyesconfig“ вече не възникват проблеми с принудителното прекратяване на процесите на системи с 32 GB RAM).
- Поддръжката на компилация на ядрото с компилатора Intel ICC е прекратена, тъй като той дълго време беше в неработещо състояние и никой не прояви желание да го поправи.
- Дискова подсистема, вход/изход и файлови системи
- В tmpfs е въведена поддръжка за мапинг на идентификаторите на потребителите на монтирани файлови системи, използвани за съпоставяне на файлове на конкретен потребител в монтиран чужд дял с друг потребител в текущата система.
- В Btrfs за намаляване на фрагментацията на групи от блокове е осигурено разделяне на екстентите по размер при разпределяне на блокове, т.е. всяка група блокове сега е ограничена до малки (до 128KB), средни (до 8MB) и големи екстенти. Извършен е рефакторинг на имплементацията на raid56. Кодът за проверка на контролни суми е преработен. Направени са оптимизации на производителността, които позволяват до 10 пъти ускорение на операцията send благодарение на кеширане на utime за директории и изпълнение на команди само при необходимост. Изпълнението на операции fiemap е ускорено 3 пъти за сметка на пропускане на проверки на обратни връзки за споделени данни (снапшоти). Операциите с метаданни са ускорени с 10% благодарение на оптимизацията на търсенето на ключове в b-tree структури.
- Повишена е производителността на файловата система ext4 благодарение на възможността за едновременно изпълнение на операции с директен вход/изход от множество процеси в предварително определени блокове, използвайки споделени заключвания на inode вместо ексклузивни заключвания.
- В f2fs е направена работа по подобряване на четимостта на кода. Решени са важни проблеми, свързани с атомарното записване и новия кеш на екстентите.
- В файловата система EROFS (Разширена само за четене файлова система), предназначена за използване в дялове, достъпни в режим само за четене, е реализирана възможността за свързване на CPU операции за разопаковане на компресирано съдържание на файлове с цел намаляване на закъснението при достъпа до данните.
- В планировщика на вход/изход BFQ е добавена поддръжка на напреднали дискови устройства с въртящи се дискове, например, такива, в които се използват няколко независимо управлявани задвижвания на главите (Multi Actuator).
- В реализирания клиент и сървър NFS е добавена поддръжка на криптиране на данни с помощта на алгоритъм AES-SHA2.
- В подсистемата FUSE (Файлови системи в пространството на потребителя) е добавена поддръжка на механизма за разширяване на заявки, който позволява помещаването на допълнителна информация в заявката. На базата на тази възможност е реализирано добавянето на идентификатори на групи към FS заявката, необходими за отчет на правата на достъп при създаване на обекти в FS (create, mkdir, symlink, mknod).
- Виртуализация и безопасност
- В хипервизора KVM за системи x86 е добавена поддръжка на разширени хипервиклици Hyper-V и е осигурен техният пренос в обработчика, работещ в хост среда в пространството на потребителя. Тази промяна е позволила реализирането на поддръжка на вложен старт на хипервизора Hyper-V.
- В KVM е опростено ограничението на достъпа на гост системата до събитията PMU (Performance Monitor Unit), свързани с измерване на производителността.
- В механизма memfd, позволяващ идентификация на област от паметта чрез предаван файлов дескриптор между процеси, е добавена възможността за създаване на области, в които е забранено изпълнението на код (non-executable memfd) и неизпълнимите права не могат да бъдат зададени в бъдеще.
- Добавена е нова prctl-операция PR_SET_MDWE, блокираща опити за включване на права за достъп до паметта, разрешаващи едновременно запис и изпълнение.
- Добавена и включена по подразбиране защита от атаки от клас Spectre, реализирана на базата на предложеното в процесорите AMD Zen 4 автоматично режим IBRS (Разширена ограничена спекулативна извикване на незабавна клон), позволяваща адаптивно разрешаване и забраняване на спекулативно изпълнение на инструкции по време на обработка на прекъсвания, системни повиквания и превключвания на контекст. Предложената защита води до по-малки разходи в сравнение с защитата Retpoline.
- Отстранена уязвимост, която позволява заобикаляне на защитата от Spectre v2 при използването на технологията за паралелна многопоточност (SMT или Hyper-Threading), предизвикана от деактивирането на механизма STIBP (Single Thread Indirect Branch Predictors) при избора на режим на защита IBRS.
- За системи, основани на архитектура ARM64, е добавена нова цел за компилация „virtconfig“, при избора на която се активира само минималният набор от компоненти на ядрото, необходими за стартиране в системи за виртуализация.
- За архитектурата m68k е добавена поддръжка на филтриране на системни повици с помощта на механизма seccomp.
- Добавена е поддръжка на вградените в процесорите AMD Ryzen устройства CRB TPM2 (Command Response Buffer), базирани на технологията Microsoft Pluton.
- Мрежовата подсистема
- Добавен е netlink интерфейс за конфигуриране на подравнище за предотвратяване на сблъсъци PLCA (Physical Layer Collision Avoidance), определен в спецификацията IEEE 802.3cg-2019 и използван в Ethernet мрежи 802.3cg (10Base-T1S), оптимизирани за свързване на устройства с интернет на нещата и индустриални системи. Използването на PLCA позволява увеличаване на производителността в Ethernet мрежи с споделена среда.
- Поддръжката на API „wireless extensions“ за управление на безжични интерфейси WiFi 7 (802.11be) е прекратена, тъй като този API не покрива всички необходими настройки. При опит за използване на API „wireless extensions“, който все още се поддържа като емулационен слой, повечето актуални устройства сега ще показват предупреждение.
- Подготовена е подробна документация по API netlink (за разработчици на ядра и разработчици на приложения в потребителското пространство). Реализирана е утилита ynl-gen-c за генериране на C код на базата на YAML спецификации на протокола Netlink.
- В мрежовите сокети е добавена поддръжка на опцията IP_LOCAL_PORT_RANGE за опростяване на настройването на изходящи връзки чрез транслятори на адреси без използване на SNAT. При използването на един IP адреси на няколко хоста, IP_LOCAL_PORT_RANGE позволява на всеки хост да използва своя собствен диапазон от изходящи мрежови портове, а на шлюза да препраща пакети на базата на номера на портовете.
- За MPTCP (MultiPath TCP) е реализирана възможността за обработка на смесени потоци, в които се използват протоколите IPv4 и IPv6. MPTCP представлява разширение на TCP протокола за организиране на TCP свързване с доставяне на пакети едновременно по няколко маршрута през различни мрежови интерфейси, свързани с различни IP адреси.
- За IPv4 е реализирана възможността за използване на разширението BIG TCP, което позволява да се увеличи максималният размер на TCP пакета до 4ГБ за оптимизиране на работата на високоскоростните вътрешни мрежи на дата центровете. Такова увеличаване на размера на пакета при 16-битовото поле в заглавката се постига чрез реализация на "jumbo" пакети, чийто размер в IP заглавието е зададен на 0, а действителният размер се предава в отделно 32-битово поле в прикрепено заглавие.
- Добавен е новият параметър sysctl default_rps_mask, чрез който може да се зададе конфигурацията RPS (Receive Packet Steering) по подразбиране, отговаряща за разпределението на обработката на входящия трафик между ядрата на CPU на нивото на обработчиците на прекъсвания.
- Подкрепата за дисциплините за обработка на опашките за ограничаване на трафика CBQ (class-based queuing), ATM (ATM virtual circuits), dsmark (differentiated service marker), tcindex (traffic-control index) и RSVP (resource reservation protocol) е прекратена. Тези дисциплини от дълго време са в забрава и не се намериха желаещи да продължат тяхната поддръжка.
- Оборудване
- Всички графични драйвери на базата на DRI1 са премахнати: i810 (стари интегрирани видеокарти Intel 8xx), mga (Matrox GPU), r128 (ATI Rage 128 GPU, включително картите Rage Fury, XPERT 99 и XPERT 128), savage (S3 Savage GPU), sis (Crusty SiS GPU), tdfx (3dfx Voodoo) и via (VIA IGP), които бяха обявени за остарели през 2016 година и не се поддържат в Mesa от 2012 година.
- Остарелите драйвери за фреймбуфера (fbdev) omap1, s3c2410, tmiofb и w100fb са премахнати.
- Добавен е DRM драйвер за интегрираните в CPU Intel Meteor Lake (14-то поколение) блокове VPU (Versatile Processing Unit), предназначени за ускоряване на операции, свързани с компютърно зрение и машинно обучение. Драйверът е реализиран с използване на подсистемата "accel", насочена към осигуряване на поддръжка за ускорители на изчисления, които могат да се предоставят както под формата на отделни ASIC, така и виде IP блокове в SoC и GPU.
- В драйвера i915 (Intel) е разширена поддръжката за дискретни видеокарти Intel Arc (DG2/Alchemist), осигурена е предварителна поддръжка за GPU Meteor Lake, включена е поддръжката на GPU Intel Xe HP 4tile.
- В драйвера amdgpu е добавена поддръжка на технологията AdaptiveSync и възможност за използване на режим за защита на данните, показвани на екрана (Secure Display) с множество дисплеи. Актуализирана е поддръжката на DCN 3.2 (Display Core Next), SR-IOV RAS, VCN RAS, SMU 13.x и DP 2.1.
- В драйвера msm (GPU Qualcomm Adreno) е добавена поддръжка на платформите SM8350, SM8450 SM8550, SDM845 и SC8280XP.
- В драйвера Nouveau е прекратена поддръжката на стари извиквания ioctl.
- В драйвера etnaviv е добавена експериментална поддръжка на NPU VerSilicon (VeriSilicon Neural Network Processor).
- Реализиран е драйвер pata_parport за IDE устройства, свързващи се през паралелен порт. Добавеният драйвер позволи премахването на стария драйвер PARIDE от ядрото и модернизиране на ATA подсистемата. Ограничението на новия драйвер е невъзможността за едновременно свързване на принтер и диск през паралелен порт.
- Добавен е драйвер ath12k за безжични карти на чипове Qualcomm с поддръжка на Wi-Fi 7. Добавена е поддръжка на безжични карти на чипове RealTek RTL8188EU.
- Добавена е поддръжка на 46 платформи с процесори, базирани на архитектура ARM64, сред които Samsung Galaxy Tab A (2015), Samsung Galaxy S5, BananaPi R3, Debix Model A, EmbedFire LubanCat 1/2, Facebook Greatlakes, Orange Pi R1 Plus, Tesla FSD, а също и устройства на базата на SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 и SDM632, Rockchips RK3128 TV box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 и RK3328, TI K3 (AM642/AM654/AM68/AM69).
Междувременно Латиноамериканският фонд за свободен софтуер създаде вариант на напълно свободно ядро 6.3 — Linux-libre 6.3-gnu, изчистено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чиято употреба е ограничена от производителя. В версия 6.3 е проведена чистка на блобове в новите драйвери ath12k, aw88395 и peb2466, а също и в новите файлове devicetree за QCOM устройства, базирани на архитектура AArch64. Кодът за чистка на блобове в драйверите и подсистемите amdgpu, xhci-rcar, qcom-q6v5-pas, sp8870, av7110 е актуализиран, както и в драйверите за DVB карти с софтуерно декодиране и в предварително компилираните BPF файлове. Чистенето в драйверите mga, r128, tm6000, cpia2 и r8188eu е прекратено, тъй като те са били изтрити от ядрото. Подобрена е очистката на блобовете за драйвера i915.
Източник: opennet.ru
