Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Kernels
 Boot 
 Memory 
 File system
 0.01
 1.0 
 2.0 
 2.4 
 2.6 
 3.x 
 4.x 
 5.x 
 6.x 
 Интервью 
 Kernel
 HOW-TO 1
 Ptrace
 Kernel-Rebuild-HOWTO
 Runlevel
 Linux daemons
 FAQ
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 MINIX...2842 
 LD...2730 
 Solaris...2633 
 William Gropp...1895 
 Rodriguez 6...1844 
 C++ Templates 3...1841 
 Trees...1764 
 Kamran Husain...1715 
 Secure Programming for Li...1633 
 Максвелл 5...1589 
 Part 3...1544 
 Stein-MacEachern-> Час...1543 
 Arrays...1523 
 DevFS...1503 
 Ethreal 4...1500 
 Go Web ...1499 
 Максвелл 1...1484 
 FAQ...1456 
 Стивенс 9...1438 
 ffmpeg->tutorial...1419 
 
  01.01.2024 : 3621733 посещений 

iakovlev.org

Ядро 6.6

30.10.2023

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.6. Среди наиболее заметных изменений: новый планировщик задач EEVDF; механизм теневого стека для защиты от эксплоитов; поддержка fs-verity в OverlayFS; реализация квот и xattr в tmpfs; подготовка online fsck в XFS; усилено отслеживание экспорта символов "GPL-only"; поддержка сетевых сокетов в io_uring; рандомизация памяти в kmalloc(); объявлена устаревшей ReiserFS; в Nouveau добавлены примитивы для Vulkan-драйвера NVK.

В новую версию принято 15291 исправлений от 2058 разработчиков, размер патча - 39 МБ (изменения затронули 14844 файлов, добавлено 553359 строк кода, удалено 284012 строк). В прошлом выпуске было 14674 исправлений от 2016 разработчиков, размер патча - 78 МБ. Около 44% всех представленных в 6.6 изменений связаны с драйверами устройств, примерно 17% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 4% - с файловыми системами и 3% c внутренними подсистемами ядра.

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

  • Память и системные сервисы
    • Реализован новый планировщик задач EEVDF (Earliest Eligible Virtual Deadline First), который пришёл на смену планировщику CFS (Completely Fair Scheduler), поставлявшемуся начиная с ядра 2.6.23. Новый планировщик при выборе следующего процесса для передачи выполнения учитывает процессы, которые недополучили процессорных ресурсов или получили незаслуженно много процессорного времени. В первом случае форсируется передача управления процессу, а во втором, наоборот, откладывается. Старый планировщик CFS использовал для определения процессов, требующих отдельного внимания, эвристику и тонкие настройки, в то время как новый планировщик отслеживает их более явно и не требует тонкой настройки. Предполагается, что EEVDF позволит снизить задержки при выполнении задач, с которыми у CFS возникали проблемы с планированием.
    • Внесены изменения в обработку внутренних символов категории "GPL-only", нацеленные на усложнение использования проприетарными модулями GPL-прослоек для обхода ограничений доступа к подсистемам ядра, допускающим обращение только кода под лицензией GPL. В функции symbol_get() для проприетарных модулей запрещён поиск символов, помеченных как GPL-only, и наоборот, GPL-модули не смогут находить символы, экспортируемые проприетарными модулями.
    • Добавлены дополнительные настройки рабочих очередей (unbound workqueue) для повышения эффективности повторного использования процессорного кэша на крупных системах, имеющих несколько кэшей третьего уровня (L3). В состав ядра также включена утилита tools/workqueue/wq_dump.py для проверки текущей конфигурации рабочих очередей.
    • В подсистему io_uring добавлена начальная поддержка операций и команд, специфичных для сетевых сокетов. Добавлен sysctl io_uring_disabled для отключения io_uring на уровне всей системы. В io_uring также значительно ускорен прямой ввод/вывод (Direct I/O) в асинхронном режиме. Прирост пропускной способности и снижение задержек при выполнении операций ввода-вывода после внесения изменений достигает 37%.
    • Для архитектуры PA-RISC реализован JIT-компилятор для BPF.
    • В настройку /sys/devices/system/cpu/smt/control добавлена поддержка числовых параметров, определяющих число потоков, доступных для каждого ядра CPU (ранее поддерживались только значения "on" и "off" для включения и выключения поддержки симметричной многопоточности). Новую возможность можно применять на некоторых процессорах PowerPC, поддерживающих режим горячего включения симметричной многопоточности ("hotplug SMT"), для выборочного включения SMT на определённых ядрах во время работы.
    • Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). Осуществлён переход на использование выпусков Rust 1.71.1 и bindgen 0.65.1. Реализован типаж 'Zeroable'. Добавлены процедурные макросы 'paste!' и '#[derive(Zeroable)]'. Обеспечена совместимость с '#[pin_data]'. Добавлены функции инициализации '{,pin_}init_array_from_fn()' и метод '{,pin_}chain'. Расширены возможности модуля 'types'. Во фреймворк unit-тестирования kunit добавлена возможность запуска тестов из документации Rust.
    • Добавлена подсистема "eventfs", позволяющая существенно снизить потребление памяти в системе трассировки, за счёт избавления от хранения лишних структур, применяемых для представления точек трассировки в файловой системе. Ранее подобные структуры создавались для всех точек трассировки, независимо от использования трассировки. При помощи eventfs подобные структуры могут создаваться динамически, только во время необходимости в них.
    • Расширены возможности утилиты perf.
    • В файл /proc/pid/smaps добавлена информация для диагностики эффективности работы механизма слияния идентичных страниц памяти (KSM: Kernel Samepage Merging).
    • Удалён API Frontswap, позволяющий разместить раздел подкачки в памяти, которую невозможно напрямую адресовать и которая не предоставляет оперативной информации о наличии свободного места. Данный API использовался только в zswap, поэтому решено напрямую использовать данную функциональность в zswap, избавившись от лишних прослоек.
    • Для архитектуры RISC-V добавлена поддержка доступа к счётчикам производительности из пространства пользователя и возможность размещения дампа ядра после сбоя в области за границей 4GB.
    • Добавлена начальная поддержка инструкций ARM SME (Scalable Matrix Extension).
    • Реализована возможность использования отладочных инструментов KDB, KGDB, kcov, KFENCE и KASAN на системах с архитектурой LoongArch.
    • Добавлена поддержка файлов для тестирования ядра в системе непрерывной интеграции GitLab, которая применяется при разработке графических драйверов.
  • Дисковая подсистема, ввод/вывод и файловые системы
    • В файловую систему OverlayFS добавлена поддержка сохранения хэшей fs-verity в расширенном атрибуте (xattr) overlay.verity, что может использоваться для проверки целостности и подлинности файлов в нижних слоях OverlayFS при помощи криптографических хэшей и ключей. Таким образом, в OverlayFS теперь включены все изменения, необходимые проекту Composefs для работы в форме надстройки над ФС OverlayFS и EROFS.
    • В файловой системе XFS проведена подготовка к реализации возможности применения утилиты fsck для проверки и исправления выявленных проблем в online-режиме, без отмонтирования файловой системы. Кроме того, в XFS реализована возможность использования крупных фолиантов (folios) в страничном кэше и добавлены некоторые связанные с этим оптимизации, позволившие заметно поднять производительность для некоторых видов нагрузки.
    • В файловую систему tmpfs добавлена поддержка пользовательских расширенных атрибутов (user xattrs), прямого ввода/вывода и квот, привязанных к пользователю и группе. Стабилизированы смещения на каталоги, что решило проблемы с экспортом tmpfs через NFS.
    • В API управления монтированием для повышения безопасности добавлен флаг FSCONFIG_CMD_CREATE_EXCL, запрещающий совместное использование суперблока в нескольких точках монтирования (запрещает прикрепление одного раздела к нескольким точкам монтирования). В утилите mount для включения данного флага предложена опция "--exclusive".
    • В подсистему VFS добавлена поддержка оперативного изменения параметров c временем доступа и изменения (atime, mtime). Ранее данные о времени отражались с некоторой задержкой, что мешало отслеживанию актуальности данных в кэше в системах, подобных NFS (из-за задержки определения изменений в файле, система могла ошибочно посчитать, что данные в кэше актуальны). Новая возможность доступна для Btrfs, Ext4, tmpfs и XFS.
    • В Btrfs объявлен устаревшим встроенный механизм проверки целостности, включаемый на этапе сборки через параметр BTRFS_FS_CHECK_INTEGRITY. Указанный механизм остался без сопровождения, больше не тестируется и создаёт дополнительную нагрузку на CPU и память. Кроме того, в Btrfs проведена оптимизация производительности нового кода проверки ФС (scrub).
    • В файловой системе Ext4 добавлены периодические проверки обновления суперблока и ускорены операции выделения памяти при дозаписи в конец файла.
    • В подсистему FUSE добавлена поддержка атрибута btime ("birth time"), определяющего время создания inode.
    • Запрещено изменение прав доступа для символических ссылок.
    • Добавлен системный вызов fchmodat2(), который отличается от системного вызова fchmodat() дополнительным аргументом для указания флагов. Из флагов пока поддерживаются только AT_SYMLINK_NOFOLLOW и AT_EMPTY_PATH, позволяющие без обходных путей реализовать в libc-функции fchmodat() запрет разыменования символических ссылок и возможность использования файлового дескриптора при указании пустого пути.
    • В файловой системе EROFS (Extendable Read-Only File System), предназначенной для использования на разделах, доступных в режиме только для чтения, добавлена поддержка алгоритма сжатия Deflate. Для ускорения поиска расширенных атрибутов задействована вероятностная структура bloom filter.
    • Добавлена настройка CONFIG_BUFFER_HEAD, позволяющая собрать ядро без использования структуры buffer_head. При сборке без buffer_head можно использовать блочные устройства и некоторые ФС, например, xfs, btrfs, cramfs, erofs и squashfs.
    • В драйвер блочных устройств ublk, позволяющий вынести специфичную логику на сторону процесса в пространстве пользователя, добавлена поддержка зонированных устройств хранения (разделение на зоны групп блоков или секторов, в которые допускается лишь последовательное добавление данных с обновлением целиком всей группы блоков).
    • Реализация файловой системы ReiserFS переведена из категории поддерживаемых в разряд устаревших (Obsolete). Прекращение поддержки ReiserFS намечено на 2025 год. В качестве причины перевода ReiserFS в разряд устаревших упоминается стагнация в сопровождении данной ФС, нерешённая проблема 2038 года, отсутствие возможностей по обеспечению отказоустойчивости и желание снизить трудозатраты на сопровождение общих для файловых систем изменений, связанных с поддержкой нового API для монтирования, iomap и фолиантов (folios).
    • В NFS-сервере реализован механизм делегирования операций записи для NFSv4, повышающий эффективность кэширования записи файлов для сокращения трафика. Включена поддержка операции READ_PLUS, определённой в NFS 4.2.
    • В файловую систему Ceph добавлена поддержка fscrypt.
  • Виртуализация и безопасность
    • Добавлена реализация механизма Shadow Stack, которая позволяет блокировать работу многих эксплоитов, используя аппаратные возможности процессоров Intel для защиты от перезаписи адреса возврата из функции в случае переполнения буфера в стеке. Суть защиты в том, что после передачи управления функции, адреса возврата сохраняются процессором не только в обычном стеке, но и в отдельном "теневом" стеке, который не может быть изменён напрямую. Перед выходом из функции адрес возврата извлекается из теневого стека и сверяется с адресом возврата из основного стека. Несовпадение адресов приводит к генерации исключения, блокирующего ситуации, когда эксплоиту удалось перезаписать адрес в основном стеке. Аппаратный теневой стек поддерживается только в 64-разрядных сборках, а в 32-разрядных сборках применяется его программная эмуляция.
    • Добавлена поддержка сборки компилятором Clang с включённым режимом защиты CFI (Control Flow Integrity), блокирующим нарушения нормального порядка выполнения (control flow) в результате применения эксплоитов, изменяющих хранимые в памяти указатели на функции.
    • Для архитектуры RISC-V включена рандомизация размещения ядра в памяти при загрузке.
    • В системный вызов seccomp() добавлен флаг SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP, позволяющий обрабатывать события из отслеживаемых процессов в синхронном режиме для более эффективной работы планировщика задач.
    • В функции kmalloc() обеспечена рандомизация slab-кешей, усложняющая эксплуатацию уязвимостей в ядре.
    • Из опций, связанных с включением системы принудительного контроля доступа SELinux, убрано упоминание Агентства национальной безопасности США. Так как проект уже 20 лет развивается под крылом сообщества и сопровождается независимыми мэйнтейнерами решено перейти на использование имени "SELinux" вместо "NSA SELinux" в комментариях и документации в Kconfig (например, пояснение к сборочному параметру SECURITY_SELINUX изменено с "NSA SELinux Support" на "SELinux Support").
    • В системный вызов userfaultfd() добавлена операция UFFDIO_POISON, позволяющая пометить страницы памяти "отравленными" (poisoned), что может быть использовано для переноса повреждённых страниц памяти при миграции виртуальных машин с одной системы на другую.
    • В подсистему VFIO добавлен новый символьный интерфейс (/dev/vfio/devices/vfioX) для управления устройствами VFIO, позволяющий пользователю напрямую открыть файл с устройством, без обращения к устаревшему групповому интерфейсу /dev/vfio/$groupID.
    • В сервере NFS прекращена поддержка устаревших типов шифрования Kerberos, использующих алгоритмы DES и 3DES.
    • При запуске в окружении гипервизора Hyper-V добавлена поддержка гостевых систем, защищённых при помощи технологии AMD SEV-SNP (Secure Nested Paging) и Intel TDX (Trusted Domain Extensions).
    • При сборке ядра в режиме "W=1" в компиляторе по умолчанию включены предупреждения "-Wformat-overflow", "-Wformat-truncation", "-Wstringop-overflow" и "-Wrestrict". Для любых сборок включено предупреждение "-Wenum-conversion".
  • Сетевая подсистема
    • Реализация семейства адресов AF_XDP (eXpress Data Path) расширена возможностью работы с пакетами, хранимыми в нескольких буферах (например, в одном буфере может находиться заголовок пакета, а во втором данные, или в цепочке из нескольких буферов могут размещаться большие jumbo-кадры Ethernet). Программы, использующие сокеты AF_XDP, теперь могут принимать и передавать пакеты сразу из нескольких буферов.
    • В подсистему BPF добавлена поддержка дефрагментации пакетов IPv4 и IPv6, а также возможность фильтрации фрагментированных пакетов.
    • В BPF добавлен новый обработчик update_socket_protocol, позволяющий BPF-программам изменять запрошенный протокол для новых сокетов. Например, BPF программа может прозрачно заменить протокол TCP на MPTCP (multipath TCP) для оптимизации трафика приложения. В BPF также добавлена поддержка управления маршрутизацией пакетов через разные потоки в MPTCP.
    • Снят признак экспериментальной разработки с модуля ksmbd, предлагающего работающую на уровне ядра реализацию файлового сервера на базе протокола SMB3. Добавлена поддержка объединения операций чтения (запросы "read compound").
  • Оборудование
    • В DRM-подсистему (Direct Rendering Manager) внесены изменения, необходимые для эффективной работы открытого драйвера NVK с реализацией графического API Vulkan для видеокарт NVIDIA. Изначально DRM-драйвер Nouveau был рассчитан на реализацию OpenGL, поэтому в нём не хватает примитивов, необходимых для эффективной работы Vulkan-драйверов, например, поддержки синхронизированных объектов и управления виртуальным адресным пространством.
    • В драйвере AMDGPU реализована поддержка SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 и GFX 9.4.3. Переработан код загрузки прошивок PSP (Platform Security Processor). Расширена поддержка технологии адаптивной синхронизации FreeSync (добавлена поддержка Freesync Panel Replay V2).
    • В драйвере i915 продолжена реализация поддержки чипов Intel Meteor Lake. Улучшена поддержка технологии защиты от копирования HDCP (High-bandwidth Digital Content Protection). Переработан код для взаимодействия с дисплеем.
    • Из Kconfig убраны опции отключения загрузки микрокода на этапе сборки - MICROCODE_INTEL и MICROCODE_AMD. Ядро теперь всегда собирается с кодом загрузки микрокода для систем x86, но фактическую загрузку микрокода можно отключить, указав параметр ядра 'dis_ucode_ldr'.
    • В звуковую подсистему добавлена возможность управления звуковыми устройствами, подключёнными через подсистему IIO (Industrial I/O).
    • Добавлена поддержка звуковых интерфейсов Intel LunarLake, Intel ArrowLake и AMD ACP5x, кодеков Cirrus Logic CS42L43, Realtek RT1017 и TI TAS2781, а также усилителей Cirrus Logic CS35L56 и winic aw88261. Добавлена поддержка ASoC AMD Van Gogh.
    • Добавлен драйвер USB MIDI 2.0 Gadget, эмулирующий интерфейс USB MIDI 2.0, привязанный к устройству ALSA UMP rawmidi.
    • Добавлена поддержка Ethernet-контроллеров Broadcom ASP 2.0 и Marvell 88Q2XXX.
    • Добавлена поддержка панелей Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 и EDT ET028013DMA, дисплейных контроллеров Loongson и контроллеров сенсорных экранов Azoteq IQS7222D/IQS7210A/7211A.
    • Добавлена поддержка ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7)
    • Добавлена поддержка ARM-плат Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3, Radxa ROCK 4SE.

Одновременно латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 6.6 - Linux-libre 6.6-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В выпуске 6.6 обновлён код чистки блобов в различных драйверах и подсистемах, например, в драйверах TI gigabit RU ethernet, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-audio и aw88261 SoC. Проведена чистка имён блобов в dts-файлах для архитектуры Aarch64. Удалены блобы в новых драйверах ivpu, в bluetooth-драйверах, в драйвере к сенсорным экранам и в кодировщике/декодировщике Qualcomm Venus V4L2.





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

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

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