Прекращение поддержки Itanium, добавление GSP-RM в Nouveau и управление доступом к user namespace и io_uring через AppArmor: релиз Linux 6.7
08.01.2024 13:26После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.7. Среди наиболее заметных изменений: интеграция ФС Bcachefs, прекращение поддержки архитектуры Itanium, возможность работы Nouvea с прошивками GSP-R, поддержка TLS-шифрования в NVMe-TCP, возможность использования исключений в BPF, поддержка futex в io_uring, оптимизация производительности планировщика fq (Fair Queuing), поддержка расширения TCP-AO (TCP Authentication Option) и возможность ограничения сетевых соединений в механизме защиты Landlock, добавлено управление доступом к user namespace и io_uring через AppArmor.
В новую версию принято 18405 исправлений от 2066 разработчиков, размер патча - 72 МБ (изменения затронули 13467 файлов, добавлено 906147 строк кода, удалено 341048 строк). В прошлом выпуске было 15291 исправлений от 2058 разработчиков, размер патча - 39 МБ. Около 45% всех представленных в 6.7 изменений связаны с драйверами устройств, примерно 14% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 5% - с файловыми системами и 3% c внутренними подсистемами ядра.
Среди основных новшеств:
- • Прекращена поддержка архитектуры ia64, применяемой в процессорах Intel Itanium, продажи которых были полностью прекращены в 2021 году. Процессоры Itanium были представлены компанией Intel в 2001 году, но архитектура ia64 не выдержала конкуренции с AMD64, главным образом из-за более высокой производительности AMD64 и более гладкого перехода с 32-разрядных процессоров x86. В итоге, интересы Intel сместились в пользу процессоров x86-64, а уделом Itanium оставались серверы HP Integrity, приём заказов на которые был прекращён три года назад. Код для поддержки ia64 удалён из ядра в основном из-за длительного отсутствия сопровождения данной платформы, при этом Линус Торвальдс выразил готовность вернуть поддержку ia64 в ядро, но только если найдётся сопровождающий, который продемонстрирует качественное сопровождение данной платформы вне основного ядра как минимум в течение года.
- • В состав ядра принят код файловой системы Bcachefs, в которой предпринята попытка добиться уровня производительности, надёжности и масштабируемости, свойственного XFS, в сочетании с элементами расширенной функциональности, имеющейся в Btrfs и ZFS. Например, Bcachefs поддерживает такие возможности, как включение в раздел нескольких устройств, многослойные раскладки накопителей (нижний слой с часто используемыми данными на базе быстрых SSD, а верхний слой с менее востребованными данными из жестких дисков), репликация (RAID 1/10), кэширование, прозрачное сжатие данных (режимы LZ4, gzip и ZSTD), срезы состояния (снапшоты), верификация целостности по контрольным суммам, возможность хранения кодов коррекции ошибок Рида—Соломона (RAID 5/6), хранение информации в зашифрованном виде (используются ChaCha20 и Poly1305). По производительности Bcachefs опережает Btrfs и другие ФС на базе механизма Copy-on-Write, и демонстрирует скорость работы, близкую к Ext4 и XFS.
- • В файловой системе Btrfs появился упрощённый режим квот, который позволяет добиться более высокой производительности за счёт отслеживания экстентов только в том подразделе, в котором они созданы, что существенно упрощает вычисления и повышает производительность, но не позволяет учитывать экстенты, совестно используемые в нескольких подразделах.
- • В драйвер NVMe-TCP (NVMe over TCP), позволяющий обращаться к NVMe-накопителям по сети (NVM Express over Fabrics), используя протокол TCP, добавлена поддержка шифрования канала передачи данных с использованием TLS (используется KTLS и фоновый процесс в пространстве пользователя tlshd для согласования соединения).
- • В модуль ядра Nouveau добавлена начальная поддержка прошивок GSP-RM, которые используется в GPU NVIDIA RTX 20+ для выноса операций инициализации и управления GPU на сторону отдельного микроконтроллера GSP (GPU System Processor). Поддержка GSP-RM позволяет драйверу Nouveau работать через обращение к прошивке, вместо прямого программирования операций взаимодействия с оборудованием, что значительно упрощает добавление поддержки новых GPU NVIDIA благодаря использованию уже готовых вызовов для инициализации и управления энергопотреблением.
- • Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). В новой версии осуществлён переход на использование выпуска Rust 1.73 и предложен набор привязок для работы с рабочими очередями (workqueues).
- • В подсистему AppArmor добавлена возможность управления доступом к механизму io_uring и созданию пространств имён идентификаторов пользователя (user namespaces), что позволяет выборочно разрешать доступ к данным возможностям только определённым процессам.
- • В подсистему io_uring добавлена поддержка операций с futex-ами, а также реализованы новые операции: IORING_OP_WAITID (асинхронная версия waitid), SOCKET_URING_OP_GETSOCKOPT (вариант getsockoptand), SOCKET_URING_OP_SETSOCKOPT (вариант setsockopt) и IORING_OP_READ_MULTISHOT (многократные операции чтения, не прекращающиеся пока есть данные или не заполнен буфер).
- • Проведена оптимизация производительности планировщика пакетов fq (Fair Queuing), позволившая поднять пропускную способность на 5% при больших нагрузках в тесте tcp_rr (TCP Request/Response) и на 13% при неограниченном потоке UDP-пакетов.
- • В подсистеме BPF реализована поддержка исключений, которые обрабатываются как неотложный выход из BPF-программы с возможностью безопасного раскручивания кадров стека. Кроме того, в BPF-программах разрешено использования указателей kptr в привязке к CPU.
- • В TCP-стек добавлена поддержка расширения TCP-AO (TCP Authentication Option, RFC 5925), которое даёт возможность верифицировать TCP-заголовки по MAC-кодам (Message Authentication Code), используя более современные алгоритмы HMAC-SHA1 и CMAC-AES-128 вместо ранее доступной опции TCP-MD5 на базе устаревшего алгоритма MD5.
- • В механизм Landlock, позволяющий ограничить взаимодействие группы процессов с внешним окружением, добавлена поддержка определения правил управления доступом к TCP-сокетам. Например, можно создать правило, разрешающее только обращение по сетевому порту 443 для установки HTTPS-соединений.
Одновременно латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 6.7 - Linux-libre 6.7-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В выпуске 6.7 обновлён код чистки блобов в различных драйверах и подсистемах, например, в драйверах amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs и btqca. Удалён код чистки драйверов localtalk и rtl8192u из-за их исключения из состава ядра. Убраны лишние компоненты чистки драйверов xhci-pci, rtl8xxxu и rtw8822b, ранее добавленные по ошибке. Проведена чистка имён блобов в dts-файлах для архитектуры Aarch64. Удалены блобы в новых драйверах mt7925, tps6598x, aw87390 и aw88399.
Перепечатано с сайта OpenNET