Linux 7.0

После двух месяцев разработки Линус Торвальдс представил релиз ядра 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 (kernelnewbies.org, lwn.net, OpenNET):
- Дисковая подсистема, ввод/вывод и файловые системы
- Реализована инфраструктура
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, реализованы опцииllseekSEEK_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 (crates.io)», упрощающей написание сложных макросов, удалось сократить размер 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, позволяющим непривилегированным процессам выполнять некоторые привилегированные операции cBPF, например, загружать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 (wikipedia.org), позволяющего хостам в случае перегрузки маркировать 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-гигабитной сети.
- Включено по умолчанию расширение AccECN (Accurate Explicit Congestion Notification), реализующее улучшенный вариант расширения ECN (wikipedia.org), позволяющего хостам в случае перегрузки маркировать IP-пакеты вместо их отбрасывания, что даёт возможность определять возникновение начальной стадии затора в каналах связи без потери пакетов. Исходное расширение ECN имеет ограничение, допускающее выставление только одного сигнала о перегрузке в рамках одного цикла приёма-передачи TCP (RTT,
- Оборудование
- В драйвере 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.
Одновременно латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 7.0 — Linux-libre 7.0-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В выпуске 7.0 проведена чистка от блобов драйвера iwlwifi. Обновлён код чистки в драйверах amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783, Intel catpt. Выполнена чистка имён blob-ов в dts-файлах (devicetree) для ARM-чипов.
>>> Источник: OpenNET
