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

Ядро 6.0

03.10.2022 После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.0. Значительное изменение номера версии произведено из эстетических соображений и является формальным шагом, снимающим дискомфорт из-за накопления большого числа выпусков в серии (Линус пошутил, что причина смены номера ветки скорее в том, что у него заканчиваются пальцы на руках и ногах считать номера версий). Среди наиболее заметных изменений: поддержка асинхронной буферизированной записи в XFS, блочный драйвер ublk, оптимизация планировщика задач, механизм верификации корректности работы ядра, поддержка блочного шифра ARIA.

В новую версию принято 16585 исправлений от 2129 разработчиков, размер патча - 103 МБ (изменения затронули 13939 файлов, добавлено 1420093 строк кода, удалено 318741 строк). Около 40% всех представленных в 6.0 изменений связаны с драйверами устройств, примерно 19% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 4% - с файловыми системами и 2% c внутренними подсистемами ядра.

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

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В файловую систему XFS добавлена поддержка асинхронной буферизированной записи для приложений, использующих io_uring. Тесты производительности, проведённые при помощи инструментария fio (1 поток, размер блока 4кб, 600 секунд, последовательная запись), показывают увеличение числа операций ввода/вывода в секунду (IOPS) с 77k до 209k, скорости передачи данных – с 314MB/s до 854MB/s, и падения задержек с 9600ns до 120ns (80 раз).
    • В файловой системе Btrfs реализована вторая версия протокола для команды "send", реализующая поддержку дополнительных метаданных, отправки данных более крупными блоками (более 64K) и передачи экстентов в сжатом виде. Значительно (до 3 раз) увеличена производительность операций прямого чтения (direct read) за счёт одновременного чтения до 256 секторов. Уменьшены конфликты блокировок и ускорена проверка метаданных за счёт сокращения резервируемых метаданных для отложенных элементов.
    • В файловую систему ext4 добавлены новые ioctl-операции EXT4_IOC_GETFSUUID и EXT4_IC_SETFSUUID для извлечения или установки UUID-идентификатора, хранимого в суперблоке.
    • В файловой системе F2FS предложен режим низкого потребления памяти, который оптимизирует работу на устройствах с небольшим объёмом ОЗУ и позволяет снизить потребление памяти ценой уменьшения производительности.
    • Добавлена поддержка аутентификации по внутреннему каналу ("in-band") для накопителей NVMe.
    • В сервере NFSv4 реализован лимит на число активных клиентов, который выставляется как 1024 допустимых клиентов на каждый гигабайт оперативной памяти в системе.
    • В реализации CIFS-клиента повышена производительность в режиме многоканальной передачи.
    • В подсистему отслеживания событий в ФС fanotify добавлен новый флаг FAN_MARK_IGNORE для игнорирования специфичных событий.
    • В ФС Overlayfs, при монтировании поверх ФС с маппингом идентификаторов пользователей, обеспечена корректная поддержка POSIX-совместимых списков управления доступом.
    • Добавлен блочный драйвер ublk, выносящий специфичную логику на сторону фонового процесса в пространстве пользователя и использующий подсистему io_uring.
  • Память и системные сервисы
    • В подсистему DAMON (Data Access MONitor) добавлены новые возможности, позволяющие не только отслеживать доступ процессов к оперативной памяти из пространства пользователя, но и влиять на управление памятью. В частности, предложен новый модуль "LRU_SORT", обеспечивающий перегруппировку списков LRU (Least Recently Used) для повышения приоритета определённых страниц памяти.
    • Реализована возможность создания новых регионов памяти, используя возможности шины CXL (Compute Express Link), применяемой для организации высокоскоростного взаимодействия CPU с устройствами памяти. CXL позволяет подключать новые регионы памяти, предоставляемые внешними устройства памяти, и использовать их как дополнительные ресурсы физического адресного пространства для расширения системной оперативной памяти (DDR) или постоянной памяти (PMEM).
    • Решены проблемы с производительностью систем на процессорах AMD Zen, вызванные кодом, добавленным 20 лет назад для обхода аппаратной проблемы в некоторых чипсетах (добавлялась дополнительная инструкция WAIT, замедляющая процессор чтобы чипсет успевал перейти в состояние простоя). Изменение приводило к снижению производительности при нагрузках, в которых часто чередуются состояния простоя (idle) и активности (busy). Например, после отключения обходного манёвра средние показатели теста tbench увеличились с 32191 MB/s до 33805 MB/s.
    • Из планировщика задач убран код с эвристикой, обеспечивающий миграцию процессов на наименее загруженные CPU с учётом прогнозируемого выигрыша в энергопотреблении. Разработчики пришли к выводу, что эвристика не приносит должной пользы и её проще удалить и переносить процессы без дополнительных оценок каждый раз когда такой перенос потенциально может привести к снижению потребления энергии (например, когда целевой CPU находится на уровне с более низким энергопотреблением). Отключение эвристики привело к снижению энергопотребления при выполнении интенсивных задач, например, в тесте с декодированием видео энергопотребление снизилось на 5.6%.
    • Проведена оптимизация распределения задач по ядрам CPU на крупных системах, позволившая поднять производительность при некоторых видах нагрузки.
    • В интерфейсе асинхронного ввода/вывода io_uring предложен новый флаг IORING_RECV_MULTISHOT, позволяющий использовать режим "multi-shot" с системным вызовом recv() для выполнения разом нескольких операций чтения с одного сетевого сокета. В io_uring также реализована поддержка сетевой передачи без промежуточной буферизации (zero-copy).
    • Реализована возможность перевода программ BPF, прикреплённых к uprobe, в состояние сна. В BPF также добавлен новый итератор ksym для работы с таблицами символов ядра.
    • Удалён устаревший интерфейс "efivars" в sysfs, предназначенный для доступа к загрузочным переменным UEFI (для доступа к данным EFI теперь повсеместно применяется виртуальная ФС efivarfs).
    • В утилите perf реализованы новые отчёты для анализа конфликта блокировок и времени, проводимого процессором для выполнения компонентов ядра.
    • Удалена настройка CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3, позволявшая собирать ядро в режиме оптимизации "-O3". Отмечается, что эксперименты с режимами оптмизации могут проводиться через передачу флагов при сборке ("make KCFLAGS=-O3"), а для добавления настройки в Kconfig требуется обеспечить повторяемое профилирование производительности, показывающее что применяемое в режиме "-O3" развёртывание циклов даёт выигрыш по сравнению с уровнем оптимизации "-O2".
    • Добавлен debugfs-интерфейс для получения информации о работе отдельных "memory shrinker" (обработчики, вызываемые при нехватке памяти и осуществляющие упаковку структур данных ядра для сокращения потребления ими памяти).
    • Для архитектур OpenRISC и LoongArch реализована поддержка шины PCI.
    • Для архитектуры RISC-V реализовано расширение "Zicbom" для управления устройствами c DMA, не согласованным с кэшем (non-cache-coherent).
  • Виртуализация и безопасность
    • Добавлен механизм верификации RV (Runtime Verification) для проверки корректности работы на высоконадежных системах, гарантирующих отсутствие сбоев. Проверка производится во время выполнения через прикрепление обработчиков к точкам трассировки, сверяющих фактический ход выполнения с заранее определённой эталонной детерминированной моделью автомата, определяющей ожидаемое поведение системы. Сверка с моделью во время выполнения позиционируется как более легковесный и простой для реализации на практике способ подтверждения корректности выполнения на критически важных системах, дополняющий классические методы подтверждения надёжности. Из достоинств RV называется возможность обеспечить строгую верификацию без отдельной реализации всей системы на языке моделирования, а также гибкое реагирование на непредвиденные события.
    • Интегрированы компоненты ядра для управления анклавами на базе технологии Intel SGX2 (Software Guard eXtensions), позволяющей приложениям выполнять код в изолированных зашифрованных областях памяти, доступ остальной системы к которым ограничен. Технология Intel SGX2 поддерживается в чипах Intel Ice Lake и Gemini Lake, и отличается от Intel SGX1 дополнительными инструкциями для динамического управления памятью анклавов.
    • Для архитектуры x86 реализована возможность передачи затравки для генератора псевдослучайных чисел через настройки загрузчика.
    • В LSM-модуль SafeSetID добавлена возможность управления изменениями, совершаемыми через вызов setgroups(). SafeSetID позволяет системным сервисам безопасно управлять пользователями без повышения привилегий (CAP_SETUID) и без получения полномочий пользователя root.
    • Добавлена поддержка блочного шифра ARIA.
    • В модуле управления безопасностью на базе BPF реализована возможность прикрепления обработчиков к отдельным процессам и группам процессов (cgroup).
    • Добавлен механизм c реализацией watchdog для определения зависаний гостевых систем на основе мониторинга активности vCPU.
  • Сетевая подсистема
    • В подсистему BPF добавлены обработчики для генерации и проверки SYN cookies. Также добавлен набор функций (kfunc) для доступа и изменения состояния соединений.
    • В беспроводной стек добавлена поддержка механизма MLO (Multi-Link Operation), определённого в спецификации WiFi 7 и позволяющего устройствам одновременно получать и отправлять данные с использованием разных диапазонов частот и каналов, например, для установки одновременно нескольких каналов связи между точкой доступа к клиентским устройством.
    • Повышена производительность встроенной в ядро реализации протокола TLS.
    • Добавлен параметр командной строки ядра "hostname=", позволяющий выставить имя хоста на ранней стадии загрузки, до того как будут запущены компоненты пространства пользователя.
  • Оборудование
    • В драйвере i915 (Intel) обеспечена поддержка дискретных видеокарт Intel Arc (DG2/Alchemist) A750 и A770. Предложена начальная реализация поддержки GPU Intel Ponte Vecchio (Xe-HPC) и Meteor Lake. Продолжена работа по поддержке платформы Intel Raptor Lake.
    • В драйвере amdgpu продолжена работа по обеспечению поддержки платформ AMD RDNA3 (RX 7000) и CDNA (Instinct).
    • В драйвере Nouveau переработан код поддержки дисплейных движков GPU NVIDIA nv50.
    • Добавлен новый DRM-драйвер logicvc для экранов LogiCVC.
    • В драйвере v3d (для GPU Broadcom Video Core) реализована поддержка плат Raspberry Pi 4.
    • В драйвер msm добавлена поддержка GPU Qualcomm Adreno 619.
    • В драйвер Panfrost добавлена поддержка GPU ARM Mali Valhall.
    • Добавлена начальная поддержка процессоров Qualcomm Snapdragon 8cx Gen3, используемых в ноутбуках Lenovo ThinkPad X13s.
    • Добавлены звуковые драйверы для платформ AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake и Mediatek MT8186.
    • Добавлена поддержка ускорителей систем машинного обучения Intel Habana Gaudi 2.
    • Добавлена поддержка ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3.

Одновременно латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 6.0 - Linux-libre 6.0-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключено использование блобов в драйвере CS35L41 HD-audio и драйвере с интерфейсом UCSI для микроконтроллеров STM32G0. Проведена чистка dts-файлов для чипов Qualcomm и MediaTek. Переделано отключение блобов в драйвере MediaTek MT76. Обновлён код чистки блобов в драйверах и подсистемах AMDGPU, Adreno, Tegra VIC, Netronome NFP и Habanalabs Gaudi2. Прекращена чистка драйвера VXGE, удалённого из ядра.

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

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

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