Релиз ядра Linux 5.12
26 апреля 2021 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра 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.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.