Гао Сян (Gao Xiang) из компании Huawei представил в списке рассылки разработчиков ядра 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 реализовано несколько идей:
