20.04.2021

Файловая система DwarFS, обеспечивающая очень высокий уровень сжатия


Маркус Холланд-Мориц (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.

Источник: https://www.opennet.ru/opennews/art.shtml?num=54166

Добавить комментарий