После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.13. Среди наиболее заметных изменений: режим ленивого вытеснения в планировщике задач, поддержка атомарной записи в XFS и Ext4, механизм «multigrain timestamps», адаптивный режим включения полинга в сетевой подсистеме, возможность сборки с оптимизациями AutoFDO, поддержка механизма защиты ARM65 Guarded Control Stack, изоляция виртуальных машин при помощи расширения ARM CCA, раздельные стеки в BPF, удаление ReiserFS, драйвер virtual-cpufreq, netlink API net-shaper, режим монтирования tmpfs учёта регистра символов, поддержка POSIX-расширений в SMB3, драйвер AMD Cache Optimizer.
В новую версию принято 14172 исправлений от 2086 разработчиков, размер патча — 46 МБ (изменения затронули 15375 файлов, добавлено 598707 строк кода, удалено 406294 строк). В прошлом выпуске было 14607 исправлений от 2167 разработчиков, размер патча — 37 МБ. Около 52% всех представленных в 6.13 изменений связаны с драйверами устройств, примерно 13% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 4% — с файловыми системами и 3% c внутренними подсистемами ядра.
Основные новшества в ядре 6.13:
- Дисковая подсистема, ввод/вывод и файловые системы
- Добавлен механизм «multigrain timestamps», позволяющий получать информацию о времени изменения или доступа к файлам c более чем с миллисекундой точностью, но без негативного влияния на производительность. Повышение точности меток приводит к дополнительным накладным расходам из-за увеличения интенсивности записи метаданных на диск, поэтому в предложенной реализации более точные метки создаются не для всех файлов, а только для тех, для которых процессы запрашивают подобные метки через вызов getattr().
- Добавлена поддержка атомарных операций записи, при которых запись данных, размер которых превышает размер сектора, осуществляется атомарно на устройствах хранения, предоставляющих подобную возможность. В настоящее время атомарная запись реализована для XFS, Ext4 в режиме O_DIRECT (Direct I/O) и md RAID 0/1/10.
- Предложен новый механизм подсчёта ссылок для файлов, обеспечивающий прирост производительности на 3-5% в рабочих нагрузках, имеющих более 255 потоков.
- Удалена реализация файловой системы ReiserFS, которая в позапрошлом году была объявлена устаревшей.
- Добавлен sysctl-параметр «fs.dentry-negative» для выставления в VFS политики очистки записей «dentry» (внутреннее представление элементов каталогов) после удаления связанных с ними файлов. Для каких-то видов нагрузки оптимальнее оставлять подобные записи об удалённых файлах, а для каких-то — удалять, поэтому в ядре предоставлена возможность выбора (по умолчанию «dentry» автоматически не удаляются).
- В системный вызов statmount() добавлен флаг STATMOUNT_OPT_ARRAY для возвращения списка опций файловой системы в виде массива из строк, завершающихся нулевым символом и не использующих экранирование «\000». Добавлена поддержка возвращения подтипа ФС (fs_subtype, для определения использования FUSE), опций безопасного монтирования и исходного суперблока (sb_source).
- В OverlayFS предоставлена возможность указания слоёв через файловые дескрипторы, а не имена файловых путей.
- В файловую систему tmpfs добавлена опция монтирования «casefold» для работы без учёта регистра символов и опция «strict_encoding» для блокирования создания файлов с именами, содержащими некорректные символы UTF-8.
- Предложен новый набор системных вызовов для управления расширенными атрибутами файлов: setxattrat(), getxattrat(), listxattrat() и removexattrat(). В отличие от системных вызовов setxattr(), getxattr(), listxattr() и removexattr() новые варианты требуют указания файлового дескриптора каталога, относительно которого осуществляется поиск файлового пути.
- В Btrfs добавлена ioctl-операция BTRFS_IOC_SUBVOL_SYNC_WAIT, включающая ожидание завершения очистки подразделов, что позволяет выполнить команду «btrfs subvolume sync» непривилегированным пользователем, не имеющим доступа к ioctl SEARCH_TREE (полезно в приложениях резервного копирования, очищающих подразделы). Добавлена ioctl-операция ENCODED_READ для чтения через io_uring закодированных данных, например, для чтения напрямую сжатых экстентов без распаковки. Продолжена работа по переходу на использование фолиантов страниц памяти (page folios). Сокращено возникновение конкурирующих блокировок («lock contention») при поиске встроенных обратных ссылок и при переборе буферов экстентов. Повышена эффективность сжатия карты экстентов.
- В файловой системе EROFS (Extendable Read-Only File System), предназначенной для использования на разделах, доступных в режиме только для чтения, реализована возможность использования в системном вызове lseek() опций SEEK_HOLE и SEEK_DATA.
- В F2FS добавлена поддержка отражения устройств («device aliasing»), позволяющая временно зарезервировать область в F2FS для использования части блочного устройства в другой ФС. После завершения внешней операции зарезервированную область можно вернуть в F2FS. Например, можно создать ФС командой «mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb», после чего содержимое устройства /dev/vdc будет зарезервировано и отражено в файл vdc.file и раздел /dev/vdc можно использовать для своих нужд, например, отформатировать под другую ФС. Для возвращения зарезервированного содержимого достаточно удалить файл vdc.file.
- В XFS включена поддержка квот для realtime-устройств. Добавлена поддержка директории с метаданными (metadata directory), в которой размещаются все inode с метаданными.
- В механизме FUSE включена возможность динамического изменения максимального числа страниц (FUSE_MAX_MAX_PAGES), используя «sysctl fs.fuse.max_pages_limit». В работе задействованы фолианты страниц памяти (page folios).
- В SMB реализована поддержка POSIX-расширений для SMB3, необходимых для хранения специальных типов файлов, таких как fifo, файлы устройства и символические ссылки. Добавлена возможность монтирования раздела с альтернативным паролем, применяемым при ротации паролей. Добавлена новая опция монтирования «cifs.upcall» для определения пространства имён. Обеспечено распознавание файлов символьных и блочных устройств, созданных в Windows NFS Server. Добавлена поддержка символических ссылок в стиле WSL (Windows Subsystem for Linux).
- Файловые системы UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS и ECRYPTFS переведены на использование нового API монтирования разделов.
- Файловые системы и ECRYPTFS, UFS и NILFS2 переведены на использование фолиантов страниц памяти (page folios).
- Память и системные сервисы
- В планировщике реализована модель ленивого вытеснения задач (PREEMPT_LAZY, lazy preemption), которая соответствует модели полного вытеснения («full preemption») для realtime-задач (RR/FIFO/DEADLINE), но задерживает вытеснение обычных задач (SCHED_NORMAL) до границы тика. Указанная задержка приводит к сокращению случаев вытеснения держателей блокировок, что позволяет приблизить производительность к конфигурациям, использующим модель добровольного вытеснения (voluntary preemption). Таким образом, новая модель позволяет сохранить возможности полного вытеснения в отношении realtime-задач, но сводит к минимуму проседание производительности для обычных задач. Кроме того, новая модель упрощает логику операций вытеснения задач в ядре, благодаря исключению из процесса планирования обработчиков, находящихся в других компонентах ядра (вне планировщика задач).
- При сборке компилятором Clang предоставлена возможность использования оптимизаций
Источник: opennet.ru
