Файловая система DwarFS, обеспечивающая очень высокий уровень сжатия
30 ноября 2020 года
Маркус Холланд-Мориц (Marcus Holland-Moritz) из компании Facebook опубликовал первые выпуски файловой системы DwarFS, работающей в режиме "только для чтения" и нацеленной на обеспечение максимального уровня сжатия и сокращения избыточных данных. ФС использует механизм FUSE и работает пространстве пользователя. Код написан на С++ и распространяется под лицензией GPLv3.
По своим задачам DwarFS напоминает такие файловые системы, как SquashFS, cramfs и CromFS, и может применяться для создания Live-образов и сокращения размера архивов с большим числом дубликатов и повторяющихся данных (например, хранилища образов виртуальных машин или коллекции разных версий программ). По скорости обращения к данным DwarFS примерно находится на том же уровне, что и SquashFS, но в разы опережает данную ФС по эффективности сжатия и скорости формирования образа.
Проект был разработан для решения задачи оптимизации хранилища с разными версиями Perl (автор DwarFS принимает участие в поддержании архива CPAN). Вначале была предпринята попытка использования Cromfs для сжатия, но на время сборки образа требовалось слишком много времени, а стабильность оставляла желать лучшего. SquashFS работал стабильно и заметно быстрее формировал образы, но уровень сжатия оказался неприемлемым. Большая часть кода DwarFS была написана ещё в 2013 году. В этом году автор нашёл время для доведению кода до публичного релиза и написание документации. В DwarFS используются библиотеки Boost and Folly. Для хранения метаданных применяется библиотека frozen из Facebook-ветки фреймворка Thrift. Из других зависимостей отмечаются FUSE3 и библиотеки сжатия lz4, zstd и liblzma.
При создании образа, включающего 1139 различных установок Perl, в которых встречается 284 релизов Perl, DwarFS обогнал SquashFS по уровню сжатия в 8 раз, а по скорости создания образа в 4 раза. DwarFS смог ужать тестируемый набор с 47 ГБ до 582 МБ (1.1% от изначального размера), в то время как результирующий размер образа SquashFS составил 4.7 ГБ. На создание образа в SquashFS было потрачено 69 минут, в то время как DwarFS выполнил работу за 15 минут.
В обеих ФС для сжатия использовался алгоритм ZSTD. При применении LZMA размер образа DwarFS удалось уменьшить ещё на 18% (479 МБ), но скорость доступа к подобному образу значительно уменьшилась. Тестирование на данных, в которых встречается меньше дубликатов, показало не столь значительное, но всё же заметное, преимущество DwarFS. Например, размер образа для корневой ФС Paspberry Pi OS составил 298 МБ для DwarFS и 364 МБ для SquashFS, а время создания 1 минута 36 секунд и 1 минута 54 секунды, соответственно.
Основные возможности DwarFS:
- Устранение избыточности через кластеризацию похожих данных (независимо от границ файлов) с использованием LSH хэш-функций для выявления похожих объектов.
- Анализ сегментирования блоков файловой системы для сокращения размера несжатой ФС и повышение эффективности использования процессорного кэша за счёт того, что в него попадает больше необходимых данных.
- Многопоточная реализация утилиты создания образов и FUSE-модуля, которые при работе могут использовать все доступные ядра CPU.
- Экспериментальная поддержка возможности подключения обработчиков на языке Lua, которые могут применяться для фильтрации и упорядочивания содержимого.
- Режим переупаковки, позволяющий изменить алгоритм сжатия для уже созданного образа (например, переупаковать с использованием LZMA или LZ4 вместо ZSTD).
- Создание образов осуществляется утилитой mkdwarfs, а монтирование утилитой dwarfs.
Источники править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.