どのような圧縮ツールはマルチコアCPUの恩恵を受けることができるのUbuntuでご利用いただけます。
どのような圧縮ツールはマルチコアCPUの恩恵を受けることができるのUbuntuでご利用いただけます。
回答:
主に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。
/dev/urandom
ランダムデータは定義上、非圧縮性であるため、圧縮ツールのベンチマークの入力としてはあまり適していません。どちらの場合でも、出力ファイルが入力よりも〜450MiB 大きい理由は部分的に説明されています。
00000000000000000000000000000000
ます。それがランダムの仕組みです;)あなたが話しているのは実用的な平均です。それはだそうあなただけのゼロの100MBのファイルを生成します。そして、私はあなたが言っていることの精神に同意します、「定義による」には同意しません。それは定義ではないからです(不正確だからです)。
wget http://mattmahoney.net/dc/enwik8.zip
Wikipediaから96MB(21MB圧縮)のテキストを取得するなど、いくつかのテキストをパイプするだけでよいかもしれません。より包括的なベンチマークのスイートについては、こちらをご覧ください。
さて、キーワードは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%)
lrzip
を使用して圧縮解除できpbzip2
ます。
上記の素晴らしい要約に加えて(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
ます。
pixz
解凍でき、xz
アーカイブをxz
解凍できpixz
ます。ただし、コマンドラインオプションのxz
とpixz
は異なります。
pixz
。
lzopも実行可能なオプションかもしれませんが、シングルスレッドです。
私の観察では、gzipより5-6倍速い非常に高速なlempel-ziv-oberhumer圧縮アルゴリズムを使用しています。
注:まだマルチスレッドではありませんが、1〜4コアシステムでpigzよりも優れている可能性があります。あなたの質問に直接答えていない場合でも、これを投稿することにしました。試してください。1つのCPUのみを使用し、圧縮率を少し下げると、CPUのボトルネックの問題が解決する場合があります。私はしばしば、例えばpizzよりも良い解決策であることがわかりました。
p7zip のLZMA2コンプレッサーは、私のシステムで両方のコアを使用します。
これは実際には答えではありませんが、実際のシナリオでの実際のハードウェアの速度gzip
とpigz
実際のハードウェアでの速度を比較するベンチマークを共有するのに十分関連があると思います。pigz
私が個人的にこれから使用することを選択したマルチスレッドの進化と同様に。
メタデータ:
Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
(4c / 8t)+ Nvme SSDXubuntu 17.10 (artful)
gzip
版: 1.6
pigz
版: 2.4
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
アルゴリズムを推奨しません。それは、それほど重要ではない量のディスクスペースを節約するために圧縮に多大な時間がかかったからです。
結果のファイルサイズ: