Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

Ядро 5.12

26.04.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).
    • Реализована поддержка шины CXL 2.0 (Compute Express Link), применяемой для организации высокоскоростного взаимодействия CPU с устройствами памяти (позволяет использовать внешние устройства памяти как часть ОЗУ или постоянной памяти, так, как если бы данная память была подключена через штатный контроллер памяти в CPU).
    • Добавлен драйвер nvmem для получения данных из зарезервированных прошивками областей памяти, напрямую недоступных для Linux (например, EEPROM-память, физически доступная только прошивке, или данные, доступные только на ранней стадии загрузки).
    • Удалена поддержка системы профилирования "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 и их проброс в эмулятор, работающий в пространстве пользователя.
    • Добавлена возможность использования Linux в качестве корневого окружения для гипервизора Hyper-V. Корневое окружение имеет прямой доступ к оборудованию и применяется для запуска гостевых систем (аналог Dom0 в Xen). До сих пор Hyper-V (Microsoft Hypervisor) поддерживал Linux лишь в гостевых окружениях, но сам гипервизор управлялся из окружения на базе Windows.
    • Добавлена поддержка inline-шифрования для карт eMMC, позволяющего задействовать встроенные в контроллер накопителя механизмы шифрования, которые осуществляют прозрачное шифрование и расшифровку ввода/вывода.
    • Из криптоподсистемы удалена поддержка неиспользуемых в ядре хэшей RIPE-MD 128/256/320 и Tiger 128/160/192, а также потокового шифра Salsa20, на смену которому пришёл алгоритм ChaCha20. Алгоритм blake2 обновлён до реализации blake2s.
  • Сетевая подсистема
    • Добавлена возможность выноса обработчика 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, Radeon RX 6xxx). Добавлена поддержка пиксельного формата FP16 для DCE (display controller engine) с 8 по 11 поколение. Для GPU Navy Flounder (Navi 21) и APU Van Gogh реализована возможность сброса GPU.
    • В драйвере i915 для видеокарт Intel реализован параметр i915.mitigations для отключения механизмов изоляции и защиты в пользу повышения производительности. Для чипов начиная с Tiger Lake включена поддержка механизма VRR (Variable Rate Refresh), позволяющего адаптивно менять частоту обновления монитора для обеспечения плавности и отсутствия разрывов во время игр. Включена поддержка технологии Intel Clear Color для повышения точности цветопередачи. Добавлена поддержка DP-HDMI 2.1. Реализована возможность управления подсветкой панелей eDP. Для GPU Gen9 с поддержкой LSPCON (Level Shifter and Protocol Converter) включена поддержка HDR.
    • В драйвере nouveau добавлена начальная поддержка GPU NVIDIA на базе архитектуры GA100 (Ampere).
    • В драйвер msm добавлена поддержка GPU Adreno 508, 509 и 512, используемых в чипах SDM (Snapdragon) 630, 636 и 660.
    • Добавлена поддержка звуковых карт Sound BlasterX AE-5 Plus, Lexicon I-ONIX FW810s и Pioneer DJM-750. Добавлена поддержка звуковой подсистемы Intel Alder Lake PCH-P. Реализована поддержка программной симуляции подключения и отключения аудиоразъёма для отладки обработчиков в пространстве пользователя.
    • Добавлена поддержка игровых консолей Nintendo 64, выпускавшихся с 1996 по 2003 год (прошлые попытки портировать Linux для Nintendo 64 не были доведены до конца и имели статус Vaporware). В качестве мотива создания нового порта для устаревшей платформы, которая не выпускается уже почти двадцать лет, называется желание стимулировать развитие эмуляторов и упрощение переноса игр.
    • Добавлен драйвер для игрового контроллера Sony PlayStation 5 DualSense.
    • Добавлена поддержка 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.
    • Добавлен драйвер bcm-vk для плат-ускорителей Broadcom VK (например, PCIe-платы Valkyrie и Viper), которые можно использовать для выноса на отдельное устройство операций по обработке звука, видео и изображений, а также действий, связанных с шифрованием.
    • Добавлена поддержка платформы Lenovo IdeaPad с возможностью управления постоянной зарядкой и подсветкой клавиатуры. Также обеспечена поддержка ACPI-профиля платформы ThinkPad с возможностью управления режимами энергопотребления. Добавлен драйвер для HID-подсистемы Lenovo ThinkPad X1 Tablet Gen 2.
    • Добавлен драйвер ov5647 с поддержкой модуля с камерой для Raspberry Pi.
    • Добавлена поддержка RISC-V SoC FU740 и плат HiFive Unleashed. Также добавлен новый драйвер для чипа Kendryte K210.

    Дополнительно можно отметить публикацию латиноамериканским Фондом свободного ПО варианта полностью свободного ядра 5.12 - Linux-libre 5.12-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске проведена чистка драйверов для криптоускорителя OcteonTX2, DVB MXL692, Wi-Fi MT7921E, плат BCM VK, Intel ICE и Qualcomm AArch64 DTS. Обновлён код чистки блобов в драйверах для Adreno GPU, Allegro-DVT и сенсорных экранов.



    Оставьте свой комментарий !

    Ваше имя:
    Комментарий:
    Оба поля являются обязательными

     Автор  Комментарий к данной статье