28.11.2021

Релиз ядра Linux 5.12

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.12. Среди наиболее заметных изменений: поддержка зонированных блочных устройств в Btrfs, возможность маппинга идентификаторов пользователей для ФС, чистка устаревших ARM-архитектур, режим «нетерпеливой» записи в NFS, механизм LOOKUP_CACHED для определения файловых путей из кэша, поддержка атомарных инструкций в BPF, отладочная система KFENCE для выявления ошибок при работе с памятью, работающий в отдельном потоке ядра режим NAPI poll-инга в сетевом стеке, гипервизор ACRN, возможность изменения на лету preempt-модели в планировщике задач и поддержка LTO-оптимизаций при сборке в Clang.

В новую версию принято 14170 (в прошлом выпуске 15480) исправлений от 1946 (1991) разработчиков,
размер патча — 38 Мб (изменения затронули 12102 (12090) файлов, добавлено 538599 (868025) строк кода, удалено 333377 (261456) строк). Около 43% всех представленных в 5.12
изменений связаны с драйверами устройств, примерно 17% изменений имеют
отношение к обновлению кода, специфичного для аппаратных архитектур, 12%
связано с сетевым стеком, 5% — с файловыми системами и 4% c внутренними
подсистемами ядра.

Основные новшества:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Реализована возможность маппинга идентификаторов пользователей для смонтированных файловых систем (можно сопоставить файлы одного пользователя на примонтированном чужом разделе с другим пользователем в текущей системе). Маппинг поддерживается для ФС FAT, ext4 и XFS. Предложенная функциональность позволяет упростить совместное использование файлов разными пользователями и на разных компьютерах, в том числе маппинг будет применяться в механизме переносимых домашних каталогов systemd-homed, давая возможность пользователям перемещать свои домашние каталоги на внешние носители и использовать их на разных компьютерах, раскладка идентификаторов пользователей на которых не совпадает. Другим полезным применением является организация предоставления совместного доступа к файлам с внешнего хоста, без фактического изменения данных о владельцах файлов в ФС.
    • В ядро приняты патчи LOOKUP_CACHED, позволяющие из пространства пользователя выполнять операции определения файлового пути без блокировки, только на основе имеющихся в кэше данных. Режим LOOKUP_CACHED активируется в вызове openat2() через передачу флага RESOLVE_CACHED, при котором данные отдаются только из кэша, а если определение пути требует обращения к накопителю, возвращается ошибка EAGAIN.
    • В файловой системе Btrfs добавлена начальная поддержка зонированных блочных устройств (устройства на жёстких магнитных дисках или NVMe SSD, пространство для хранения в которых разбито на зоны, составляющие группы блоков или секторов, в которые допускается лишь последовательное добавление данных с обновлением целиком всей группы блоков). В режиме только для чтения реализована поддержка блоков с метаданными и данными, размером меньше страницы (subpage).
    • В файловой системе F2FS добавлена возможность выбора алгоритма и уровня сжатия. Добавлена поддержка высокого уровня сжатия для алгоритма LZ4. Реализована опция монтирования checkpoint_merge.
    • Реализована новая ioctl-команда FS_IOC_READ_VERITY_METADATA для чтения метаданных из файлов, защищённых при помощи fs-verity.
    • В клиенте NFS реализован режим «нетерпеливой» записи (writes=eager), при включении которого операции записи в файл сразу передаются на сервер, минуя страничный кэш. Указанный режим позволяет сократить потребление памяти, обеспечивает мгновенное получение информации о завершении свободного места в ФС и в некоторых ситуациях даёт возможность добиться повышения производительности.
    • В CIFS (SMB) добавлены новые опции монтирования: acregmax для управления кэшированием файлов и acdirmax для управления кэшированием метаданных каталогов.
    • В XFS включён режим многопоточной проверки квот, ускорено выполнение fsync, проведена подготовка кода growfs для реализации функции сокращения размера ФС.
  • Память и системные сервисы
    • Добавлена подсистема DTMP (Dynamic Thermal Power Management), позволяющая динамически регулировать энергопотребление разных устройств на основе выставленных общих ограничений температуры.
    • Реализована возможность сборки ядра компилятором Clang с включением оптимизаций на этапе связывания (LTO, Link Time Optimization). LTO-оптимизации отличаются учётом состояния всех файлов, участвующих в процессе сборки, в то время, как традиционные режимы оптимизации оптимизируют каждый файл по отдельности и не учитывают условия вызова функций, определённых в других файлах. Например, при LTO для функций из других файлов возможно inlinе-развёртывание, в исполняемый файл не включается неиспользуемый код, осуществляется проверка типов и общая оптимизация на уровне проекта в целом. Поддержка LTO пока ограничена архитектурами x86 и ARM64.
    • Предоставлена возможность выбора режимов вытеснения (PREEMPT) в планировщике задач на этапе загрузки (preempt=none/voluntary/full) или во время работы через debugfs (/debug/sched_debug), в случае указания при сборке ядра настройки PREEMPT_DYNAMIC. Ранее режим вытеснения мог задаваться только на уровне параметров сборки. Изменение позволяет дистрибутивам поставлять ядра с включённым режимом PREEMPT, обеспечивающим минимальные задержки для рабочих столов ценой незначительного уменьшения пропускной способности, и при необходимости откатываться на режимы PREEMPT_VOLUNTARY (промежуточный режим для рабочих столов) или PREEMPT_NONE (обеспечивает максимальную пропускную способность для серверов).
    • В подсистему BPF добавлена поддержка атомарных операций BPF_ADD, BPF_AND, BPF_OR, BPF_XOR, BPF_XCHG и BPF_CMPXCHG.
    • BPF-программам предоставлена возможность доступа к данным в стеке при помощи указателей с переменным смещением. Например, если раньше для доступа к массиву в стеке можно было использовать только постоянный индекс элемента, то теперь можно использовать меняющийся. Контроль за доступом только в рамках имеющихся границ осуществляется верификатором BPF. Возможность доступна только привилегированным программам из-за опасения эксплуатации уязвимостей, связанных со спекулятивным выполнением кода.
    • Добавлена возможность прикрепления BPF-программ к «голым» точкам трассировки (bare tracepoints), не связанным с видимыми в пространстве пользователя событиями трассировки (для подобных точек трассировки не гарантируется сохранение ABI).
    • Удалена поддержка системы профилирования «oprofile», которая не получила должного распространения и вытеснена более современным механизмом perf.
    • В интерфейсе асинхронного ввода/вывода io_uring обеспечена интеграция с cgroup, контролирующими использование памяти.
    • Для архитектуры RISC-V реализована поддержка систем NUMA, а также механизмов kprobes и uprobes.
    • Добавлена возможность использования системного вызова kcmp() независимо от функциональности слепков состояния процессов (checkpoint/restore).
    • Удалены макросы EXPORT_UNUSED_SYMBOL() и EXPORT_SYMBOL_GPL_FUTURE(), которые уже много лет не используются на практике.
  • Виртуализация и безопасность
    • Добавлен механизм защиты KFence (Kernel Electric Fence), который отлавливает ошибки при работе с памятью, такие как выход за границу буфера и обращение после освобождения памяти. В отличие от отладочного механизма KASAN подсистема KFence отличается высокой скоростью работы и низкими накладными расходами, что позволяет отлавливать ошибки работы с памятью, которые проявляются только на рабочих системах или при длительной работе.
    • Добавлена поддержка гипервизора ACRN, написанного с оглядкой на готовность для выполнения задач реального времени и пригодность к использованию в критически важных системах. ACRN обеспечивает минимальные накладные расходы, гарантирует низкие задержки (low latency) и адекватную отзывчивость при взаимодействии с оборудованием. Поддерживается виртуализация ресурсов CPU, ввода/вывода, сетевой подсистемы, операций с графикой и звуком. ACRN может применяться для запуска нескольких изолированных виртуальных машин в электронных блоках управления, приборных панелях, автомобильных информационных системах, потребительских IoT-устройств и другой встраиваемой технике. ACRN поддерживает два типа гостевых систем — привилегированные Service VM, которые используются для управления ресурсами системы (CPU, память, ввод/вывод и т.п.), и пользовательские User VM, в которых может запускаться Linux-дистрибутивы, Android и Windows.
    • В подсистеме IMA (Integrity Measurement Architecture), обеспечивающей поддержание базы хэшей для проверки целостности файлов и связанных с ними метаданных, появилась возможность проверки целостности данных самого ядра, например, для отслеживания изменения правил SELinux.
    • В гипервизор KVM добавлена возможность перехвата гипервызовов Xen и их проброс в эмулятор, работающий в пространстве пользователя.
  • Сетевая подсистема
    • Добавлена возможность выноса обработчика NAPI полинга (polling) сетевых устройств в отдельный поток ядра, что позволяет добиться повышения производительности для некоторых типов нагрузки. До этого полинг выполнялся в контексте softirq и не охватывался планировщиком задач, что затрудняло проведение тонкой оптимизации для достижения максимальной производительности. Выполнение в отдельном потоке ядра позволяет наблюдать за обработчиком полинга из пространства пользователя, прикреплять к отдельным ядрам CPU и учитывать при планировании переключения задач. Для включения нового режима в sysfs предложен параметр /sys/class/net/<iface>/threaded.
    • Продолжена интеграция в ядро MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. В новом выпуске добавлена возможность прикрепления приоритета к определённым потокам, что позволяет, например, организовать работу резервных потоков, включающихся только при проблемах с первичным потоком.
    • В IGMPv3 добавлена поддержка механизма EHT (Explicit Host Tracking).
    • В механизме фильтрации пакетов netfilter реализована возможность владения определёнными таблицами для получения эксклюзивного контроля (например, фоновый процесс межсетевого экрана может закрепить за собой определённые таблицы, запретив кому-то ещё вмешиваться в них).
  • Оборудование
    • Проведена чистка вышедших из обихода и находящихся без сопровождения ARM-платформ. Удалён код платформ efm32, picoxcell, prima2, tango, u300, zx и c6x, а также связанных с ними драйверов.
    • В драйвере amdgpu реализована возможность разгона (OverDrive) карт на базе GPU Sienna Cichlid (Navi 22). Добавлена поддержка пиксельного формата FP16 для DCE (display controller engine) с 8 по 11 поколение. Для GPU Navy Flounder (Navi 21) и APU Van Gogh реализована возможность сброса GPU.
    • В драйвере i915 для видеокарт Intel реализован параметр i915.mitigations для отключения механизмов изоляции и защиты в пользу повышения производительности. Включена поддержка технологии Intel Clear Color для повышения точности цветопередачи. Добавлена поддержка DP-HDMI 2.1. Реализована возможность управления подсветкой панелей eDP. Для GPU Gen9 с поддержкой LSPCON (Level Shifter and Protocol Converter) включена поддержка HDR.
    • В драйвере nouveau добавлена начальная поддержка GPU NVIDIA на базе архитектуры GA100 (Ampere).
    • Добавлена поддержка звуковых карт Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s и Pioneer DJM-750, а также поддержка звуковой подсистемы игровых консолей Nintendo 64.
    • Добавлена поддержка ARM-плат, устройств и платформ: PineTab, Snapdragon 888 / SM8350, Snapdragon MTP ,Two Beacon EmbeddedWorks, Intel eASIC N5X, Netgear R8000P, Plymovent M2M, Beacon i.MX8M Nano, NanoPi M4B.
    • Добавлена поддержка смартфонов Purism Librem5 Evergreen, Xperia Z3+/Z4/Z5, ASUS Zenfone 2 Laser, BQ Aquaris X5, OnePlus6, OnePlus6T, Samsung GT-I9070.

Источник.