マルチコア圧縮ツール


61

どのような圧縮ツールはマルチコアCPUの恩恵を受けることができるのUbuntuでご利用いただけます。


記録のためだけに、並行して独立したアーカイブを作成することもできます。したがって、myfiles.8core.xzを作成する代わりに、myfiles1.xzをmyfiles8.xzに並行して作成します。これには、ディスパッチエージェントが必要です。どちらのアプローチにも、長所と短所があります。
Acumenus 14

2
bzip2を使用して7 GBファイルを解凍し、8コアすべてを使用していないことを確認しました。それについて読み、pbzip2を試してみることにしました。まだ1つのコアで実行されています。それから、pbzip2はそれ自体を圧縮したファイルの解凍のみを完全に並列化できるというコメントに気付きました。同じコメントは、lbzip2が実際に真であったbz2ファイルで完全に並列化できることを示唆しました-すべてのコアをほぼ完全に使用し(CPUの80-90%)、圧縮解除方法を高速化しました。
エディBice 14

回答:


34

主に2つのツールがあります。lbzip2およびpbzip2。これらは、bzip2コンプレッサーの本質的に異なる実装です。それらを比較しました(出力は整理されたバージョンですが、コマンドを実行できるはずです)

cd /dev/shm  # we do all of this in RAM!
dd if=/dev/urandom of=bigfile bs=1024 count=102400

$ lbzip2 -zk bigfile 
Time: 0m3.596s
Size: 105335428 

$ pbzip2 -zk bigfile
Time: 0m5.738s6
Size: 10532460

lbzip2ランダムデータの勝者のようです。圧縮率はわずかですが、はるかに高速です。YMMV。


5
pbzip2サイズから数字が欠落しているように見える
ウェインウォーカー14

4
/dev/urandomランダムデータは定義上、非圧縮性であるため、圧縮ツールのベンチマークの入力としてはあまり適していません。どちらの場合でも、出力ファイルが入力よりも〜450MiB 大きい理由は部分的に説明されています。
ali_m

1
申し訳ありませんが、私は本当につまらないですが、本当にランダムなデータ超圧縮可能です。32ビットの完璧なRNGを要求して取得でき00000000000000000000000000000000ます。それがランダムの仕組みです;)あなたが話しているのは実用的な平均です。それはだそうあなただけのゼロの100MBのファイルを生成します。そして、私はあなたが言っていることの精神に同意します、「定義による」には同意しません。それは定義ではないからです(不正確だからです)。
オリ

2
さまざまな圧縮方法のパフォーマンスを判断するとき、私たちが本当に興味を持っているのは、圧縮したい種類のデータの将来の例で期待される出力サイズです。このデータが本当にランダムな場合、圧縮するための統計的な規則性が含まれていないため、N個のランダムバイトのシーケンスでは、Nバイトの出力長が期待されます。いくつかの例では少し良くなるかもしれませんが、他の例では少し悪くなるかもしれません(実際にはほとんど常に悪くなります)が、期待される出力の長さは同じままです。
ali_m

5
私は、文字通り非圧縮性として定義されているコルモゴロフの意味で「ランダム」を意味します。さまざまなタイプのデータに対してさまざまなアルゴリズムがより適切に機能するため、圧縮に関する普遍的なベンチマークはありません。wget http://mattmahoney.net/dc/enwik8.zipWikipediaから96MB(21MB圧縮)のテキストを取得するなど、いくつかのテキストをパイプするだけでよいかもしれません。より包括的なベンチマークのスイートについては、こちらをご覧ください
ali_m

72

さて、キーワードはparallelでした。並行するすべての圧縮ツールを探した結果、次のことがわかりました。

PXZ-パラレルXZは、複数のコアとプロセッサで同時に入力ファイルのさまざまな部分のLZMA圧縮を実行することを活用する圧縮ユーティリティです。その主な目的は、すべてのリソースを活用して、圧縮率への影響を最小限に抑えながら圧縮時間を短縮することです。

sudo apt-get install pxz

PLZIP - Lzipは、LZMAアルゴリズムに基づくロスレスデータコンプレッサーであり、非常に安全な整合性チェックと、gzipまたはbzip2の1つに類似したユーザーインターフェイスを備えています。Lzipはgzipとほぼ同じ速さで解凍し、bzip2よりも圧縮率が高いため、ソフトウェアの配布とデータのアーカイブに適しています。

Plzipは、lzipファイル形式を使用したlzipの超並列(マルチスレッド)バージョンです。plzipによって生成されるファイルは、lzipと完全に互換性があります。

Plzipは、マルチプロセッサマシンでの大きなファイルの圧縮/解凍を高速化することを目的としているため、大きなソフトウェアファイルの配布や大規模なデータアーカイブに特に適しています。十分な大きさのファイルでは、plzipは何百ものプロセッサーを使用できます。

sudo apt-get install plzip

PIGZ -GZipの並列実装の略であるpigzは、データを圧縮するときに複数のプロセッサと複数のコアを利用するgzipの完全に機能する代替品です。

sudo apt-get install pigz

PBZIP2 -pbzip2は、pthreadを使用し、SMPマシンでほぼ線形の高速化を実現するbzip2ブロックソートファイルコンプレッサーの並列実装です。このバージョンの出力は、bzip2 v1.0.2と完全に互換性があります(つまり、pbzip2で圧縮されたものはすべて、bzip2で解凍できます)。

sudo apt-get install pbzip2

LRZIP-大きなファイルで使用すると、非常に高い圧縮率と速度を実現できるマルチスレッド圧縮プログラム。最大圧縮にはzpaqとlzmaを組み合わせた圧縮アルゴリズム、最大速度にはlzo、rzipの長距離冗長性の削減を使用します。RAMサイズの増加に応じてスケーリングするように設計されており、圧縮がさらに向上します。サイズまたは速度の最適化のいずれかを選択すると、lzmaでさえも提供できる圧縮率よりも優れているか、gzipよりも高速ですが、bzip2サイズの圧縮レベルが可能です。

sudo apt-get install lrzip

小さな圧縮ベンチマーク(作成されたOliテストを使用):

元のファイルサイズ-100 MB
PBZIP2-101 MB(1%大きい)
PXZ-101 MB(1%大きい)
PLZIP-102 MB(1%大きい)
LRZIP-101 MB(1%大きい)
PIGZ-101 MB(1%大きい) )

小さな圧縮ベンチマーク(テキストファイルを使用):

元のファイルサイズ-70 KBテキストファイル
PBZIP2-16.1 KB(23%)
PXZ-15.4 KB(22%)
PLZIP-15.5 KB(22.1%)
LRZIP-15.3 KB(21.8%)
PIGZ-17.4 KB(24.8%)


例は素晴らしいでしょう。
earthmeLon 14年

@earthmeLonサンプルファイルの作成方法に関するOliの回答を読んでください。次に、使用したコマンドを続行します。
ルイスアルバラード14年

これらの出力に互換性があることを願っています。つまり、からの出力は、たとえばlrzipを使用して圧縮解除できpbzip2ます。
ビネットメノン

10

上記の素晴らしい要約に加えて(Luisに感謝)、最近ではPIXZを検討することもできます。PIXZはREADMEによると(出典:https : //github.com/vasi/pixz-私は自分で主張を検証していません) )PXZよりもいくつかの利点があります。

[Compared to PIXZ, PXZ has these advantages and disadvantages:]

    * Simpler code
    * Uses OpenMP instead of pthreads
    * Uses streams instead of blocks, not indexable
    * Uses temp files and doesn't combine them until the whole file is compressed, high disk/memory usage

つまり、PIXZはメモリとディスクの効率が高いと考えられ、圧縮されたtarファイルの個々のコンポーネントの解凍を高速化するオプションのインデックス機能があります。


ただし、pixzアーカイブは標準xz形式と互換性がないことを理解していpxzます。
Mxx 14年

5
@Mxx:ファイル形式に互換性があります。アーカイブをpixz解凍でき、xzアーカイブをxz解凍できpixzます。ただし、コマンドラインオプションのxzpixzは異なります。
スノーボール14年

インデックス可能なファイルは、にとって大きな勝利ですpixz
オストロカッハ16

8

更新:

XZ Utilsは、v5.2.0以降、マルチスレッド圧縮をサポートしていますが、もともとはマルチスレッド圧縮解除として誤って文書化されていました。

例えば: tar -cf - source | xz --threads=0 > destination.tar.xz


実行してexport XZ_DEFAULTS="-T 0" から、通常のtar呼び出し、つまりを使用することもできますtar cJf target.tar.xz source
scai

4

lzopも実行可能なオプションかもしれませんが、シングルスレッドです。

私の観察では、gzipより5-6倍速い非常に高速なlempel-ziv-oberhumer圧縮アルゴリズムを使用しています。

注:まだマルチスレッドではありませんが、1〜4コアシステムでpigzよりも優れている可能性があります。あなたの質問に直接答えていない場合でも、これを投稿することにしました。試してください。1つのCPUのみを使用し、圧縮率を少し下げると、CPUのボトルネックの問題が解決する場合があります。私はしばしば、例えばpizzよりも良い解決策であることがわかりました。


解凍するだけでいいのではないでしょうか?圧縮にはgzipとほぼ同じ(またはさらに悪い)がかかります
レナート・ローランド

lzopが超高速であることも証言できます。Proxmoxは、デフォルトで仮想マシンのバックアップにlzopを使用します。
ロニーベスト

1
lz4はさらに高速です(マルチスレッドバージョンがあります)。
デビッドバラジック16


3

これは実際には答えではありませんが、実際のシナリオでの実際のハードウェアの速度gzippigz実際のハードウェアでの速度を比較するベンチマークを共有するのに十分関連があると思います。pigz私が個人的にこれから使用することを選択したマルチスレッドの進化と同様に。

メタデータ:

  • 使用ハードウェア:Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz(4c / 8t)+ Nvme SSD
  • GNU / Linuxディストリビューション: Xubuntu 17.10 (artful)
  • gzip 版: 1.6
  • pigz 版: 2.4
  • 圧縮されるファイルは9.25 GiB SQLダンプです

gzip 速い

time gzip -1kN ./db_dump.sql

real    1m22,271s
user    1m17,738s
sys     0m3,330s

gzip ベスト

time gzip -9kN ./db_dump.sql 

real    10m6,709s
user    10m2,710s
sys     0m3,828s

pigz 速い

time pigz -1kMN ./db_dump.sql 

real    0m26,610s
user    1m55,389s
sys     0m6,175s

pigz最高(いいえzopfli

time pigz -9kMN ./db_dump.sql 

real    1m54,383s
user    14m30,435s
sys     0m5,562s

pigz+ zopfliアルゴリズム

time pigz -11kMN ./db_dump.sql 

real    171m33,501s
user    1321m36,144s
sys     0m29,780s

結論として、私はこのzopfliアルゴリズムを推奨しません。それは、それほど重要ではない量のディスクスペースを節約するために圧縮に多大な時間がかかったからです。

結果のファイルサイズ:

  • 最高の:1309M
  • クイック s:1680M
  • zopfli:1180M

2

Zstandardは以来、マルチスレッドをサポートしているV1.2.0の ¹。これはgzipを置き換えることを目的とした非常に高速なコンプレッサーとデコンプレッサーであり、最高レベルのLZMA2 / XZと同じくらい効率的です。

これらの利点を得るには、巧妙なリリースまたは新しいリリースを使用するか、ソースから最新バージョンをコンパイルする必要があります。幸いなことに、それは多くの依存関係を引き込みません。

  1. zstdのv1.1.0にはサードパーティのpzstdもありました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.