Прошло всего два месяца, и Линус Торвальдс обнародовал, если так можно выразиться, релиз ядра Linux 6.9. В новой версии — 15 680 исправлений от 2 106 разработчиков. Общий размер патча — 54 Мб (изменения затронули 11 825 файлов, добавлено 687 954 строки кода, удалено 225 344 строки). К слову, это лишь немногим больше, чем в прошлом выпуске.
Известно, что 42% всех изменений связаны с драйверами устройств, 17% — с апдейтами для разных архитектур, 13% — изменения сетевого стека и 4% — внутренние подсистемы ядра.
В целом, разработчики добавили много всего нового. При этом произведена чистка от устаревших элементов.
«Железо»
Разработчики продолжают работу по реализации поддержки чипов Intel Lunar Lake (Xe 2). В частности, появились новые идентификаторы для девайсов на базе Intel Arrow Lake и Alder Lake N. Кроме того, появилась теперь и поддержка туннелинга и выделения пропускной способности. Для абсолютно всех платформ включён режим fastboot.
В драйвере AMDGPU проведена подготовка к реализации поддержки GPU AMD RDNA3.5 и RDNA4. Добавлена поддержка ATHUB 4.1, LSDMA 7.0, JPEG DPG, IH 7.0, HDP 7.0, VCN 5.0, SMU 13.0.6, NBIO 7.11, SDMA 6.1, MMHUB 3.3, DCN 3.5.1, NBIF 6.3.1, VPE 6.1.1 и фреймворка RAS ACA. В модуль ядра добавлен параметр freesync_video для включения экспериментальной поддержки оптимизации переключения видеорежимов с использованием технологии адаптивной синхронизации FreeSync.
В драйвере Nouveau код управления экраном переведён на использование функции kmemdup().
Продолжена работа над DRM-драйвером (Direct Rendering Manager) Xe для GPU на базе архитектуры Intel Xe, которая используется в видеокартах Intel семейства Arc и интегрированной графике, начиная с процессоров Tiger Lake.
Добавлен DRM-драйвер для чипов Mediatek MT8188 VDOSYS1.
Связанные с видеоподсистемами настройки ядра перенесены в секцию CONFIG_VIDEO.
Добавлена поддержка ARM64 SoC: Mediatek MT7981B (Filogic 820), MT7988A (Filogic 880), NXP i.MX8DXP, Renesas R8A779G2 (R-Car V4H ES2.0), R8A779H0 (R-Car V4M), TI J722S.
Добавлена поддержка ARM-плат и устройств: Android-телефоны на базе чипа Tegra30, модели Chromebook на базе Mediatek MT8186, NAS, планшеты и игровые консоли на базе Rockchips RK35xx, платы White Hawk на базе SoC Renesas, платы на базе Qualcomm SM8550 (Snapdragon 8 Gen 2), Apalis Evaluation Board, Sielaff i.MX6 Solo Board, Samsung Galaxy Tab 4 10.1 LTE.
Проведён рефакторинг кода звуковой подсистемы ALSA. Добавлена поддержка звуковых систем Microchip SAM9x7, NXP i.MX95 и Qualcomm WCD939x. В драйвер SoundWire добавлена поддержка ASoC со звуковыми сопроцессорами AMD ACP 6.3, а для систем Intel реализован режим DSPless. Добавлена поддержка дополнительных звуковых кодеков Cirrus HD. В драйвере virtio улучшено управление звуковыми устройствами.
Файловая система
Во FUSE, подсистеме, которая применяется для реализации ФС в пространстве пользователя, появился режим «passthrough». Он позволяет на уровне ядра получать данные файлов, не используя процесс, который работает в пространстве пользователя. Соответственно, увеличивается производительность.
Интересно, что в категории устаревших теперь находится драйвер, реализующий файловую систему Ext2. В качестве причины упоминается поддержка в драйвере только 32-разрядных счётчиков времени в inode, которые переполнятся 19 января 2038 года. Вместо драйвера этой ФС разработчики предлагают применять ext4, поскольку он поддерживает работу с ext2 и полностью совместим с ней.
Решено удалить драйвер NTDS, поскольку теперь есть современная альтернатива — NTFS3. Держать оба драйвера нецелесообразно, тем более в свете того, что старый драйвер не обновлялся много лет. Работать он может лишь в режиме чтения.
В файловые системы zonefs и hugetlbfs добавлена поддержка маппинга идентификаторов пользователей примонтированных файловых систем. Он применяется для сопоставления файлов конкретного пользователя на примонтированном чужом разделе с другим пользователем в данной системе.
В NFSv4 для администраторов предоставлена возможность очистки состояний открытия и блокировки файлов.
Для файловой системы Ext4 отмечается только исправление ошибок и обновление kunit‑тестов.
В Btrfs продолжен перевод функций на использование фолиантов страниц памяти (page folios).
В файловой системе XFS продолжена работа над реализацией возможности применения утилиты fsck для проверки и исправления выявленных проблем в online-режиме, без отмонтирования файловой системы.
В системный вызов pwritev2() добавлен флаг RWF_NOAPPEND, позволяющий указать смещение для записи, даже если файл был открыт в режиме только добавления данных в конец файла.
Добавлены новые ioctl-команды: FS_IOC_GETUUID — возвращает UUID-идентификатор указанной файловой системы, FS_IOC_GETFSSYSFSPATH — определяет местоположение в /sys/fs заданной примонтированной ФС.
Файловые системы efs, qnx4 и coda переведены на использование нового API монтирования разделов.
Системные сервисы
Здесь немало нового. Так, например, добавлена поддержка механизма Intel FRED (Flexible Return and Event Delivery). Он в первую очередь предназначен для повышения эффективности и надёжности доставки данных о низкоуровневых событиях. Сейчас используется IDT (Interrupt Descriptor Table), но новинка более эффективна.
Кроме того, появилась возможность оптимизации доступа к данным отдельных ядер CPU посредством использования в коде ядра адресных пространств (Named Address Spaces), реализованных в GCC в форме расширения GNU C.
В функцию pidfd_open() добавлен флаг PIDFD_THREAD, позволяющий создавать pidfd для отдельных потоков, а не только использовать pidfd в контексте лидера группы потоков.
А вот в подсистеме BPF появился механизм BPF-токенов, который даёт возможность избирательно делегировать сервисам и ПО права доступа к привилегированным BPF-операциям.
Также в BPF добавили новый тип разделяемой памяти bpf_arena. Он определяет область, которая доступна для совместного использования программами BPF и процессами в пространстве пользователя.
В подсистему io_uring добавлена возможность усечения файлов (ftruncate_file).
Добавлен новый тип рабочих очередей WQ_BH (workqueue Bottom Halves) для асинхронного выполнения кода в контексте программных прерываний, нацеленный на использование вместо устаревших tasklet-ов.
Не забыли разработчики и о реализации поддержки непрерывных записей PTE (Page Table Entry), позволяющих повысить производительность за счёт повышения эффективности использования TLB (Translation Lookaside Buffer).
Теперь есть патчи, которые повышают производительность подсистемы управления памятью за счёт сокращения возникновения конкурирующих блокировок в vmalloc().
Для китайской процессорной архитектуры LoongArch реализован механизм горячего наложения патчей на ядро (live patching). Он даёт возможность применять исправления к ядру без перезагрузки.
Конечно, впереди планеты всей и RISC-V-подсистемы — для них теперь реализована поддержка системного вызова membarrier(), обеспечивающего установку барьеров на память для работающих в системе потоков.
Виртуализация и безопасность
Разработчики добавили защиту от уязвимости RFDS (Register File Data Sampling) в процессорах Intel Atom, позволяющую извлечь остаточную информацию из регистровых файлов (RF, Register File) процессора.
Также добавлена поддержка защиты гостевых систем при помощи расширения AMD SEV‑SNP (Secure Nested Paging). Оно обеспечивает безопасную работу с вложенными таблицами страниц памяти и защищает от атак «undeSErVed» и «SEVerity» на процессоры AMD EPYC.
Модернизированы для оптимальной совместимости с 32-разрядными окружениями системные вызовы lsm_list_modules(), lsm_get_self_attr() и lsm_set_self_attr().
Также осуществлена попытка возобновления использования механизма UBSAN (Undefined Behavior Sanitizer). Суть проблемы в том, что компиляторы по-разному обрабатывают целочисленные переполнения знаковых и беззнаковых типов.
Сеть
Здесь тоже всё хорошо. Например, снижена частота появления конкурирующих блокировок («lock contention», попытка получить блокировку, удерживаемую другим потоком). Сокращено использование блокировок RTNL.
Добавлена возможность включения поддержки активного полинга сокетов (busy polling) в контексте отдельных вызовов epoll. Размер пула и параметры бюджета могут выставляться отдельно от системных параметров по умолчанию.
Реализована структура net_hotdata для повышения эффективности кэширования наиболее часто используемых переменных сетевой конфигурации.
В MPTCP добавлена поддержка установки для сокетов опции TCP_NOTSENT_LOWAT, позволяющей ограничить размер буфера отправки. В API для сокетов MCTP добавлена поддержка идентификаторов сети («network ID»), дающих возможность использовать на одном хосте несколько непересекающихся сетей MCTP.
В IPSec добавлена поддержка перенаправления ICMP‑сообщений с информацией об ошибках (RFC 4301).
Ускорен процесс сканирования маршрутов с истёкшим временем жизни.
Ускорена работа XDP благодаря более жёсткому избеганию выделения больших блоков памяти.
Добавлена возможность прикрепления метаданных к сообщениям netconsole.
Как всегда, с выходом нового ядра появился и его свободный вариант. Он очищен от элементов прошивок и драйверов, в которых есть несвободные компоненты или участки кода, область применения которых ограничена вендором. Так, в новой версии обновлён код чистки блобов в драйверах amdgpu, ath12k, adreno, btusb и r8169. Проведена чистка нового драйвера ptp_fc3. Проведена чистка имён блобов в dts‑файлах (devicetree) для архитектуры Aarch64 и т. п.