PDA

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


Suicide
30.11.2020, 19:40
Маркус Холланд-Мориц (Marcus Holland-Moritz) из компании Facebook опубликовал первые выпуски файловой системы DwarFS (https://github.com/mhx/dwarfs), работающей в режиме "только для чтения" и нацеленной на обеспечение максимального уровня сжатия и сокращения избыточных данных. ФС использует (https://github.com/mhx/dwarfs/blob/main/man/dwarfs.md) механизм FUSE и работает в пространстве пользователя. Код написан на С++ и распространяется (https://github.com/mhx/dwarfs) под лицензией GPLv3.

По своим задачам DwarFS напоминает такие файловые системы, как SquashFS (https://www.kernel.org/doc/Documentation/filesystems/squashfs.txt), cramfs (https://www.kernel.org/doc/Documentation/filesystems/cramfs.txt) и CromFS (https://bisqwit.iki.fi/source/cromfs.html), и может применяться для создания Live-образов и сокращения размера архивов с большим числом дубликатов и повторяющихся данных (например, хранилища образов виртуальных машин или коллекции разных версий программ). По скорости обращения к данным DwarFS примерно находится на том же уровне, что и SquashFS, но в разы опережает данную ФС по эффективности сжатия и скорости формирования образа.

Проект был разработан для решения задачи оптимизации хранилища с разными версиями Perl (автор DwarFS принимает участие в поддержании архива CPAN). Вначале была предпринята попытка использования Cromfs для сжатия, но на время сборки образа требовалось слишком много времени, а стабильность оставляла желать лучшего. SquashFS работал стабильно и заметно быстрее формировал образы, но уровень сжатия оказался неприемлемым. Большая часть кода DwarFS была написана ещё в 2013 году. В этом году автор нашёл время для доведению кода до публичного релиза и написание документации. В DwarFS используются библиотеки Boost (https://www.boost.org/) и Folly (https://github.com/facebook/folly). Для хранения метаданных применяется библиотека frozen из Facebook-ветки фреймворка Thrift (https://github.com/facebook/fbthrift). Из других зависимостей отмечаются FUSE3 и библиотеки сжатия lz4 (https://github.com/lz4/lz4), zstd (https://github.com/facebook/zstd) и liblzma (https://github.com/kobolabs/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 (https://ru.wikipedia.org/wiki/Locality-sensitive_hashing) хэш-функций для выявления похожих объектов.

Анализ сегментирования блоков файловой системы для сокращения размера несжатой ФС и повышение эффективности использования процессорного кэша за счёт того, что в него попадает больше необходимых данных.

Многопоточная реализация утилиты создания образов и FUSE-модуля, которые при работе могут использовать все доступные ядра CPU.

Экспериментальная поддержка возможности подключения обработчиков на языке Lua, которые могут применяться для фильтрации и упорядочивания содержимого.

Режим переупаковки, позволяющий изменить алгоритм сжатия для уже созданного образа (например, можно переупаковать с использованием LZMA или LZ4 вместо ZSTD).

Создание образов осуществляется утилитой mkdwarfs (https://github.com/mhx/dwarfs/blob/main/man/mkdwarfs.md), а монтирование утилитой dwarfs (https://github.com/mhx/dwarfs/blob/main/man/dwarfs.md).
30.11.2020

https://www.opennet.ru/opennews/art.shtml?num=54166​

altblitz
30.11.2020, 21:50
Suicide said:
↑ (https://antichat.live/posts/4432562/)
Из других зависимостей отмечаются FUSE3 и библиотеки сжатия
lz4 (https://github.com/lz4/lz4)
,
zstd (https://github.com/facebook/zstd)
и
liblzma (https://github.com/kobolabs/liblzma)
.


Или иными словами, сама файловая система ничего не сжимает, а пользуется стандартными библиотеками, одна из которых, zstd - продукт Facebook.

https://i.imgur.com/OyY4ERu.png

Интересно, что Arch Linux уже два года назад перевёл свои репозитории на формат zstd [pkg.tar.zst].