Гао Сян (Gao Xiang) из компании Huawei представил (https://lkml.org/lkml/2018/5/31/306) в списке рассылки разработчиков ядра Linux новую файловую систему EROFS (Extendable Read-Only File System), разработанную для использования на разделах, доступных в режиме только для чтения. В Huawei ФС EROFS рассчитывают использовать на монтируемых в режиме только для чтения разделов платформы Android.
Мотивом для создания новой ФС стала низкая эффективность работы существующих решений для read-only разделов. По сравнению с Ext4 новая ФС демонстрирует примерно идентичную производительность при выполнении операций последовательного чтения, но в разы обгоняет Ext4 при случайном доступе к данным. Например, при уровне сжатия 4 при тестировании на сервере с жестким диском ФС EROFS обогнала Ext4 в операциях случайного чтения более чем в шесть раз, а при использовании Android-смартфона с Flash почти в три раза. При увеличении уровня сжатия разрыв уменьшается, но параметры выравниваются только к уровням порядка сжатия в 100 раз.
Как и в других read-only ФС структура EROFS существенно упрощена за счёт отбрасывания при реализации некоторых областей метаданных, таких как битовая карта свободных блоков. Основные отличия сводятся к оптимизациям, нацеленным больше на обеспечении высокой производительности, чем на максимальной экономии свободного пространства. EROFS поддерживает хранение данных в сжатом виде, но использует иной подход для хранения сжатых блоков.
В традиционных ФС на основе неупакованных блоков фиксированного размера формируются сжатые блоки, имеющие непредсказуемый произвольный размер. Так как доступ к данным на носителе осуществляется на уровне фиксированных блоков (кластеров), то при чтении сжатых блоков приходится читать и данные с остаточным заполнением до границ блока. Проблема частично решается применением дополнительной буферизации, но в этом случае увеличивается нагрузка на память и отсутствуют точные данные, и так как сжатые блоки не используются напрямую и требуют распаковки не ясно когда именно сжатый блок может потребоваться. Из-за этого буферизация сжатых данных эффективна только при последовательном чтении и приводит к существенному провалу производительности при случайном доступе к данным, который представляет типовую нагрузку в реальных системах.
Для ускорения операций случайного доступа в EROFS реализовано несколько идей:
- Применяются блоки страничного размера, которые могут сохраняться без остаточного заполнения и не требуют буферизации.
- Небольшие данные, расширенные атрибуты (xattr) могут читаться одновременно с метаданными inode.
- Реализованы области совместно используемых расширенных атрибутов (xattr), в которых могут хранится типовые атрибуты, такие как метки SELinux, или слишком большие xattr, не вмещающиеся в inline-блок;
- Метаданные и данные могут смешиваться при хранении;
- При сжатии используется метод, формирующих выходные блоки фиксированного размера (в существующих ФС разбивка на блоки фиксированного рахмера ведётся до сжатия, а после сжатия на выходе получаются блоки разного размера), что позволяет избавиться от траты ресурсов на чтение остаточного заполнения.
- В кластере может сохраняться один или несколько блоков со сжатыми данными. Хранимые данные размещаются в блоках фиксированного размера, но распаковываются в цепочки произвольной длины.
URL: https://lkml.org/lkml/2018/5/31/306
Новость: https://www.opennet.ru/opennews/art.shtml?num=48694