Эффективность сжатия разными архиваторами на одном показательном примере

Картинка «для чего нужны современные архиваторы». Также на ней показана эффективность сжатия в формат ZIP разными архиваторами и методами. Замеры скорости не приведены, там отдельная большая история.  

 

Архивация драйверов NVIDIA GeForce

 

По долгу службы мне регулярно приходится сжимать драйверы NVIDIA и очень желательно, чтобы они занимали как можно меньше места. Драйверы существуют отдельно в версиях для ноутбучных и ПК-видеокарт, для новых Windows Vista/7 и старой Windows XP, для 32-х и 64-разрядных ОС, всего 8 вариантов. Предварительно драйверы надо распаковать из дистрибутива, т.к. в таком виде пытаться пережимать их бессмысленно. Внутри распакованного некоторые файлы еще раз заархивированы CAB-сжатием Microsoft (файлы DL_, EX_, фактически формата ZIP), их также надо распаковать.

Раздолье для архиватора в том, что в 8 дистрибутивах полно похожих или вообще одинаковых файлов. Многие DLL-ки и EXE-шники повторяются по 2-4 раза, а то и чаще, например, немаленький дистрибутив PhysX повторяется все 8 раз. Значит, если архиватор в состоянии понять, что файлы одинаковые, то в ряде случаев мы получим значительную выгоду — восьмикратную и даже чуть больше (оставляем один файл из восьми да еще и сжимаем его).

Если я правильно понимаю принцип, архиватор сможет «распознать» идентичность двух файлов, когда они полностью помещаются в его «словаре». То есть для сжатия двух 10-мегабайтных файлов с двукратной эффективностью нужен словарь в 20 МБ. У классического ZIP-сжатия словарь ограничен 32 КБ, WinRAR поддерживает не более 4 МБ, 7-Zip в максимальном режиме «Ультра» предлагает 64 МБ. В 7-Zip при LZMA-сжатии можно выбрать словарь до 1024 МБ, но для обработки такого массива данных понадобится 12 ГБ оперативной памяти. Для системы с 4 ГБ памяти реально выбрать словарь в 256 МБ, что потребует менее 3 ГБ ОЗУ.

В драйверах NVIDIA присутствуют повторяющиеся дистрибутивы по 58 МБ. Значит даже 7-Zip в режиме «Ультра» (словарь 64 МБ) уже не хватает. Приходится вручную увеличивать объем словаря, результат сразу виден на графике.

Конечно, данная ситуация нетипична и при повседневном использовании такого безумного превосходства 7-Zip не будет. Хотя его метод LZMA действительно сжимает в 7z заметно лучше RAR, а уж про ZIP вообще пора давно забыть.