27.02.2024

Релиз ядра Linux 6.7

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.7. Среди наиболее заметных изменений: интеграция ФС Bcachefs, прекращение поддержки архитектуры Itanium, возможность работы Nouvea с прошивками GSP-R, поддержка TLS-шифрования в NVMe-TCP, возможность использования исключений в BPF, поддержка futex в io_uring, оптимизация производительности планировщика fq (Fair Queuing), поддержка расширения TCP-AO (TCP Authentication Option) и возможность ограничения сетевых соединений в механизме защиты Landlock.

В новую версию принято 18405 исправлений от 2066 разработчиков,
размер патча — 72 МБ (изменения затронули 13467 файлов, добавлено 906147 строк кода, удалено 341048 строк). В прошлом выпуске было 15291 исправлений от 2058 разработчиков, размер патча — 39 МБ. Около 45% всех представленных в 6.7 изменений связаны с драйверами устройств, примерно 14% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 5% — с файловыми системами и 3% c внутренними подсистемами ядра.

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

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В состав ядра принят код файловой системы 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 появился упрощённый режим квот, который позволяет добиться более высокой производительности за счёт отслеживания экстентов только в том подразделе, в котором они созданы, что существенно упрощает вычисления и повышает производительность, но не позволяет учитывать экстенты, совестно используемые в нескольких подразделах.
    • В Btrfs добавлена новая структура данных «stripe tree», подходящая для логического маппинга экстентов в ситуациях, когда физических маппинг не совпадает на разных устройствах. Структура пока задействована в реализациях RAID0 и RAID1 для зонированных блочных устройств. В будущем данную структуру планируют использовать и в RAID более высокого уровня, что позволит решить ряд имеющихся в текущей реализации проблем.
    • В файловой системе Ceph реализована поддержка маппинга идентификаторов пользователей примонтированных файловых систем, применяемого для сопоставления файлов определённого пользователя на примонтированном чужом разделе с другим пользователем в текущей системе.
    • В efivarfs добавлена возможность указания uid и gid при монтировании для предоставления возможности изменения переменных UEFI процессами, запущенными без прав root.
    • В exFAT добавлены ioctl-вызовы для чтения и изменения атрибутов ФС. Добавлена обработка каталогов нулевого размера.
    • В F2FS реализована возможность использования блоков размером 16K.
    • Механизм автомонтировния autofs переведён на использование нового API монтирования разделов.
    • В OverlayFS предложены опции монтирования «lowerdir+» и «datadir+». Добавлена поддержка вложенного монтирования OverlayFS с xattrs.
    • В XFS проведена оптимизация нагрузки на CPU в коде распределения блоков в реальном времени. Обеспечена возможность одновременного выполнения операций чтения и FICLONE.
    • Код EXT2 переведён на использование фолиантов страниц памяти (page folios).
  • Память и системные сервисы
    • Прекращена поддержка архитектуры ia64, применяемой в процессорах Intel Itanium, продажи которых были полностью прекращены в 2021 году. Процессоры Itanium были представлены компанией Intel в 2001 году, но архитектура ia64 не выдержала конкуренции с AMD64, главным образом из-за более высокой производительности AMD64 и более гладкого перехода с 32-разрядных процессоров x86. В итоге, интересы Intel сместились в пользу процессоров x86-64, а уделом Itanium оставались серверы HP Integrity, приём заказов на которые был прекращён три года назад. Код для поддержки ia64 удалён из ядра в основном из-за длительного отсутствия сопровождения данной платформы, при этом Линус Торвальдс
      выразил готовность вернуть поддержку ia64 в ядро, но только если найдётся сопровождающий, который продемонстрирует качественное сопровождение данной платформы вне основного ядра как минимум в течение года.

    • Добавлен параметр командой строки ядра «ia32_emulation», позволяющий на стадии загрузки включать и отключать поддержку эмуляции 32-разрядного режима в ядрах, собранных для архитектуры x86-64. С практической стороны новый параметр позволяет собирать ядро с поддержкой совместимости с 32-разрядными приложениями, но по умолчанию отключать этот режим для снижения вектора атаки на ядро, так как API для обеспечения совместимости менее протестировано, чем основные интерфейсы ядра.
    • Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). В новой версии осуществлён переход на использование выпуска Rust 1.73 и предложен набор привязок для работы с рабочими очередями (workqueues).
    • Предоставлена возможность использования механизма binfmt_misc для добавлена поддержки новых форматов исполняемых файлов (например, для запуска скомпилированных приложений на Java или Python) внутри отдельных непривилегированных пространств имён (namespace).
    • В cgroup-контроллере cpuset, позволяющем управлять задействованием ядер CPU при выполнении задачи, обеспечено разделение на локальное и удалённое секционирование (remote partition), которые отличаются тем, является ли родительский cgroup корректной корневой секцией или нет. В cpuset также добавлены новые настройки «cpuset.cpus.exclusive» и «cpuset.cpus.excluisve.effective» для эксклюзивной привязки к CPU.
    • В подсистеме BPF реализована поддержка исключений, которые обрабатываются как неотложный выход из BPF-программы с возможностью безопасного раскручивания кадров стека. Кроме того, в BPF-программах разрешено использования указателей kptr в привязке к CPU.
    • В подсистему io_uring добавлена поддержка операций с futex-ами, а также реализованы новые операции: IORING_OP_WAITID (асинхронная версия waitid), SOCKET_URING_OP_GETSOCKOPT (вариант getsockoptand), SOCKET_URING_OP_SETSOCKOPT (вариант setsockopt) и IORING_OP_READ_MULTISHOT (многократные операции чтения, не прекращающиеся пока есть данные или не заполнен буфер).
    • Добавлена реализация легковесных односвязных FIFO-очередей, требующих спин-блокировки только для удаления из очереди в контексте процесса и обходящейся без спин-блокировки для атомарного добавления в очередь в любом контексте.
    • Добавлен кольцевой буфер «objpool» c масштабируемой реализацией высокопроизводительной очереди для выделения и возвращения объектов.
    • Добавлена начальная часть изменений для реализации нового API futex2, который отличается более высокой производительностью на NUMA-системах, поддерживает размеры, отличные от 32 бит, и может использоваться вместо мультиплексированного системного вызова futex().
    • Для архитектур ARM32 и S390x добавлена поддержка актуального набора (cpuv4) инструкций BPF.
    • Для архитектуры RISC-V реализована возможность использования доступного в Clang 17 режима проверки Shadow-Call Stack, предназначенного для защиты от перезаписи адреса возврата из функции в случае переполнения буфера в стеке. Суть защиты в сохранении после передачи управления функции адреса возврата в отдельном «теневом» стеке и извлечении данного адреса перед выходом из функции.
    • В механизм слияния идентичных страниц памяти (KSM: Kernel Samepage Merging) добавлен новый умный режим сканирования страниц памяти, который отслеживает неудачно отсканированные страницы и снижает интенсивность их повторного сканирования. Для включения нового режима добавлена настройка /sys/kernel/mm/ksm/smart_scan.
    • Добавлена новая ioctl-команда PAGEMAP_SCAN, которая при использовании с userfaultfd(), позволяет определять факты записи в определённый диапазон памяти. Новая возможность, например, может использоваться в системе для сохранения и восстановления состояния процессов CRIU или в игровых античит-системах.
    • В сборочной системе при наличии компилятора Clang по умолчанию включена сборка примеров использования подсистемы perf, написанных в виде BPF-программ.
    • Удалён старый слой videobuf, использовавшийся для управления фреймвбуферами в медиаподсистеме и более 10 лет назад заменённый на новую реализацию videobuf2.
  • Виртуализация и безопасность
    • В подсистему fscrypt добавлена возможность шифрования данных блоками, размером меньше, чем размер блока в файловой системе. Подобное может потребоваться для задействования аппаратных механизмов шифрования, поддерживающих только небольшие блоки (например, контроллеры UFS, поддерживающие только размер блока 4096, смогут использоваться с ФС с размером блока 16K).
    • В подсистему «iommufd«, позволяющую управлять таблицами страниц памяти ввода/вывода IOMMU (I/O Memory-Management Unit) из пространства пользователя через файловые дескрипторы, добавлено отслеживание не ещё сброшенных из кэша данных (dirty) для операций DMA, что необходимо для определения памяти с несброшенными данными при миграции процессов.
    • В механизм Landlock, позволяющий ограничить взаимодействие группы процессов с внешним окружением, добавлена поддержка определения правил управления доступом к TCP-сокетам. Например, можно создать правило, разрешающее только обращение по сетевому порту 443 для установки HTTPS-соединений.
    • В подсистему AppArmor добавлена возможность управления доступом к механизму io_uring и созданию пространств имён идентификаторов пользователя (user namespaces), что позволяет выборочно разрешать доступ к данным возможностям только определённым процессам.
    • Добавлен API для аттестации виртуальных машин для подтверждения целостности процесса их загрузки.
    • На системах LoongArch реализована поддержка виртуализации с использованием гипервизора KVM.
    • При использовании гипервизора KVM на системах RISC-V появилась поддержка расширения Smstateen, блокирующего обращение виртуальной машины к регистрам CPU, которые явно не поддерживаются гипервизором. Также добавлена поддержка использования в гостевых системах расширения Zicond, позволяющего использовать некоторые условные целочисленные операции.
    • В выполняемых под управлением KVM гостевых системах на базе архитектуры x86 разрешено использование до 4096 виртуальных CPU.
  • Сетевая подсистема
    • В драйвер NVMe-TCP (NVMe over TCP), позволяющий обращаться к NVMe-накопителям по сети (NVM Express over Fabrics), используя протокол TCP, добавлена поддержка шифрования канала передачи данных с использованием TLS (используется KTLS и фоновый процесс в пространстве пользователя tlshd для согласования соединения.
    • Проведена оптимизация производительности планировщика пакетов fq (Fair Queuing), позволившая поднять пропускную способность на 5% при больших нагрузках в тесте tcp_rr (TCP Request/Response) и на 13% при неограниченном потоке UDP-пакетов.
    • В протокол TCP добавлена опциональная возможность использования временных меток (TCP TS) с микросекундной точностью (RFC 7323), что позволяет более точно оценивать задержки и создавать более продвинутые модули управления перегрузкой. Для включения можно использовать команду «ip route add 10/8 … features tcp_usec_ts».
    • В TCP-стек добавлена поддержка расширения TCP-AO (TCP Authentication Option, RFC 5925), которое даёт возможность верифицировать TCP-заголовки по MAC-кодам (Message Authentication Code), используя более современные алгоритмы HMAC-SHA1 и CMAC-AES-128 вместо ранее доступной опции TCP-MD5 на базе устаревшего алгоритма MD5.
    • Добавлен новый тип виртуальных сетевых устройств «netkit», логика передачи данных в которых задаётся при помощи BPF-программы.
    • В KSMBD, работающую на уровне ядра реализацию SMB-сервера, добавлена поддержка преобразования имён файлов, содержащих суррогатные пары составных символов.
    • В NFS улучшена реализация потоков с RPC-сервирвисами. Добавлена поддержка делегирования записи (для NFSv4.1+). В NFSD добавлена поддержка netlink-обработчика rpc_status. Улучшена поддержка клиентов NFSv4.x при повторном экспортировании в knfsd.
  • Оборудование
    • В модуль ядра Nouveau добавлена начальная поддержка прошивок GSP-RM, которые используется в GPU NVIDIA RTX 20+ для выноса операций инициализации и управления GPU на сторону отдельного микроконтроллера GSP (GPU System Processor). Поддержка GSP-RM позволяет драйверу Nouveau работать через обращение к прошивке, вместо прямого программирования операций взаимодействия с оборудованием, что значительно упрощает добавление поддержки новых GPU NVIDIA благодаря использованию уже готовых вызовов для инициализации и управления энергопотреблением.
    • В драйвере AMDGPU реализована поддержка
      GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 и DML2. Улучшена поддержка бесшовной загрузки (без мерцания при переключении видеорежима).

    • В драйвере i915 реализована поддержка чипов Intel Meteor Lake и добавлена начальная реализация Intel LunarLake (Xe 2). .
    • Добавлена поддержка ARM SoC: Qualcomm Snapdragon 720G (применяется в смартфонах Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (применяется в маршрутизаторах и NAS),
    • Добавлена поддержка смартфона Fairphone 5 и ARM-плат Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • Добавлена поддержка RISC-V плат Milk-V Pioneer и Milk-V Duo.
    • Добавлена поддержка звуковых интерфейсов ноутбуков HUAWEI, поставляемых с CPU AMD. Добавлена поддержка дополнительных громкоговорителей, устанавливаемых на ноутбуки Dell Oasis 13/14/16. Добавлена поддержка встроенных громкоговорителей ASUS K6500ZC. Добавлена поддержка индикатора отключения звука на ноутбуках HP 255 G8 и G10. Добавлена поддержка звуковых драйверов acp6.3. Добавлена поддержка профессиональных интерфейсов звукозаписи Focusrite Clarett+ 2Pre и 4Pre.
    • Добавлена поддержка асимметричных каналов передачи, добавленных в спецификации USB4 v2 (120/40G).

Одновременно латиноамериканский Фонд свободного ПО сформировал
вариант полностью свободного ядра 6.7Linux-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.

Источник: https://www.opennet.ru/opennews/art.shtml?num=60398 Источник.