- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF133:xzip
Материал из Linuxformat.
- Хотите сэкономить место на диске? Бен Мартин говорит…
Содержание |
Xzipди-даба-дуу!
При условии, что программа сжатия может распаковать файлы в исходное состояние, существует два основных параметра, характеризующие приемлемость схемы сжатия: скорость и размер. Кроме них, есть еще проблемы с патентами на ПО, возможность масштабирования схемы на несколько процессоров или наличие графического интерфейса, но основное — эти два.
Иногда можно пожертвовать размером ради увеличения скорости сжатия. Например, при обработке файлов журналов на сервере предпочтительнее метод сжатия, работающий как можно быстрее. Тогда архивация будет забирать лишь 5–10 % производительности процессора, а машина сможет использовать оставшиеся ресурсы для основной деятельности – например, обслуживания базы данных.
С другой стороны, если вы сжимаете исходные тексты ядра Linux или ваш собственный проект с открытым кодом, приоритеты могут измениться. Если это займет 10 минут вместо пяти, но зато размер получится на 10 % меньше, вы, вероятно, захотите меньший по размеру файл.
Место помечено X'ом
Некоторые сайты, предоставляющие свободное ПО, в последнее время стали наряду с файлами .tar.bz2 предлагать загрузку файлов .tar.xz. Оба эти файла распаковываются в несжатый архив Tar, но файл xz от xzip может быть поменьше, чем bzip2‑файл.
Мы решили присмотреться к xzip, чтобы понять, намного ли он превосходит более известные методы сжатия. Тестирование выполнялось на 2,4‑ГГц процессоре Intel Q6600 с файловой системой на RAID-массиве: сжимались исходные тексты ядра 2.6.29, занимающие в распакованном виде 321 МБ. Для обеих программ bzip2 и xzip использовались опции командной строки от -1 до -9 для указания уровня сжатия. Девять – высший уровень; он же и самый медленный и, вероятно, более жаден до ОЗУ. Обе программы тестировались при уровнях сжатия 1, 5 и 9, чтобы понять, как дополнительные вычислительные ресурсы влияют на размер выходного файла.
Поскольку Q6600 – 4‑ядерный чип, мы заодно протестировали pbzip2, способную использовать при сжатии несколько ядер процессора. Заметим, что xzip также имеет опцию -t для указания количества одновременно используемых потоков, позволяющую задействовать несколько процессоров или ядер; однако в руководстве написано, что многопоточный код пока не реализован.
Результаты для ядра Linux показаны ниже. Помните, что проценты указаны от 321 МБ, так что на уровне 5 xzip дает около 48 МБ вместо 56 МБ у bzip2, а это существенная разница, если вы загружаете файл из Интернета. Кроме того, на уровне сжатия 1 при почти таком же размере файла xzip требует значительно меньше времени, чем одноядерный bzip2. Если вы желаете сжать данные на многоядерной машине, которая уже занята чем-то важным, быстрое «одноядерное» сжатие может быть удачным решением.
Компромисс со скоростью
Чтобы получить лучший результат распаковки от punbzip2, сжимайте файлы при помощи pbzip2, а не bzip2.
Если необходимо быстрое сжатие и не очень важен размер файла, попробуйте инструмент lzma.
Получателя данных больше интересует время распаковки, чем чье-то время, потраченное на сжатие. И если вы сжимаете текстовые файлы, вроде журналов, то при распаковке данных несколько раз вы вновь и вновь будете тратить время.
С точки зрения распаковки важно то, что при использовании уровней 5 и 9 создание архива в xzip дольше, но в обоих случаях распаковка значительно быстрее, чем у bzip2. На самом деле, максимально сжатый xzip файл распаковывается быстрее, чем в многоядерном pbunzip2/bzip2. Но, как видно из графиков, на сжатие на уровне 9 в xzip уходит почти впятеро больше времени, чем в bzip2.
Для проверки результатов мы взяли другой пакет исходных текстов – libferris версии 1.4.5. Распакованный Tar-файл размера 25 МБ ужимается до 2,8 МБ в bzip и до 2 МБ в xzip (в обоих случаях уровень сжатия 9). На сей раз для сжатия tar-архива xzip потребовалось 13,4 секунды, а bzip2 – 5,5 секунд.
Сжатие текста
Тип сжимаемых данных значительно влияет на результирующую степень сжатия. Чтобы почувствовать это, скачаем простой текст романа «Война и мир» с сайта Project Gutenberg. Размер текстового файла – 3,2 МБ, а Zip-файл занимает 1,16 МБ. bzip2 на всех уровнях сжатия потребовалось около 0,5 секунды, тогда как у pbzip2 это заняло от 0,25 до 0,3 секунд, что вполне ожидаемо. С другой стороны, xzip потребовалось от 0,6 секунд на уровне 1 до около 3,3 на уровнях 5 и 9. И вновь, на более высоких уровнях xzip сжимает данные в 5-6 раз медленнее, чем bzip2.
На сей раз у bzip2 файл архива получился «легче», уменьшившись до 31,7 %, 27,9 % и 26,9 % от исходного размера на уровнях -1, -5 и -9, тогда как в xzip эти цифры составили 37,5 %, 28,3 % и 28,3 %. pbzip2 показал результаты, сходные с bzip2, с небольшими отличиями, вследствие параллельного сжатия.
Итак, наш вывод: если вы намерены выжать из сжатия все до последней капли, то xzip – ваш первый выбор. Он сжимает обычный текст чуть хуже, чем bzip2, но, похоже, на исходных кодах xzip показывает значительное преимущество в сжатии при увеличении времени сжатия в 5‑6 раз.
Ресурсы
- Домашняя страница xzip http://tukaani.org/xz/
- «Война и мир» графа Льва Толстого (англ.) http://www.gutenberg.org/files/2600/2600.txt
- Библия, Ветхий и Новый заветы, версия короля Якова http://www.gutenberg.org/etext/10