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

Ядро 5.19

01.08.2022

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.19. Среди наиболее заметных изменений: поддержка процессорной архитектуры LoongArch, интеграция патчей "BIG TCP", режим "on-demand" в fscache, удаление кода для поддержки формата a.out, возможность применения ZSTD для сжатия прошивок, интерфейс для управления вытеснением памяти из пространства пользователя, повышение надёжности и производительности генератора псевдослучайных чисел, поддержка расширений Intel IFS (In-Field Scan), AMD SEV-SNP (Secure Nested Paging), Intel TDX (Trusted Domain Extensions) и ARM SME (Scalable Matrix Extension).

В анонсе Линус сообщил, что скорее всего следующему выпуску ядра будет присвоен номер 6.0, так как в ветке 5.x накопилось достаточного выпусков для смены первого числа в номере версии. Смена нумерации осуществляется из эстетических соображений и является формальным шагом, снимающим дискомфорт из-за накопления большого числа выпусков в серии.

Также Линус упомянул, что использовал для формирования релиза ноутбук Apple на базе архитектуры ARM64 (Apple Silicon) с Linux-окружением на базе дистрибутива Asahi Linux. Это не основная рабочая станция Линуса, но он использовал данную платформу, чтобы проверить её пригодность для работы над ядром и быть уверенным в том, что сможет формировать выпуски ядра в поездке, имея под рукой лёгкий ноутбук. До этого много лет назад Линус имел опыт использования оборудования Apple для разработки - когда-то он пользовался компьютером на базе CPU ppc970 и ноутбуком Macbook Air.

В новую версию принято 16401 исправлений от 2190 разработчиков (в прошлом выпуске было 16206 исправлений от 2127 разработчиков), размер патча - 90 МБ (изменения затронули 13847 файлов, добавлено 1149456 строк кода, удалено 349177 строк). Около 39% всех представленных в 5.19 изменений связаны с драйверами устройств, примерно 21% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 4% - с файловыми системами и 3% c внутренними подсистемами ядра.

Основные новшества в ядре 5.19:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Файловая система EROFS (Enhanced Read-Only File System), предназначенная для использования на разделах, доступных в режиме только для чтения, переведена на использование подсистемы fscache, обеспечивающей кэширование данных. Изменение позволило заметно поднять производительность систем, в которых из образа на базе EROFS запускается большое число контейнеров.
    • В подсистему fscache добавлен режим чтения по требованию ("on-demand"), который задействован для оптимизации EROFS. Новый режим позволяет организовать кэширование чтения из образов ФС, находящихся в локальной системе. В отличие от изначально доступного режима работы, ориентированного на кэширования в локальной файловой системе данных, передаваемых через сетевые файловые системы, режим "on-demand" делегирует функции извлечения данных и их записи в кэш отдельному фоновому процессу, выполняемому в пространстве пользователя.
    • В XFS обеспечена возможность хранения миллиардов расширенных атрибутов в i-node. Максимальное количество экстентов для одного файла увеличено с 4 миллиардов до 247. Реализован режим для атомарного обновления сразу нескольких расширенных атрибутов файла.
    • В файловой системе Btrfs оптимизирована работа с блокировками, что позволило добиться увеличения производительности примерно на 7% при прямой записи в режиме nowait. Производительность операций в режиме NOCOW (без copy-on-write) повышена приблизительно на 3%. Снижена нагрузка на страничный кэш при работе команды "send". Минимальный размер подстраниц снижен с 64К до 4K (можно использовать подстраницы размером меньше страниц ядра). Осуществлён переход с использования базисного дерева (radix tree) на алгоритм XArrays.
    • В NFS-сервер добавлен режим продления сохранения состояния блокировки, выставленной клиентом, который перестал отвечать на запросы. Новый режим позволяет задержать очистку блокировки вплоть до суток, если другой клиент не запросит конкурирующую блокировку. В штатном режиме блокировка очищается через 90 секунд после того как клиент перестал отвечать.
    • В подсистеме отслеживания событий в ФС fanotify реализован флаг FAN_MARK_EVICTABLE, при помощи которого можно отключить закрепление целевых i-node в кэше, например, для игнорирования подветок без закрепления их частей в кэше.
    • В драйвер для ФС FAT32 добавлена поддержка получения сведений о времени создания файла через системный вызов statx c реализацией более эффективного и функционального варианта stat(), возвращающего расширенную информацию о файле.
    • Внесены значительные оптимизации в драйвер exFAT, связанные с обеспечением одновременной очистки группы секторов при активном режиме 'dirsync', вместо последовательной посекторной очистки. За счёт сокращения числа запросов блоков после внесения оптимизации производительность создания большого числа каталогов на SD-карте возросла более чем на 73-85% в зависимости от размера кластера.
    • В состав ядра включено первое корректирующее обновление драйвера ntfs3. С момента включения ntfs3 в состав ядра 5.15 в октябре прошлого года драйвер не обновлялся, а с разработчиками была потеряна связь, но теперь разработчики возобновили публикацию изменений. В предложенных патчах устранены ошибки, приводящие к утечкам памяти и аварийным завершениям, решены проблемы с выполнением xfstests, проведена чистка неиспользуемого кода и исправлены опечатки.
    • Для OverlayFS реализована возможность маппинга идентификаторов пользователей примонтированных файловых систем, применяемого для сопоставления файлов определённого пользователя на примонтированном чужом разделе с другим пользователем в текущей системе.
  • Память и системные сервисы
    • Добавлена начальная поддержка архитектуры набора команд LoongArch, применяемой в процессорах Loongson 3 5000 и реализующей новый RISC ISA, похожий на MIPS и RISC-V. Архитектура LoongArch доступна в трёх вариантах: урезанный 32-разрядный (LA32R), обычный 32-разрядный (LA32S) и 64-разрядный (LA64).
    • Удалён код для поддержки формата исполняемых файлов a.out, который был переведён в разряд устаревших в выпуске 5.1. Формат a.out давно не применяется на системах с Linux, а генерация файлов a.out не поддерживается современными инструментальными средствами в конфигурациях для Linux по умолчанию. Загрузчик для a.out файлов может быть реализован целиком в пространстве пользователя.
    • Прекращена поддержка загрузочных опций, специфичных для архитектуры x86: nosep, nosmap, nosmep, noexec и noclflush).
    • Прекращена поддержка устаревшей архитектуры CPU h8300 (Renesas H8/300), давно оставшейся без сопровождения.
    • Расширены возможности, связанные с реагированием на выявление расщеплённых блокировок ("split lock"), возникающих при доступе к невыровненным данным в памяти из-за того, что при выполнении атомарной инструкции данные пересекают две линии кеша CPU. Подобные блокировки приводят к значительному падению производительности. Если ранее по умолчанию ядро выдавало предупреждение с информацией о вызвавшем блокировку процессе, то теперь проблемный процесс дополнительно будет замедлен, чтобы сохранить производительность остальной системы.
    • Добавлена поддержка реализованного в процессорах Intel механизма IFS (In-Field Scan), позволяющего запускать низкоуровневые диагностические тесты CPU, способные выявлять проблемы, не определяемые штатными средствами на основе кодов коррекции ошибок (ECC) или битов чётности. Выполняемые тесты оформляются в форме загружаемой прошивки, оформленной по аналогии с обновлениями микрокода. Результаты тестирования доступны через sysfs.
    • Добавлена возможность встраивания в ядро файла bootconfig, позволяющего помимо опций командной строки определять параметры работы ядра через файл с настройками. Встраивание осуществляется при помощи сборочной опции 'CONFIG_BOOT_CONFIG_EMBED_FILE="/PATH/TO/BOOTCONFIG/FILE"'. Ранее bootconfig определялся через прикрепление к образу initrd. Встраивание в ядре позволяет использовать bootconfig в конфигурациях без initrd.
    • Реализована возможность загрузки прошивок, сжатых использованием алгоритма Zstandard. В sysfs добавлен набор управляющих файлов /sys/class/firmware/*, позволяющий инициировать загрузку прошивок из пространства пользователя.
    • В интерфейсе асинхронного ввода/вывода io_uring предложен новый флаг IORING_RECVSEND_POLL_FIRST, при выставлении которого сетевая операция вначале будет передана для обработки с использованием полинга (polling), что может сэкономить ресурсы в ситуациях, когда допустима обработка операции с некоторой задержкой. В io_uring также добавлена поддержка системного вызова socket(), предложены новый флаги для упрощения управления файловыми дескрипторами, добавлен режим "multi-shot" для приёма в вызове accept() разом нескольких соединений, добавлены операции для проброса команд NVMe напрямую в устройство.
    • Для архитектуры Xtensa обеспечена поддержка отладочного инструмента KCSAN (Kernel Concurrency Sanitizer), предназначенного для динамического выявления состояний гонки внутри ядра. Также добавлена поддержка спящего режима и сопроцессоров.
    • Для архитектуры m68k (Motorola 68000) реализована виртуальная машина (симулятор платформы), основанная на эмуляторе Android Goldfish.
    • Для архитектуры AArch64 реализована поддержка расширений Armv9-A SME (Scalable Matrix Extension).
    • В подсистеме eBPF разрешено хранения типизированных указателей в map-структурах, а также добавлена поддержка динамических указателей.
    • Предложен новый упреждающий механизм вытеснения памяти, поддерживающий управление из пространства пользователя при помощи файла memory.reclaim. Запись числа в указанный файл приведёт к попытке вытеснения соответствующего числа байт из набора, связанного с cgroup.
    • Повышена точность учёта использования памяти при сжатии данных в разделе подкачки при помощи механизма zswap.
    • Для архитектуры RISC-V обеспечена поддержка запуска 32-разрядных исполняемых файлов на 64-разрядных системах, добавлен режим для привязки ограничивающих атрибутов к страницам памяти (например, для запрета кэширования) и реализована функция kexec_file_load().
    • Реализация поддержки 32-разрядых систем Armv4T и Armv5 адаптирована для использования в универсальных многоплатформенных сборках ядра, подходящих для разных ARM-систем.
  • Виртуализация и безопасность
    • В подсистеме EFI реализована возможность конфиденциальной передачи гостевым системам секретной информации без её раскрытия хост-системе. Данные предоставляются через каталог security/coco в securityfs.
    • В режиме защиты Lockdown, который ограничивает доступ пользователя root к ядру и блокирует пути обхода UEFI Secure Boot, устранена лазейка, позволявшая обходить защиту через манипуляции с отладчиком ядра.
    • Включены патчи, нацеленные на повышение надёжности и производительности генератора псевдослучайных чисел.
    • При сборке при помощи Clang 15 реализована поддержка механизма рандомизации структур ядра.
    • В механизм Landlock, позволяющий ограничить взаимодействие группы процессов с внешним окружением, предоставлена поддержка правил, позволяющих контролировать выполнение операций переименования файлов.
    • Подсистема IMA (Integrity Measurement Architecture), предназначенная для проверки целостности компонентов операционной системы по цифровым подписям и хэшам, переведена на использование модуля fs-verity для верификации файлов.
    • Изменена логика действий при отключении непривилегированного доступа к подсистеме eBPF - ранее отключались все команды, связанные с системным вызовом bpf(), а начиная с версии 5.19 оставлен доступ к командам, которые не приводят к созданию объектов. При подобном поведении для загрузки BPF-программы требуется привилегированный процесс, но затем непривилегированные процессы могут взаимодействовать с этой программой.
    • Добавлена поддержка расширения AMD SEV-SNP (Secure Nested Paging), обеспечивающего безопасную работу с вложенными таблицами страниц памяти и защищающего от атак "undeSErVed" и "SEVerity" на процессоры AMD EPYC, позволяющих обойти механизм защиты AMD SEV (Secure Encrypted Virtualization).
    • Добавлена поддержка механизма Intel TDX (Trusted Domain Extensions), позволяющий блокировать попытки стороннего доступа к зашифрованной памяти виртуальных машин.
    • В драйвер virtio-blk, используемый для эмуляции блочных устройств, добавлена поддержка ввода/вывода с использованием полинга (polling), что по проведённым тестам позволило сократить задержки примерно на 10%.
  • Сетевая подсистема
    • В состав включена серия патчей BIG TCP позволяющих увеличить максимальный размер пакета TCP-пакета до 4ГБ для оптимизации работы высокоскоростных внутренних сетей дата-центров. Подобное увеличение размера пакета при 16-битном размере поля в заголовке достигается через реализацию "jumbo"-пакетов, размер в IP-заголовке которых выставляется в 0, а фактический размер передаётся в отдельном 32-разрядном поле в отдельном прикреплённом заголовке. При тестировании производительности выставление размера пакета в 185 КБ позволило увеличить пропускную способность на 50% и значительно сократить задержки передачи данных.
    • Продолжена работа по интеграции в сетевой стек средств для отслеживания причин отбрасывания пакетов (коды reason). Код причины передаётся во время освобождения памяти, связанной с пакетом, и позволяет учитывать такие ситуации, как отбрасывание пакета из-за ошибок заполнения полей в заголовке, выявление спуфинга фильтром rp_filter, неверная контрольная сумма, нехватка памяти, срабатывание правил IPSec XFRM, неверный номер последовательности TCP и т.п.
    • Добавлена поддержка отката соединений MPTCP (MultiPath TCP) на использование обычного TCP, в ситуациях, когда определённые возможности MPTCP не могут быть использованы. MPTCP представляет собой расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. Добавлен API для управления потоками MPTCP из пространства пользователя.
  • Оборудование
    • Добавлено более 420 тысяч строк кода, связанных с драйвером amdgpu, из которых около 400 тысяч строк приходится на автоматически сгенерированные заголовочные файлы с данными для регистров ASIC в драйвере для GPU AMD, а ещё 22.5 тысяч строк обеспечивают начальную реализацию поддержки AMD SoC21. Общий размер драйвера для GPU AMD превысил 4 млн строк кода. Кроме SoC21 в драйвере AMD включена поддержка SMU 13.x (System Management Unit), обновлена поддержка USB-C и GPUVM, проведена подготовка к поддержке следующих поколений платформ RDNA3 (RX 7000) и CDNA (AMD Instinct).
    • В драйвере i915 (Intel) расширены возможности, связанные с управлением энергопотреблением. Добавлены идентификаторы GPU Intel DG2 (Arc Alchemist), используемых на ноутбуках, обеспечена начальная поддержка платформы Intel Raptor Lake-P (RPL-P), добавлена информация о графических картах Arctic Sound-M), реализован ABI для вычислительных движков, для карт DG2 добавлена поддержка формата Tile4, для систем на базе микроархитектуры Haswell реализована поддержка DisplayPort HDR.
    • В драйвере Nouveau осуществлён переход на использование обработчика drm_gem_plane_helper_prepare_fb, для некоторых структур и переменных применено статическое выделение памяти. Что касается использования в Nouveau открытых компанией NVIDIA исходных текстов модулей ядра, то работа пока сводится к выявлению и устранению ошибок. В дальнейшем опубликованную прошивку планируется использовать для повышения производительности драйвера.
    • Добавлен драйвер для контроллера NVMe, используемого в компьютерах Apple на базе чипа M1.

Одновременно латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 5.19 - Linux-libre 5.19-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске проведена чистка драйверов для pureLiFi X/XL/XC и TI AMx3 Wkup-M3 IPC. Обновлён код чистки блобов в драйверах и подсистемах Silicon Labs WFX, AMD amdgpu, Qualcomm WCNSS Peripheral Image Loader, Realtek Bluetooth, Mellanox Spectrum, Marvell WiFi-Ex, Intel AVS, IFS, pu3-imgu drivers. Реализована обработка devicetree-файлов Qualcomm AArch64. Добавлена поддержка новой схемы наименования компонентов Sound Open Firmware. Прекращена чистка драйвера ATM Ambassador, удалённого из ядра. Управление чисткой блобов в HDCP и Mellanox Core перенесено в отдельные теги kconfig.




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

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

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