Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Kernels
 Boot 
 Memory 
 File system
 0.01
 1.0 
 2.0 
 2.4 
 2.6 
 3.x 
 4.x 
 5.x 
 6.x 
 Интервью 
 Kernel
 HOW-TO 1
 Ptrace
 Kernel-Rebuild-HOWTO
 Runlevel
 Linux daemons
 FAQ
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Linux Kernel 2.6...2311 
 Trees...1444 
 William Gropp...1408 
 Ethreal 3...1396 
 Ethreal 4...1372 
 C++ Patterns 3...1370 
 Rodriguez 6...1361 
 Максвелл 3...1360 
 Robert Love 5...1359 
 Httpd-> История Ap...1358 
 Максвелл 5...1356 
 Go Web ...1353 
 Ext4 FS...1353 
 K&R 1...1352 
 Rubni-Corbet -> Глав...1351 
 Perl OOP...1351 
 Erlang...1349 
 Kamran Husain...1349 
 OS ->Intel Manual 1...1348 
 Сетунь...1348 
 
  01.01.2024 : 3621733 посещений 

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 и сенсорных экранов.



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

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

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