Найден способ одним патчем в разы ускорить работу в Linux файловой системы,

созданной Microsoft

В разрабатываемое ядро Linux 6.15 принят патч, многократно ускоряющий процедуру удаления крупных файлов в exFAT при монтировании накопителя с параметром "discard". Набор исправлений предложен инженером компании Sony. Файловая система exFAT была разработана Microsoft для использования на флеш-накопителях в качестве замены морально устаревшей FAT.

В Linux 6.15 улучшен драйвер exFAT

В драйвер файловой системы exFAT для операционных систем семейства Linux внесены правки, позволившие значительно повысить скорость удаление данных с разделов накопителя, которые размечены с ее использованием.

Патч к драйверу подготовлен сотрудником Sony Юэ Чжан Мо (Yuezhang Mo) и уже принят в основную ветку разрабатываемой версии ядра Linux 6.15, релиз которого ожидается в конце мая – начале июня 2025 г.

Наиболее серьезный прирост производительности благодаря патчу будет заметен в работе с файлами большого размера – в несколько десятков гигабайт и более. При этом раздел с exFAT должен быть примонтирован с параметром “discard”.

Применение параметра монтирования “discard” сообщает Linux о том, что ему следует допускать выполнение команды “trim” по запросу файловой системы. Эта команда, в свою очередь, позволяет принудительно очистить ячейки памяти накопителя, которые ранее были отведены под теперь уже удаленные данные, а не только исключить ссылки на них в таблице размещения файлов, как это делается обычно.

Ранее актуальный драйвер exFAT для Linux отправлял запросы “discard” накопителям на каждый подлежащий освобождению кластер стираемого с накопителя файла, что могло приводить к снижению скорости выполнения операции удаления и временному повышению времени отклика на команды пользователя. Набор изменений, принятых в Linux 6.15, заставляет обрабатывать кластеры группами, что благоприятно сказывается на производительности работы файловой системы.
В ядро Linux 6.15 приняты значительные оптимизации exFAT
В ядро Linux 6.15 приняты значительные оптимизации exFAT
Приведенные Юэ Чжаном Мо данные свидетельствуют о том, что выигрыш в производительности на практике может оказаться многократным. Так, в проведенном им тесте удаление файла размером 80 ГБ с использованием исходной версии драйвера exFAT занимало почти пять минут, а после оптимизации кода этот показатель упал до менее чем двух секунд.

Другой полезный коммит

Правки к драйверу exFAT, предложенные Юэ Чжаном Мо, приняты в ядро Linux не в первый раз. В декабре 2022 г. в состав Linux 6.2 была включена оптимизированная программистом Sony версия соответствующего драйвера, в которой был сокращен повторный обход записей каталога в файловой системе, что позволило добиться повышения производительности exFAT – за счет снижения нагрузки на центральный процессор.

Благодаря набору исправления Юэ Чажана Мо существенно возросла скорость создания файлов и каталогов, в особенности при использовании «слабых» процессоров. В тестах, проведенных разработчиком на платформе NPX i.MX6 с MicroSD-картой четвертого класса, прирост составил от 14,40% до 57,42%, в зависимости от количества создаваемых файлов.

Что такое exFAT и зачем она нужна

exFAT (Extended FAT, «расширенная FAT») – проприетарная файловая система, разработанная Microsoft и предназначенная для SD-карт и USB-накопителей. Максимальный теоретический размер файла в ней по сравнению с предшественницей – FAT32 – был расширен с 4 ГБ до 16 ЭБ (эксабайт). Кроме того, было устранено ограничение на максимальный размер раздела в 32 ГБ.

Впервые exFAT была представлена в ОС Windows Embedded CE 6.0 для встраиваемых устройств, а позднее заработала в настольных версиях Windows (Vista SP 1 и XP SP2).

В 2009 г. Microsoft начала лицензировать exFAT для сторонних компаний. Производители потребительской электроники в зависимости от типа выпускаемого устройства должны были либо выплатить корпорации разовый взнос в размере $300 тыс., либо выплачивать отчисления с каждого проданного устройства, использующего данную файловую систему. Среди компаний, лицензировавших exFAT: Canon, Sandisk, Samsung, Sony, Sanyo и Sharp и многие другие (всего более сотни).

Полноценная официальная поддержка exFAT в Linux на тот момент не могла быть реализована ввиду проприетарного характера файловой системы. Поэтому пользователям приходилось загружать сторонние драйверы, чтобы иметь возможность подключать флеш-накопители большой емкости к своим ПК.

Драйвер exFAT для Linux существовал в виде патча ядра, однако он обеспечивал поддержку файловой системы исключительно в режиме чтения. Помимо этого, существовала реализация драйвера для подсистемы FUSE (позволяет монтировать файловые системы непривилегированным пользователям).

В августе 2013 г. собственную реализацию драйвера под свободной лицензией GPL опубликовала компания Samsung, однако ее код не был включен в состав ядра Linux в связи с опасениями относительно возможных патентных претензий со стороны Microsoft.

В августе 2019 г. Microsoft опубликовала спецификации на файловую систему exFAT на своем официальном сайте и пообещала поспособствовать добавлению соответствующего драйвера в ядро Linux.

После этого в ноябре 2019 г. в Linux 5.4 появилась начальная поддержка exFAT, а в Linux 5.7, который вышел весной 2020 г., она стала полноценной.

Источник

Комментарии

  • 2 апр 14:58
    Отличная новость. Для примера, если в Ventoy флешку копировать образы, то в линукс копирование происходило намного медленнее, чем аналогичное копирование из Windows. Ventoy как раз делает раздел, куда кидаешь ISO-шки систем форматированным в exFat.
  • 4 апр 15:51
    Всего лишь - в части удаления на носителях с exFAT!
    Это - что ни на есть - экслкюзивная осоенность нового ядра Linux, которые, к слову, выходят с завидной периодичностью.
    Так к чему таки павсные названия и преамбулы?
    Зачем вводить человеков в заблуждение?
    Пиар?
  • 4 апр 15:54
    Если поиграться с кэшим, то можно добиться "скорости как в Винде".
    А по концу - всё так же.
  • 4 апр 16:33
    Я бы так не сказал. У меня дуалбут убунта-мате, винда 10 и винда 11. Делал мультифлешку, вначале забросил из винды (не ради тестов каких, нужна была) разных образов на 64 гигушку. Потом ушел в линукс, тут вдруг вспомнил, что забыл образ Стрельца добавить. Так в линукс образ минут 10 копировался, начинал шустро, а потом всё медленнее и медленнее. Флешку не вынимал, так в десятке раз 10 быстрее скопировалсь образы примерно такого же веса. Гуглил по теме - проблема не чисто моя, весьма актуальная, рецептов море... Но толку мало. Да и не перебирал я их. На ExFat в лине копирование как черепаха. Посмотрим что с новым ядром будет. Вкосячу через Ukuu ядро, погляжу скорость.
  • 4 апр 20:04
    В ядре 6.15 всего лишь удаление будет работать быстрее (в разы).
    Видимо всё остальное - также, ... к сожалению.
    И да, в Лине копирование на флэхи и т.п. - тот ещё квест.
    Ну, что есть, то есть.
    ...
    Я всё-таки рекомендую поиграться с кэшем (в файле /etc/sysctl.conf):
    #изменить_строки:
    vm.dirty_bytes = 2097152
    vm.dirty_background_bytes = 2097152
    #или
    vm.dirty_bytes = 4194304
    vm.dirty_background_bytes = 4194304
    #остальное_закоментить.
  • 4 апр 20:11
    >> Ventoy
    Моя любимая прога.
    У меня на на вентоевской флэхе лежит 20 исошников.
  • 4 апр 20:30
    Георгий, и моя. Засек ее и протестировал как только вышла. После этого сразу забыл все виндовые руфусы или линукс консольные dd. Мультифлешка под ventoy и под legasy и uefi запустится, и не надо плодить флешки отдельно под старые компьютеры и компа с современными UEFI BIOS. И это круто!