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...5170 
 Trees...940 
 Максвелл 3...870 
 Go Web ...823 
 William Gropp...803 
 Ethreal 3...787 
 Gary V.Vaughan-> Libtool...773 
 Ethreal 4...771 
 Rodriguez 6...763 
 Ext4 FS...755 
 Clickhouse...754 
 Steve Pate 1...754 
 Ethreal 1...742 
 Secure Programming for Li...732 
 C++ Patterns 3...716 
 Ulrich Drepper...696 
 Assembler...695 
 DevFS...662 
 Стивенс 9...649 
 MySQL & PosgreSQL...632 
 
  01.01.2024 : 3621733 посещений 

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.




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

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

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