После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.7. Среди наиболее заметных изменений: интеграция ФС Bcachefs, прекращение поддержки архитектуры Itanium, возможность работы Nouveau с прошивками 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 внутренними подсистемами ядра.
Основные новшества в ядре 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).
- В состав ядра принят код файловой системы Bcachefs, в которой предпринята попытка добиться уровня производительности, надёжности и масштабируемости, свойственного XFS, в сочетании с
- Память и системные сервисы
- Прекращена поддержка архитектуры 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.
- Прекращена поддержка архитектуры ia64, применяемой в процессорах Intel Itanium, продажи которых были полностью прекращены в 2021 году. Процессоры Itanium были представлены компанией Intel в 2001 году, но архитектура ia64 не выдержала конкуренции с AMD64, главным образом из-за более высокой производительности AMD64 и более гладкого перехода с 32-разрядных процессоров x86. В итоге, интересы Intel сместились в пользу процессоров x86-64, а уделом Itanium оставались серверы HP Integrity, приём заказов на которые был прекращён три года назад. Код для поддержки ia64 удалён из ядра в основном из-за длительного отсутствия сопровождения данной платформы, при этом Линус Торвальдс
- Виртуализация и безопасность
- В подсистему 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).
- Добавлена поддержка асимметричных каналов передачи, добавленных в спецификации USB4 v2 (120/40G).
- Добавлена поддержка 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.
Одновременно латиноамериканский Фонд свободного ПО сформировал
вариант полностью свободного ядра 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.