Релиз ядра 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.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.
Источник: http://www.opennet.ru/opennews/art.shtml? num=60398
© OpenNet