Дата публикации:Mon, 26 May 2025 11:48:37 +0300
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.15. Среди наиболее заметных изменений: механизм аудита в Landlock, режим закрепления маппинга памяти, подсистема fwctl, драйвер Nova для GPU NVIDIA, реализация хост-системы для гипервизора Hyper-V, поддержка зонированных устройств хранения в XFS, оптимизация сетевой подсистемы, scrub-проверка в Bcachefs, возможность контроля над операциями через io_uring.
В новую версию принято 15945 исправлений от 2154 разработчиков,
размер патча - 59 МБ (изменения затронули 13596 файлов, добавлено 739608 строк кода, удалено 312168 строк). В прошлом выпуске было 12115 исправлений от 1984 разработчиков, размер патча - 39 МБ. Около 41% всех представленных в 6.15 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 5% - с файловыми системами и 4% c внутренними подсистемами ядра.
Основные новшества в ядре 6.15:
- Дисковая подсистема, ввод/вывод и файловые системы
В механизм fanotify добавлена возможность отслеживания событий монтирования и отмонтирования.
В XFS добавлена поддержка зонированных устройств хранения (разделение на зоны групп блоков или секторов, в которые допускается лишь последовательное добавление данных с обновлением целиком всей группы блоков). Добавлен флаг rwf_dontcache для отключения кэширования при записи. Реализована возможность атомарной записи сразу нескольких блоков данных.
В Btrfs реализована возможность указания при монтировании отрицательных уровней сжатия zstd (от -15 до -1, например, "compress=zstd:-5"), обеспечивающих более высокую скорость работы ценой снижения эффективности сжатия. Улучшено кэширование файловых путей (в проведённом тесте выполнение операции "send" ускорилось на 30%). Добавлена поддержка блоков размером 2Кб.
В EXT4 повышена производительность при воспроизведении журнала с очень большим числом отозванных записей (нагрузка, свойственная разделам под ФС Lustre). Реализован линейный поиск записей "dentry" (внутреннее представление элементов каталогов), решающий проблемы с доступом к некоторым файлам в режиме без учёта регистра символов. Налажена работа опции монтирования "errors=remount-ro".
В F2FS реализован ioctl для получения сведений о приоритете операции ввода/вывода для заданного файла. Проведена работа по переходу на использование фолиантов страниц памяти (page folios).
В Bcachefs добавлен режим "scrub", при котором осуществляется проверка корректности чтения всех данных и метаданных из ФС. В случае выявления ошибок запускается процедура восстановления. В Bcachefs также добавлена поддержка работы с ФС, размер блока в которых больше чем размер страницы памяти.
В EROFS добавлена поддержка 48-разрядной адресации блоков.
В подсистеме FUSE реализованы sysctl default_request_timeout и max_request_timeout для задания таймаутов на выполнение запросов, что позволяет отслеживать зависания компонентов FUSE, работающих в пространстве пользователя. Максимальный размер имён файлов в FUSE увеличен до 1024 символов.
В системный вызов statmount() добавлена возможность получения информации о маппинге идентификаторов пользователей примонтированных файловых систем, применяемом для сопоставления файлов определённого пользователя на примонтированном чужом разделе с другим пользователем в текущей системе.
Релизована возможность создания точки монтирования с иным маппингом идентификаторов пользователей, чем у исходного примонтированного раздела.
В API для управления монтированием внесены изменения, упрощающие сборку сложных иерархий файловых систем без раскрытия отдельных частей файловых систем, которые необходимо оставить скрытыми.
В подсистему для работы с блочными устройствами добавлена поддержка аппаратных устройств защиты ключей шифрования.
В файловой системе SMB реализована опция is_network_name_deleted и включён по умолчанию режим
smb_server_kerberos5.
Для ФС OverlayFS добавлена опция монтирования "override_creds", при указании которой для доступа к нижним уровням хранилища будут использоваться учётные данные вызывающего пользователя, а не выполнившего монтирование. Изменение, например, позволяет при монтировании OverlayFS требовать пользователя с полномочиями CAP_SYS_ADMIN, но использовать ФС с учётными данными без данной привилегии.
В exFAT ускорены операции удаления файлов. Вместо отправки запросов "discard" по отдельности на каждый освобождаемый кластер удаляемого файла, драйвер теперь группирует запросы. В проведённом тесте время удаления файла, размером 80 ГБ, сократилось с 286 секунд до 1.6 секунды.
Все псевдо-ФС, а также ФС EXT2, переведены на использование нового API монтирования разделов.
Удалён код для поддержки файловых систем SYSV (SystemV/386, Xenix и Coherent), который с 2023 года помечен как неподдерживаемый (orphaned).
- Необходимая для сборки ядра минимальная версия GCC поднята до 8.1, а Clang - до 15.0.0.
Добавлена подсистема fwctl (Firmware Control), предоставляющая API для безопасного управления прошивками и выполнения обработчиков на стороне прошивок из пространства пользователя. На базе fwctl подготовлены драйверы для устройств CXL (Compute Express Link), Ethernet-адаптеров Mellanox ConnectX (mlx5) и сервисных карт AMD/Pensando.
Расширены возможности механизма pidfd, позволяющего использовать идентификаторы, связанные с конкретными процессами и в отличие от pid повторно не назначаемые. Предоставлена возможность извлечения данных о состоянии завершения процесса, идентифицируемого через pidfd, после того, как родительский процесс получил подтверждение о завершении дочернего процесса (reaped) и его ресурсы были освобождены. В системные вызовы добавлен флаг PIDFD_SELF, при помощи которого процесс может сослаться на самого себя.
Для архитектуры RISC-V реализована поддержка расширений BFloat16, Zaamo (атомарные операции с памятью), Zalrsc (Load-Reserved/Store-conditional) и ZBKB (битовые операции для криптографии).
При трассировке обеспечена возможность сохранения аргументов вызываемых функций и их отображения в логах трассировки.
В систему асинхронного ввода/вывода io_uring добавлена поддержка чтения информации о событиях epoll. Применение io_uring для обработки событий epoll позволяет снизить число переключений контекста и даёт возможность обрабатывать за раз несколько событий epoll.
В подсистеме eBPF улучшена верификация программ с циклами. Добавлены новые инструкции "timed_may_goto", "load-acquire" и "store-release". Предоставлена возможность изменения расширенных атрибутов файлов из BPF-программ.
Добавлена функция try_alloc_pages(), рассчитанная на выделение памяти при высокой вероятности неудачного выполнения операции (при запуске BPF-программ в ограниченных контекстах).
Реализован новый примитив блокировок - rqspinlock (Resilient Queued Spin Lock), во время выполнения выявляющий ситуации, приводящие к взаимным блокировкам. Новый примитив даёт возможность загружать BPF-программы, для которых верификатор не гарантировал корректность работы с блокировками.
Значительно повышена надёжность выделения больших страниц памяти (huge-page).
Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). Предоставлена возможность использования в коде ядра макроса "#[kunit_tests()]" для запуска unit-тестов. Добавлена поддержка архитектуры ARMv7. Реализованы модули dma и hrtimer с Rust-обвязками для DMA (добавлены Линусом в обход мэйнтейнера, который после этого ушёл со своего поста) и высокоточных таймеров. Расширены модули 'list', 'str', 'sync', 'error' и 'alloc'. Добавлена поддержка нового синтаксиса '&raw' (raw_ref_op).
В подсистеме perf реализована возможность профилирования задержек, используя информацию от планировщика задач.
Добавлен параметр командной строки ядра "traceoff_after_boot", отключающий трассировку после того как ядро загрузилось и запущен процесс init. Параметр может использоваться при диагностике проблем, связанных с загрузкой, гарантируя, что накопленные во время загрузки данные трассировки не будут перезаписаны.
Прекращена поддержка 32-разрядных систем x86, имеющих более 8 CPU и 4 ГБ ОЗУ. Подобное оборудование уже давно не выпускается, а требующие такие ресурсы системы переведены на 64-разрядные CPU.
В реализацию POSIX-таймеров внесены изменения, позволяющие инструментарию CRIU (Checkpoint/Restore in Userspace) сохранять и восстанавливать идентификаторы таймеров.
- Добавлена возможность использования Linux в качестве корневого окружения (Dom0. root partition) для гипервизора Hyper-V (Microsoft Hypervisor). Хост-окружение отвечает за управление гипервизором, организацию запуска гостевых систем, выделение ресурсов и обеспечение взаимодействия виртуальных машин с оборудованием. Управление гипервизором Hyper-V в Linux осуществляется через устройство /dev/mshv.
В модуль Landlock, предоставляющий непривилегированным программам средства для ограничения использования объектов ядра Linux (иерархии файлов, сетевые сокеты, ioctl и т.п), добавлен механизм аудита. Аудит позволяет детально оценивать причины блокировок доступа, осуществляемых при использовании Landlock, а также даёт возможность понять когда и какая операция заблокирована, почему выполнена блокировка и какое правило сработало.
Добавлена возможность реализации в LSM-модулях (Linux Security Modules) обработчиков, контролирующих обращения к системе асинхронного ввода/вывода io_uring и позволяющих блокировать использование io_uring для обхода ограничений доступа к системным вызовам. Подобный обработчик реализован в LSM-модуле SELinux.
В SELinux реализована возможность применения политик к любым типам данных, загружаемым ядром, включая образы прошивок, политики безопасности и сертификаты.
Добавлен режим закрепления (seal) некоторых операций маппинга памяти, осуществляемых ядром в адресном пространстве процесса. Закрепление переводит маппинг в режим только для чтения и не позволяет изменить в случае эксплуатации уязвимости. Действие распространяется на маппинг vDSO, vsyscall, vvar, sigpage и uprobes. Режим по умолчанию отключён, так как может нарушить работу некоторых приложений. Для включения добавлена сборочная настройка CONFIG_MSEAL_SYSTEM_MAPPINGS.
- Продолжена работа по избавлению сетевого стека от глобальной блокировки RTNL (rtnl_lock) и её преобразованию в блокировки, привязываемые к отдельным пространствам сетевых имён.
Добавлена начальная возможность получения сетевых пакетов через io_uring c копированием содержимого сразу в память программы в пространстве пользователя без промежуточной буферизации (zero-copy). В проведённых тестах изменение позволило справится с обработкой трафика через 200 гигабитный канал, используя одно ядро CPU.
Реализованы sysctl tcp_rto_max_ms и опция TCP-сокетов TCP_RTO_MAX_MS, через которые можно выставить максимальное время между попытками повторной передачи пакетов.
В BPF добавлена серия callback-вызовов для получения сведений о времени из различных мест сетевого стека, что может использоваться для диагностики проблем с сетевыми задержками.
Добавлены оптимизации производительности сетевых операций:
Оптимизация GRO (Generic Receive Offload), объединяющая несколько мелких пакетов в один большой, теперь задействована при переключении обработки пакета на другой CPU (для балансировки нагрузки) при использовании подсистемы XDP (eXpress Data Path), позволяющей обрабатывать пакеты на уровне сетевого драйвера на стадии до их передачи сетевому стеку. Прирост производительности обработки TCP-потоков от применения оптимизации может достигать двух раз.
В условиях сильной нагрузки производительность функции connect() повышена до двух раз за счёт замены spin-блокировки на механизм синхронизации RCU (Read-Copy-Update) при поиске записей с информацией о сторонах соединения (исходные и целевые IP-адреса и порты). Дополнительно проведена оптимизация хэширования, обеспечившая прирост производительности ещё на 229%.
Ускорена реализация MPTCP (Multipath TCP), расширения протокола TCP для организации доставки пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. MPTCP в режиме с одним потоком ускорен на 29%.
В netfilter при наличии сокета прекращено выполнение операций поиска маршрутов в FIB (Forwarding Information Base). Благодаря данной оптимизации производительность возросла на 20%.
Производительность UDP в условиях флуда (flood) увеличена на 10% за счет исключения лишних операций со структурой sk_tsflags при получении пакетов.
Оборудование
- В состав яда принята начальная реализация драйвера Nova для GPU NVIDIA, оснащённых GSP-прошивками, используемыми начиная с серии NVIDIA GeForce RTX 2000 на базе микроархитектуры Turing. Драйвер написан на языке Rust. На первом этапе добавлен только каркас nova-core, насчитывающий около 400 строк кода и реализующий базовый уровень абстракций над программными интерфейсами прошивок GSP. На следующем этапе в ядро планируют включить DRM-драйвер nova-drm (Direct Rendering Manager) для взаимодействия с GPU из пространства пользователя, а также VFIO-драйвер с менеджером vGPU, позволяющим использовать виртуальные GPU NVIDIA в системах виртуализации.
Продолжена работа над drm-драйвером (Direct Rendering Manager) Xe для GPU на базе архитектуры Intel Xe, которая используется в видеокартах Intel семейства Arc и интегрированной графике, начиная с процессоров Tiger Lake. Добавлена поддержка SVM (Shared Virtual Memory), компонента фреймворка DRM, управляющего разделяемой памятью, совместно используемой в CPU и GPU.
В драйвер i915 добавлены идентификаторы новых GPU.
В драйвере Nouveau переработан GSP RPC и интегрирован интерфейс drm_slave_encoder.
В драйвере AMDGPU реализована поддержка архитектуры DCN36 (Display Core Next). Добавлена возможность задания своих кривых яркости, используемых для коррекции яркости дисплея.
В драйвер adreno добавлена поддержка GPU Qualcomm Adreno 623.
Добавлена поддержка сенсорных панелей Apple Touch Bar.
Добавлена поддержка второй версии расширения eUSB2 (eUSB2V2 - Embedded USB2 Version 2.0), позволяющего снизить напряжение питания (до 1.2 вольт) и повысить производительность USB 2.0. Скорость передачи данных в eUSB2V2 может достигать 4.8 Гбит в секунду, что в 10 раз быстрее обычных 480 Мбит в секунду, типичных для USB 2.0. eUSB2V2 позволит производителям ноутбуков комплектовать свои устройства веб-камерами более высокого разрешения, продолжая при этом использовать для их подключения шину Embedded USB2.
Добавлена поддержка экранных панелей Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie и starry-2082109qfh040022-50e.
Добавлена поддержка звуковых систем Presonus Studio 1824c, Jabra Evolve 65. Добавлена поддержка DSP-модулей AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL и GAIN. Улучшена поддержка звука на ноутбуках ASUS, HP и Lenovo.
Добавлена поддержка ARM-плат, SoC и устройств: Arm Morello,
AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter
ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 плат Toradex на базе i.MX6.
Одновременно латиноамериканский Фонд свободного ПО сформировал
вариант полностью свободного ядра 6.15 - Linux-libre 6.15-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В выпуске 6.15 нейтрализована загрузка блобов в драйверах nova, Qualcomm iris v4l2, Airoha
NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple
Silicon SoC touchscreen, Renesas UFS и aw88166 audio.
Прекращена чистка драйвера Spider 1Gb ethernet, который был удалён из состава ядра. Удалены ссылки на тивоизированные бинарные файлы. Реализована блокировка загрузки блобов из кода на языке Rust.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=63305