Прошло всего два месяца, и Линус Торвальдс обнародовал, если так можно выразиться, релиз ядра 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 и т. п.

Комментарии (2)


  1. Gordon01
    17.05.2024 11:21

    Linus: don't break userspace!!!!!111

    Also Linus:

    • В системный вызов pwritev2() добавлен флаг RWF_NOAPPEND, позволяющий указать смещение для записи, даже если файл был открыт в режиме только добавления данных в конец файла.

    • Добавлены новые ioctl-команды: FS_IOC_GETUUID — возвращает UUID-идентификатор указанной файловой системы, FS_IOC_GETFSSYSFSPATH — определяет местоположение в /sys/fs заданной примонтированной ФС.


    1. strvv
      17.05.2024 11:21

      в результате возможны на старом ПО, без учёта возможностей этого вызова новые эксплойты, когда указывается смещение и вуаля, затирается "неправильный участок".