Всего два месяца назад, в январе 2024 года, Линус Торвальдс сделал новогодний подарок пользователям Linux и представил ядро 6.7. Сейчас, в марте, выпущен новый релиз, у которого достаточно много нововведений. Например, это драйвер Xe для GPU Intel, драйвер на языке Rust, системные вызовы listmount и statmount и многое другое.
Про объём выполненной работы можно судить по количеству исправлений. Так, в новой версии принято 15 641 исправление от 2 018 разработчиков, размер патча составил 44 Мб. Изменения внесены в 12 212 файлов, добавлено целых 663 864 строки кода. Больше всего изменений связано с драйверами устройств, на втором месте — архитектуры, потом — сетевой стек, файловые системы и внутренние подсистемы ядра.
Оборудование и драйверы
Поскольку больше всего изменений связано с драйверами, то с них и начнём.
В анонсе говорилось о драйвере Xe для GPU на базе архитектуры Intel Xe, которая используется в видеокартах Intel семейства Arc и интегрированной графике, начиная с процессоров Tiger Lake. Его появление важно для операционной системы. Дело в том, что драйвер Xe — главный элемент для обеспечения работы новых чипов. Он создан с использованием новой архитектуры.
В Nouveau появилась новая настройка для работы с функциями прошивки GSP. Это нужно для возможности взаимодействия с GPU NVIDIA на базе микроархитектур Turing и Ampere. В них операции инициализации и управления GPU реализуются специфическим микроконтроллером GSP (GPU System Processor).
Не менее важно обновление AMDGPU, в котором появилась поддержка ACPI WBRF и VPE DPM, изменена обработка скорости канала PCIe. Кроме того, добавлена поддержка специфических для AMD механизмов управления цветом и решена проблема с переходом в спящий режим.
Начинает внедряться поддержка Raspberry Pi 5 — например, добавлена начальная реализация драйвера для GPU Broadcom VideoCore 7.1.
Также появились новые драйверы для камер, которые применяются в SoC Starfive, GalaxyCore GC2145/GC0308, Chips & Media Wave и THine THP7312.
Важная новость для геймеров: добавлена поддержка игровых контроллеров NSO (Nintendo Switch Online) — это новая инкарнация контроллеров от SNES (Super Nintendo), Genesis и N64 (Nintendo 64), адаптированных для Nintendo Switch.
Добавлены 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.
Память и системные сервисы
В планировщике задач появился новый механизм SCHED_DEADLINE server, решающий проблему с недополучением ресурсов CPU обычными задачами в условиях монополизации CPU высокоприоритетными (realtime) задачами.
В Data Access MONitor добавлен механизм автоматической настройки агрессивности потребления памяти на основе заданных квот.
Также добавлена поддержка page folios, что было сделано для анонимной памяти. Это нововведение позволит увеличить производительность за счёт выделения значительных фрагментов памяти во время обращения к невыделенным страницам памяти. К примеру, использование крупных фолиантов позволило на 5% сократить время пересборки ядра.
Одно из наиболее важных нововведений — продолжение проекта по добавлению Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию и не приводит к включению Rust в число обязательных сборочных зависимостей к ядру). Так, в новой версии появились изменения, которые добавляют Rust-обвязку над уровнем абстракции phylib и использующий данную обвязку драйвер ax88796b_rust, обеспечивающий поддержку PHY-интерфейса Ethernet-контроллера Asix AX88772A (100MBit).
Значительно расширена функциональность верификатора BPF-программ.
Не забыли разработчики и про архитектуру RISC-V. Для неё реализована поддержка перехода в ждущий режим с сохранением состояния в ОЗУ. Добавлена и возможность системного вызова riscv_hwprobe() для получения информации о поддерживаемых разрешениях архитектуры набора команд RISC-V.
Дисковая подсистема и файлы
Здесь стоит упомянуть добавление поддержки сжатия субстраниц и улучшение работы в ситуации нехватки памяти для файловой системы EROFS (Extendable Read-Only File System).
В F2FS улучшена поддержка зонированных устройств хранения.
В файловой системе XFS продолжена работа над реализацией возможности применения утилиты fsck для проверки и исправления выявленных проблем в online-режиме, без отмонтирования файловой системы.
В подсистеме device-mapper прекращена поддержка обработчиков MD_LINEAR, MD_MULTIPATH и MD_FAULTY, объявленных устаревшими в 2021 году.
Сеть
Здесь минимальное количество нововведений. Можно упомянуть, например, удаление системы bpfilter, которая задействует BPF для фильтрации пакетов. Bpfilter поставлялся начиная с выпуска 4.18, но так и не был доведён до уровня, пригодного для широкого использования. Так что теперь его решили удалить.
Кроме того, проведена низкоуровневая реорганизация базовых сетевых структур данных, которая выполнена для повышения эффективности кэширования.
Виртуализация и безопасность
Из ядра решено удалить реализацию функции strlcpy(), которая летом была включена в состав Си-библиотеки Glibc 3.38. Это альтернатива функции strncpy(), содержащей защиту от переполнения буфера и обязательно выставляющей замыкающий строку нулевой байт.
В гипервизоре KVM появилась поддержка подсистемы guest_memfd (guest-first memory). Она предоставляет возможности управления памятью, что в свою очередь позволяет реализовать возможности и оптимизации, которые недостижимы при использовании общей подсистемы управления памятью.
В гипервизор KVM для систем на базе архитектуры ARM64 добавлена поддержка 52-разрядных (LPA2) физических адресов. Для систем с архитектурой x86 предоставлена возможность сборки без эмуляции гипервызовов Hyper-V, позволяющая сократить размер ядра.
А ещё добавлен драйвер iaa (IAA Compression Accelerator), который применяется для ускорения операции сжатия и распаковки данных при помощи метода DEFLATE.
В SELinux добавлен SID-идентификатор init, позволяющий выделить запускаемые на начальном этапе загрузки процессы, запущенные до применения политик SELinux.
Как всегда, одновременно с релизом появился и вариант свободного ядра 6.8 — Linux-libre 6.8-gnu, очищенного от элементов прошивок и драйверов. Почищены блобы, проведена ревизия различных драйверов и т. п.
Если вы уже опробовали новый релиз, расскажите, как он вам. Всё хорошо или есть какие-то проблемы?