Дата публикации:Mon, 13 Apr 2026 10:38:25 +0300
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 7.0. Среди наиболее заметных изменений: правила применения AI-ассистентов, перевод Rust в основные возможности ядра, повышение производительности подкачки, включение по умолчанию режима PREEMPT_LAZY, поддержка фильтров для операций io_uring, новая ФС Nullfs, инфраструктура fserror, средства мониторинга XFS, поддержка ремапинга в Btrfs, включение по умолчанию версии NFS 4.1, интеграция пост-квантового криптоалгоритма ML-DSA, активация AccECN в сетевой подсистеме, начальная поддержка WiFi 8.
Номер 7.0 присвоен, так как в ветке 6.x накопилось достаточного выпусков для смены первого числа в номере версии (в своё время выпуск 6.0 был сформирован следом за 5.19). Смена нумерации осуществляется из эстетических соображений и является формальным шагом, снимающим дискомфорт из-за накопления большого числа выпусков в серии.
В новую версию принято 15624 исправления от 2477 разработчиков, размер патча - 56 МБ (изменения затронули 18053 файла, добавлено 704060 строк кода, удалено 278132 строки). В прошлом выпуске было 15657 исправлений от 2237 разработчиков, размер патча - 52 МБ. Около 51% всех представленных в 7.0 изменений связаны с драйверами устройств, примерно 11% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 14% связано с сетевым стеком, 5% - с файловыми системами и 3% c внутренними подсистемами ядра.
Основные новшества в ядре 7.0 (1, 2, 3):
- Дисковая подсистема, ввод/вывод и файловые системы Реализована инфраструктура fserror и добавлен API для получения информации об ошибках ввода/вывода и повреждении метаданных при работе с файлами. Предложенная инфраструктура унифицирует в файловых системах передачу сведений об ошибках в пространство пользователя через механизм fsnotify. В XFS добавлены новые возможности для мониторинга за состоянием файловой системы из пространства пользователя. Предложена ioctl-операция XFS_IOC_HEALTH_MONITOR, возвращающая файловый дескриптор, через который можно получать сведения о сбоях, связанных с повреждением метаданных или возникновение ошибок при вводе/вывода, а также отслеживать изменение состояний ФС, таких как отмонтирование и завершение работы. Дополнительно предложен управляемый через systemd фоновый процесс xfs_healer, обрабатывающий события о состоянии ФС из пространства пользователя и при необходимости автоматически запускающий процедуры восстановления. В файловую систему Btrfs добавлена экспериментальная поддержка структуры "дерево ремапинга" (remap tree), которая в будущем может быть задействована в качестве промежуточного слоя при выполнении операций ввода-вывода. Суть добавленной возможности в том, что после перемещения данных на накопителе вместо обновления всех связанных с этими данными структур в дополнительной структуре "remap tree" сохраняются старые и новые адреса данных, после чего при обращении к данным адреса подменяются. Новый подход преподносится как более надёжный и гибкий, а также упрощающий дальнейшее расширение функциональности Btrfs. В Btrfs реализована поддержка прямого ввода/вывода в ситуациях, когда размер блока превышает размер страницы памяти в системе. В состав включена новая файловая система "Nullfs", которую можно использовать в качестве заглушки для корневой ФС. Файловая система Nullfs всегда пустая, не содержит данных и не поддерживает изменения. Назначением Nullfs является использование в качестве начальной ФС для упрощения процесса загрузки системы - поверх Nullfs затем монтируются другие ФС и используется системный вызов pivot_root() для переключения корневой ФС вместо очистки содержимого initramfs и использования связанной с ним корневой ФС. Реализовано обновление информации о времени модификации файлов в неблокирующем режиме. Ранее вызов file_update_time_flags() с флагом IOCB_NOWAIT возвращал ошибку "-EAGAIN", что не позволяло использовать операции прямой записи в неблокирующем режиме. В файловых системах в разряд отдельно включаемых опций переведена поддержка уведомительных блокировок (lease). По умолчанию подобный механизм теперь не активируется из-за проблем с ФС, изначально не рассчитанных на его применение. Например, его не поддерживают ФС 9p и cephfs. В файловой системе EROFS (Extendable Read-Only File System), предназначенной для использования на разделах, доступных в режиме только для чтения, для сжатия по умолчанию задействован алгоритм LZMA. Опционально доступны алгоритмы DEFLATE и Zstandard, которые больше не помечены экспериментальными. Реализовано совместное использование записей в страничном кэше (page-cache) для идентичных файлов в отдельных ФС EROFS. Удалён режим laptop_mode, экономящий энергопотребление за счёт откладывания и объединения операций записи на жёсткий диск с целью продления нахождения диска в спящем режиме и снижения числа пробуждений. Режим потерял актуальность, так как в современных мобильных устройствах жёсткие диски вытеснены твердотельными накопителями. Файловая система F2FS переведена на использование больших фолиантов страниц памяти (large folios). Возрождена работа над драйвером ntfs3, развиваемым компанией Paragon Software. Добавлена поддержка операций с файлами на базе iomap, реализованы опции llseek SEEK_DATA/SEEK_HOLE, добавлен режим delalloc для отложенного выделения блоков. Тем временем, в списке рассылки разработчиков ядра в феврале было одобрено включение в состав одной из будущих версий ядра новой реализации NTFS - ntfsplus, разработанной для замены ntfs3. По умолчанию при сборке включена версия протокола NFS 4.1 (CONFIG_NFS_V4_1). Обеспечена блокировка экспорта через NFS специализированных псевдо-ФС, таких как pidfs и nsfs. В NFSD реализована экспериментальная возможность использования POSIX ACL и добавлена поддержка динамического изменения пула потоков (thread-pool) в зависимости от нагрузки.
- Утверждены официальные правила применения AI-ассистентов и включения в ядро автоматически сгенерированного содержимого. При передаче сгенерированного кода предписано помечать его через указание используемого AI-ассистента через тег "Assisted-by". AI-ассистентам запрещено добавлять тег "Signed-off-by" - человек, передавший патч, считается его автором, несёт ответственность за переданное изменение и ручается за его качество. Разработчикам предписано проводить ручное рецензирование полученного через AI кода и проверять соответствие результата лицензионным требованиям. Поддержка Rust переведена из экспериментальных в основные возможности ядра. Завершена интеграция в ядро механизма "Swap Table", позволяющего повысить производительность подкачки. Ускорение достигается благодаря уменьшению конкуренции за доступ к кэшу подкачки, более эффективного поиска в кэше и снижения фрагментации. Бэкенд на базе Swap Table задействован для кэширования подкачки вместо бэкенда XArray и позволил в тесте redis-benchmark с BGSAVE увеличить число обрабатываемых запросов на 22%. Добавлена поддержка появившегося в Clang 22 расширения Thread Safety Analysis, позволяющего на этапе компиляции выявлять потенциальные состояния гонки и ошибки, вызванные некорректным выставлением блокировок. Расширение предлагает серию атрибутов, таких как GUARDED_BY(...), REQUIRES(...), RELEASE(...) и ACQUIRE(...), позволяющих отмечать охватываемые блокировками функции и разделять области действия блокировок (определять контекст). На этапе компиляции выполняется проверка корректности применения примитивов синхронизации, таких как мьютексы, на основе оценки активности или не активности, связанного с ними контекста. В системный вызов open_tree добавлен флаг OPEN_TREE_NAMESPACE для упрощения настройки изолированных контейнеров и ускорения запуска контейнеров на системах с большим числом точек монтирования. По аналогии с OPEN_TREE_CLONE новый флаг копирует только указанное дерево точек монтирования (mount tree), но вместо локального файлового дескриптора возвращает файловый дескриптор в новом пространстве имён точек монтирования, в котором скопированное дерево монтируется поверх копии реальной корневой ФС. Флаг OPEN_TREE_NAMESPACE востребован для ухода от раздельного выполнения операций unshare(CLONE_NEWNS) и pivot_root(), применяемых при создании контейнеров. В системный вызов rseq добавлен механизм расширения квантов времени (time slice), позволяющий получить дополнительное процессорное время для неразрывного выполнения критической секции. Идея в том, чтобы избежать прерывания планировщиком задач критической секции с выставленной блокировкой, приводящего к передаче управления другим потокам, использующим ресурс, на которых остаётся выставлена блокировка. Расширение кванта времени производится без дополнительных накладных расходов, но и без строгих гарантий, предоставляемых при полноценном регулировании приоритетов. Для архитектур arm64, loongarch, powerpc, riscv, s390 и x86 режим вытеснения задач (preemption) в планировщике по умолчанию изменён с PREEMPT_NONE на PREEMPT_LAZY. Число возможных режимов сокращено с четырёх до двух - PREEMPT_FULL и PREEMPT_LAZY (режимы PREEMPT_NONE и PREEMPT_VOLUNTARY оставлены только для архитектур, не поддерживающих PREEMPT_FULL и PREEMPT_LAZY). Режим PREEMPT_LAZY применяет модель полного вытеснения (PREEMPT_FULL) для realtime-задач (RR/FIFO/DEADLINE), но задерживает вытеснение обычных задач (SCHED_NORMAL) до границы тика. Вносимая задержка приводит к сокращению случаев вытеснения держателей блокировок, что позволяет приблизить производительность к конфигурациям, использующим модель добровольного вытеснения (voluntary preemption), т.е. PREEMPT_LAZY позволяет сохранить возможности полного вытеснения в отношении realtime-задач, но сводит к минимуму проседание производительности для обычных задач. Включение PREEMPT_LAZY привело к серьёзной регрессии, в два раза снижающей производительность PostgreSQL на системах ARM64. Для устранения падения производительности разработчикам PostgreSQL предложено задействовать опцию PR_RSEQ_SLICE_EXTENSION для снижения вероятности вытеснения держателя блокировки.
Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). Благодаря ранее интегрированной библиотеке "syn", упрощающей написание сложных макросов, удалось сократить размер Rust-кода в ядре за счёт упрощения определений имеющихся процедурных макросов. Расширены возможности библиотек kernel, macros и pin-init. В систему асинхронного ввода/вывода io_uring добавлена опция для использования не кольцевых очередей (non-circular submission queue), более эффективно кэшируемых в ситуации, когда выполнение запроса завершается раньше возврата из системного вызова. В подсистеме eBPF в механизме BTF (BPF Type Format), предоставляющем информацию для проверки типов в псевдокоде BPF, для поиска отладочной информации задействован бинарный поиск, что повысило эффективность загрузки BPF-программ. В eBPF добавлена поддержка неявных аргументов при вызове kfunc (функции ядра, доступные для использования в программах BPF), определённых с флагом KF_IMPLICIT_ARGS. Удалён код для поддержки начального RAM-диска (initrd) на базе linuxrc, давно объявленный устаревшим. Оставшиеся реализации initrd планируют удалить в 2027 году. Вместо initrd следует использовать initramfs (разница в том, что initrd размещает начальное загрузочное окружение в дисковом образе, а initramfs - в файловой системе). В блочном устройстве zram, применяемом для сжатого хранения раздела подкачки в памяти, изменена логика работы со сжатыми страницами памяти при опциональном перемещении данных в постоянное хранилище в случае заполнения доступной оперативной памяти. Ранее страницы памяти распаковывались перед записью на физический носитель, а теперь сохраняются как есть в сжатом виде, что снижает нагрузку на CPU и экономит энергию при автономной работе. В утилиту timerlat, предназначенную для измерения задержек при работе планировщика задач, добавлена опция "--bpf-action" для запуска BPF-программ в случае превышения заданного порога. В систему трассировки ftrace добавлена настройка "bitmask-list" для вывода битовых масок в читаемом виде (в форме списка битов, а не шестнадцатеричного числа). В tracefs добавлены возможности для аудита фильтров и триггеров. Добавлена команда "perf sched stats" для сбора и отображения статистики о работе планировщика задач. Добавлены сборочные опции LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE и LOGO_LINUX_CLUT224_FILE для определения файла с изображением логотипа, который будет показываться при загрузке ядра вместо штатного логотипа с пингвином Tux.
- В системе асинхронного ввода/вывода io_uring реализована возможность прикрепления BPF-программ с фильтрами, контролирующими, что могут делать конкретные SQE (Submission Queue Entry) операции (подобие системных вызовов в io_uring). Добавленная возможность является аналогом фильтров системных вызовов. Фильтры можно привязывать к определённым задачам и они наследуются при порождении других процессов после вызова fork(). При наличии активных фильтров, добавляемые поверх фильтры могут лишь прикреплять дополнительные ограничения, но не отключать имеющиеся. Реализованная возможность позволит блокировать методы обхода фильтрации системных вызовов в sandbox-окружениях, основанные на выполнении вместо системных вызовов аналогичных операций, предоставляемых в io_uring. В SELinux добавлена возможность управления доступом к токенам BPF, позволяющим непривилегированным процессам выполнять некоторые привилегированные операции c BPF, например, загружать BPF-программы в ядро и создавать map-структуры. Добавлена поддержка алгоритма формирования цифровых подписей ML-DSA (CRYSTALS-Dilithium), основанного на теории решёток и стойкого к подбору на квантовом компьютере. Предоставлена возможность использования ML-DSA для аутентификации модулей ядра. Удалена возможность использования схем формирования цифровых подписей с алгоритмом SHA-1 для заверения модулей ядра (поддержка загрузки подписанных модулей сохранена). В записи аудита NETFILTER_PKT добавлены поля 'sport' и 'dport' для инспектирования номеров сетевых портов, а не только IP-адресов. Для систем с архитектурой RISC-V реализована поддержка расширений Zicfiss и Zicfilp, предоставляющих аппаратные возможности для применения защиты CFI (Control Flow Integrity), блокирующей нарушения нормального порядка выполнения инструкций (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции. В гипервизоре KVM реализована возможность передачи в гостевые системы информации о поддержке процессором расширения ERAPS (Enhanced Return Address Predictor Security), позволяющего обойтись без некоторых операций сброса состояния CPU при возвращении управления хосту гостевой системой. Кроме того, добавлена поддержка закрепления за гостевыми системами оборудования для отслеживания производительности (PMU, Performance Monitoring Unit), что позволяет повысить точность профилирования по сравнению с использованием эмулируемых PMU. В драйвер для гипервизора Hyper-V добавлена поддержка интерфейса debugfs для просмотра статистики о работе гипервизора.
- Включено по умолчанию расширение AccECN (Accurate Explicit Congestion Notification), реализующее улучшенный вариант расширения ECN, позволяющего хостам в случае перегрузки маркировать IP-пакеты вместо их отбрасывания, что даёт возможность определять возникновение начальной стадии затора в каналах связи без потери пакетов. Исходное расширение ECN имеет ограничение, допускающее выставление только одного сигнала о перегрузке в рамках одного цикла приёма-передачи TCP (RTT, Round-Trip Time, отправка запроса и получение ответа). AccECN снимает данное ограничение и даёт возможность получателю передавать отправителю более одной метки о перегрузке в заголовке TCP-пакета. Алгоритмы управления перегрузкой могут использовать полученную информацию для более точного реагирования на перегрузки и не прибегать к резкому снижению интенсивности отправки пакетов при появлении незначительной перегрузки. В реализацию алгоритма управления сетевыми очередями Cake добавлена возможность обработки нескольких очередей для распределения нагрузки на несколько ядер CPU. Алгоритм CAKE применяется для снижения негативного влияния промежуточной буферизации пакетов на граничном сетевом оборудовании, и нацелен на достижение максимально возможной пропускной способности и минимального уровня задержек даже на медленных каналах связи. В сокеты VSOCK, используемые для взаимодействия с виртуальными машинами, добавлена поддержка сетевых пространств имён (network namespace). Добавлена начальная реализация будущего стандарта WiFi 8 (802.11bn, Ultra High Reliability" WiFi). Добавлены оптимизации, позволившие повысить производительность обработки входящих UDP-пакетов на 12% при проведении стресс-тестирования в 100-гигабитной сети.
- В драйвере AMDGPU реализована поддержка IP-блоков, используемых в новых GPU AMD, таких как SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 и JPEG 5.3. В драйвере Nouveau улучшено управление частотой на системах Tegra 186+. В драйвер i915 добавлена начальная поддержка дисплейного IP-блока Xe3p_LPD, применяемого в процессорах Intel Nova Lake-P. Продолжена работа над drm-драйвером (Direct Rendering Manager) Xe для GPU на базе архитектуры Intel Xe, которая используется в видеокартах Intel семейства Arc и интегрированной графике, начиная с процессоров Tiger Lake. Добавлен режим Multi Queue. Добавлены компоненты, необходимые для диагностики зависаний GPU в Mesa. Добавлена поддержка механизма MERT для управления доступом к памяти GPU. Продолжена интеграция компонентов драйвера Nova для GPU NVIDIA, оснащённых GSP-прошивками, используемыми начиная с серии NVIDIA GeForce RTX 2000 на базе микроархитектуры Turing. Драйвер написан на языке Rust. В новой версии проведена подготовка к реализации поддержки GPU на базе микроархитектуры Turing и внесены различные внутренние изменения. Добавлена поддержка контроллеров и периферийных устройств с многоканальным интерфейсом SPI (Serial Peripheral Interface), позволяющим передавать данные в несколько параллельных потоков. Добавлен драйвер для комбинированных коннекторов Type-C, применяемых на устройствах на чипах Apple Silicon и сочетающих интерфейсы USB3, DP-AltMode и Thunderbolt/USB4. Добавлена поддержка звуковых подсистем чипов Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S и Focusrite Forte. Добавлена поддержка ARM-плат, SoC и устройств: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur, Добавлена поддержка смартфонов и планшетов: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft surface pro 11.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=65194