Журнал LinuxFormat - перейти на главную

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 раз.

Ре­сур­сы

Результаты сравнения

Результаты

Персональные инструменты
купить
подписаться
Яндекс.Метрика