После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.0. Значительное изменение номера версии произведено из эстетических соображений и является формальным шагом, снимающим дискомфорт из-за накопления большого числа выпусков в серии (Линус пошутил, что причина смены номера ветки скорее в том, что у него заканчиваются пальцы на руках и ногах считать номера версий). Среди наиболее заметных изменений: поддержка асинхронной буферизированной записи в XFS, блочный драйвер ublk, оптимизация планировщика задач, механизм верификации корректности работы ядра, поддержка блочного шифра ARIA.
Основные новшества в ядре 6.0:
- Дисковая подсистема, ввод/вывод и файловые системы
- В файловую систему XFS добавлена поддержка асинхронной буферизированной записи с использованием механизма io_uring. Тесты производительности, проведённые при помощи инструментария fio (1 поток, размер блока 4кб, 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, прикреплённых к uprobe, в состояние сна. В 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” для управления устройствами c DMA, не согласованным с кэшем (non-cache-coherent).
- В подсистему DAMON (Data Access MONitor) добавлены новые возможности, позволяющие не только отслеживать доступ процессов к оперативной памяти из пространства пользователя, но и влиять на управление памятью.
- Виртуализация и безопасность
- Добавлен механизм верификации 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).
- Добавлен механизм c реализацией 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.
- В драйвере amdgpu продолжена работа по обеспечению поддержки платформ AMD RDNA3 (RX 7000) и CDNA (Instinct).
- В драйвере Nouveau переработан код обеспечения вывода на системах с GPU NVIDIA nv50.
- Добавлен новый DRM-драйвер logicvc для экранов LogiCVC.
- В драйвере v3d (для GPU Broadcom Video Core, используемого в Raspberry Pi) реализована поддержка плат 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.
Одновременно латиноамериканский Фонд свободного ПО сформировалвариант полностью свободного ядра 6.0 – Linux-libre 6.0-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключено использование блобов в драйвере CS35L41 HD-audio и драйвере с интерфейсом UCSI для микроконтроллеров STM32G0. Проведена чистка dts-файлов для чипов Qualcomm и MediaTek. Переделано отключение блобов в драйвере MediaTek MT76. Обновлён код чистки блобов в драйверах и подсистемах AMDGPU, Adreno, Tegra VIC, Netronome NFP и Habanalabs Gaudi2.Прекращена чистка драйвера VXGE, удалённого из ядра.