На этот раз быстрее: спустя всего два месяца выпущен релиз ядра Linux 6.8. Что интересного в новинке?

89ebe127961d05e9d12099fe1a9ba7c7.jpg

Всего два месяца назад, в январе 2024 года, Линус Торвальдс сделал новогодний подарок пользователям Linux и представил ядро 6.7. Сейчас, в марте, выпущен новый релиз, у которого достаточно много нововведений. Например, это драйвер Xe для GPU Intel, драйвер на языке Rust, системные вызовы listmount и statmount и многое другое.

Про объём выполненной работы можно судить по количеству исправлений. Так, в новой версии принято 15 641 исправление от 2 018 разработчиков, размер патча составил 44 Мб. Изменения внесены в 12 212 файлов, добавлено целых 663 864 строки кода. Больше всего изменений связано с драйверами устройств, на втором месте — архитектуры, потом — сетевой стек, файловые системы и внутренние подсистемы ядра.

Оборудование и драйверы

d06ffc065abecabc855095dc42c19aaf.png

Поскольку больше всего изменений связано с драйверами, то с них и начнём.

  • В анонсе говорилось о драйвере 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 году.

Сеть

2eb3a2a1aed27df783109ab412d38630.png

  • Здесь минимальное количество нововведений. Можно упомянуть, например, удаление системы 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, очищенного от элементов прошивок и драйверов. Почищены блобы, проведена ревизия различных драйверов и т. п.

Если вы уже опробовали новый релиз, расскажите, как он вам. Всё хорошо или есть какие-то проблемы?

© Habrahabr.ru