Реліз ядра Linux 6.13

Після двох місяців розробки Лінус Торвальдс презентував реліз ядра Linux 6.13. Серед найбільш помітних змін: режим лінивого витіснення в планувальнику задач, підтримка атомарного запису в XFS і Ext4, механізм «multigrain timestamps», адаптивний режим включення полінгу в мережній підсистемі, можливість збирання з оптимізаціями AutoFDO, підтримка механізму захисту ARM65 Guarded Control , видалення 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% — з файловими системами і XNUMX% з внутрішніми підсистемами ядра.

Основні нововведення в ядрі 6.13:

  • Дискова підсистема, введення/виведення та файлові системи
    • Доданий механізм «multigrain timestamps», що дозволяє отримувати інформацію про час зміни або доступу до файлів з більш ніж мілісекундою точністю, але без негативного впливу на продуктивність. у запропонованій реалізації більш точні мітки створюються не для всіх файлів, а тільки для тих, для яких процеси запитують подібні мітки через виклик 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

Додати коментар або відгук