Shuld
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Zstandart в плагине Modern7z Цель тестирования В области сжатия данных все время появляются новые алгоритмы и программы. Но не все они одинаково интересны. В данной заметке будет приведен обзорный тест перспективного (на мой взгляд) метода сжатия Zstandart, посредством плагина Modern7z к программе 7-zip. Тест, повторюсь, обзорный, он не претендует на то, чтобы дать ответы на все вопросы. Его цель – привлечь внимание к методу. И если заинтересует – пробуйте и экспериментируйте. Описание компьютера Процессор i3-4130 (2 ядерный, 4 поточный, 3.40 GHz), Win 8.1 pro 64-разрядная, ОЗУ 16 ГБ, из которых 3 ГБ отведено под RAMdisk (программа SoftPerfect RAM Disk 3.4.6) http://forum.ru-board.com/topic.cgi?forum=5&topic=46273&start=20#9 [?] минус системные нужды, итого для архиватора доступно примерно 11 300 МБ. SSD PLEXTOR PX-128M5Pro (128 ГБ, SATA-III) прошивка 1.05 Винчестер RED WD20EFRX 2 000 ГБ Данные 2 020 999 669 байт, папок 129, файлов 684. Здесь я сохранял разные «нужные» файлы самых разных форматов: от хорошо сжимаемых doc и xls до уже сжатых pdf и jpg. Данные копировались на RAMdisk, где и проводились тесты. Скорость работы RAMdisk достаточно высока и не являлась сильным ограничением. Программы: 7-zip 19.00 (х64); Плагин Modern7z 1.8.5. Modern7z - это плагин для популярного архиватора 7-Zip, добавляющий в 7-Zip поддержку следующих методов сжатия: • Zstandard v1.4.4 • Brotli v1.0.4 • LZ4 v1.9.2 • LZ5 v1.5 • Lizard v1.0 • Fast LZMA2 v0.9.2 Для установки плагина, в папке, в которой установлена программа 7-Zip, необходимо создать папку Codecs. В созданную папку необходимо скопировать либо содержимое папки 32, либо содержимое папки 64, в зависимости от разрядности программы 7-Zip. После этого 7-Zip при запуске будет автоматически находить плагин и использовать его для работы с дополнительными методами сжатия. Интерфейс 7Zip не позволяет напрямую выбрать дополнительный алгоритм в качестве метода сжатия, который будет использоваться при упаковке в формат 7Z. Поэтому его нужно указывать в поле Параметры в виде строки вида "0=ZSTD", где ZSTD - это внутреннее название метода сжатия: Ключ «x=17» означает установку уровня сжатия 17 из 1 – 22 возможных. Описание теста Часть 1 Сжатие данных проводилось методами по умолчанию, сначала LZMA2, затем ZSTD. Таблица 1 с результатами теста Использование памяти указано в процентах от всей имеющейся (16 ГиБ). Ключ в скобках (d=…) означает размер окна, который я в явном виде не задавал, он определялся библиотекой ZSTD. График 1 По оси абсцисс – скорость сжатия, слева – медленнее, справа – быстрее. По оси ординат – коэффициент сжатия, выше – больше, ниже – меньше. При сравнении LZMA2 и ZSTD видно: диапазон скоростей работы у ZSTD существенно больше. Если у LZMA2 он примерно 4, то у ZSTD – 70. На быстрых режимах работы ZSTD вне конкуренции. В то же время при медленных режимах работы ZSTD «по умолчанию» есть зона, где ZSTD уступил LZMA2 по соотношению скорость/ коэфф. сжатия. В самых медленных режимах работы ZSTD смог сжать сильнее LZMA2, но затратив при этом больше времени и памяти. Часть 2 Как и у метода LZMA2, так и у ZSTD есть ряд ключей, которые могут управлять сжатием: x – уровень сжатия от 1 до 22; a – алгоритм от 1 до 9, по умолчанию 5 (не всегда); c - размер блока (может быть больше 2g); Он был актуален для ранних версий библиотеки ZSTD, в которых не было многопоточности. В актуальной версии ZSTD есть своя реализация многопоточности, и при использовании метода ZSTD при упаковке в контейнер 7z этот ключ потерял свой смысл, и более того он стал вреден. d - размер окна (до 2g включительно для х64 и 1g для х32); mt - число потоков. Обращаю внимание на важный факт: Библиотека ZSTD, в зависимости от объема памяти и сжимаемых данных сама достаточно активно манипулирует параметрами сжатия. Когда я только начал эксперименты с ZSTD, то у меня на компьютере был открыт браузер с несколькими вкладками, на которых я знакомился с плагином Modern7z. И сжатие по уровню x=22 дало у меня результаты: 433 с, 938 601 592 байта. Эксперименты с размером окна показали, что это соответствовало d=16m. В последующем я проводил эксперименты после перезагрузки компьютера, никаких посторонних программ открыто не было. И сжатие по уровню x=22 дало другие результаты: 373 с, 923 472 839 байт, что заметно лучше. Эти данные и приведены в таблице 1. Этот результат соответствует уже другому размеру окна d=128m. Также, ZSTD самопроизвольно при больших требованиях к памяти уменьшает количество потоков. Поскольку далеко не всегда понятно, почему и какие параметры ZSTD использует, при экспериментах, желательно открыть Монитор ресурсов (или другим способом) и контролировать память и загрузку процессора (чтобы видеть количество потоков). Это может немного прояснить ситуацию. Поэкспериментировав с различными ключами, я пришел к выводу, что с практической точки зрения самый полезный - размер окна, остальные можно не задавать. Следующие эксперименты сделаны для максимально возможного размера окна d=2g. Таблица 2 Желтым цветом в таблице выделены режимы, когда библиотека ZSTD уменьшила количество потоков, видимо, из за нехватки памяти. График 2 В целом ZSTD при большом размере окна показал с точки зрения скорость/ коэфф. сжатия результаты лучше, чем по умолчанию. Конечно, при больших затратах памяти. Поскольку я нигде не нашел данных по требуемому объему памяти, то приведу таблицу на основе своих экспериментов: Таблица 3 В таблице 1 ГиБ = 2^30 Байт (1 ГБ = 10^9 Байт). Я перепроверил на компьютере с ОЗУ 8 ГБ, при уровнях сжатия 21 и 22 размер окна 128m также использует 4 потока, а начиная с 256м – только 2 потока. Вопрос, который остался неясным, используется ли при работе файл подкачки? Осталось подозрение, что иногда используется. И вероятнее всего на разных компьютерах ситуация будет разной. По результатам эксперимента, мне очень понравился уровень сжатия 11. Если захотите поэкспериментировать, то сожмите большой объем данных сначала методом LZMA2 с уровнем сжатия «нормальный», а затем ZSTD с параметрами x=11 d=2g. По коэфф. сжатия должно быть примерно одинаково, а по времени – ZSTD раз в 5 быстрее. Скажу еще следующее – за время экспериментов на 3 разных компьютерах, никаких сбоев плагина Modern7z я не наблюдал. Только в случае задания c=64g (напомню, ключ не рекомендуется к использованию) в процессе архивирования появилась надпись о нехватке памяти. В заключение благодарю автора плагина за советы в подготовке и публикации заметки. | Всего записей: 364 | Зарегистр. 08-12-2010 | Отправлено: 19:15 20-04-2020 | Исправлено: Shuld, 05:59 25-05-2020 |
|