суббота, 29 января 2011 г.

Занимательная архивация – 2 — 7-zip vs Bzip2 vs XZ vs LZMA vs LZip...

Все-таки собрался и немного потестил разные архиваторы. Результат в табличке.

  Набор примеров для учебника по Lazarus (см.) Образ диска VirtualBox Дерево исходных кодов Free Pascal с документацией
Исходный размер 56.1M 8.8G 297M
7z (t/size) 20.0s (17s) 411K 107m (80m) 2.8G 3m55s (2m52s) 125M
tar.bz2 53.6s 9.3M 67m 3.5G 2m28s 134M
tar.xz 30.1s 388K 133m 2.8G 4m40s 125M
tar.lzma 30.0s 387K 132m 2.8G 4m45s 125M
tar.lz 44.5s 388K 168m 2.8G 7m7s 125M
tar.7z 21.1s (20s) 392K 107m 2.8G 4m22s 125M

Поясню: время в таблице — это «user time», которое представляется единственно адекватным сравнению именно упаковщиков, а не состояния системы в процессе. В скобках же указано время «real», в том случае, если оно оказалось меньше «user». Насколько я могу судить, это однозначно свидетельствует о том, что 7-zip задействовал для работы второе ядро. Правда, отсутствие таких ситуаций у других программ сжатия еще ни о чем не говорит — я не выделял для тестирования какого-то особого времени, а параллельно использовал компьютер в обычном режиме — с существенной, а главное — очень неравномерной нагрузкой...

Для тестирования я использовал следующий примитивный скрипт:

#!/bin/bash

src=$1

echo -e "source: $src\n"

tgt=$1.7z
echo -e "\ttarget: $tgt"
time ( 7z a "$tgt" "$src" > /dev/null )
ls -lh "$tgt"

tgt=$1.tar.bz2
echo -e "\ttarget: $tgt"
time ( tar -c --bzip2 -f "$tgt" "$src" > /dev/null )
ls -lh "$tgt"

tgt=$1.tar.xz
echo -e "\ttarget: $tgt"
time ( tar -c --xz -f "$tgt" "$src" > /dev/null )
ls -lh "$tgt"

tgt=$1.tar.lzma
echo -e "\ttarget: $tgt"
time ( tar -c --lzma -f "$tgt" "$src" > /dev/null )
ls -lh "$tgt"

tgt=$1.tar.lz
echo -e "\ttarget: $tgt"
time ( tar -c --lzip -f "$tgt" "$src" > /dev/null )
ls -lh "$tgt"

tgt=$1.tar.7z
echo -e "\ttarget: $tgt"
time ( tar -c --use-compress-program=p7zip -f "$tgt" "$src" > /dev/null )
ls -lh "$tgt"

Какие можно сделать выводы?

  1. Результаты по первому набору данных не тождественны тем, которые у меня получались при использовании упаковки через контекстное меню Konqueror'а. Судя по всему, tar использует максимальное сжатие, в отличие от.
  2. Результаты современных архиваторов очень близки друг к другу. 7-zip немного хуже сжимает, однако делает это заметно быстрее. Возможно, все дело вообще в настройках по-умолчанию.
  3. «Устаревший» BZip2 работает заметно быстрее более новых форматов, за исключением все того же особого случая с примерами. Как вариант для бэкапов я лично его в своем активе оставлю — иногда время тоже бывает существенным.
  4. Хуже всего со временем у формата lzip при отсутствии сколь-нибудь заметного преимущества в степени сжатия. И, надо заметить, из рассмотренных он, пожалуй, наименее популярен.

1 комментарий:

  1. Вот похожий тест, 7zip тоже оказывается быстрее.
    http://sourceforge.net/p/lzmautils/discussion/708858/thread/ad3c209b/

    ОтветитьУдалить