Найден способ одним патчем в разы ускорить работу в 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

Приведенные Юэ Чжаном Мо данные свидетельствуют о том, что выигрыш в производительности на практике может оказаться многократным. Так, в проведенном им тесте удаление файла размером 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 г., она стала полноценной.

37-я международная выставка информационных и коммуникационных технологий Связь-2025 37-я международная выставка информационных и коммуникационных технологий Связь-2025

erid: 2W5zFHRYEHv

Рекламодатель: АКЦИОНЕРНОЕ ОБЩЕСТВО «ЭКСПОЦЕНТР»

ИНН/ОГРН: 7718033809/1027700167153