圧縮ツール は、マルチコア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。
さて、キーワードはparallelでした。 parallelであったすべての圧縮ツールを探した後、次のことがわかりました。
PXZ-パラレルXZは、入力ファイルのさまざまな部分のLZMA圧縮を複数のコアとプロセッサで同時に実行することを活用する圧縮ユーティリティです。その主な目標は、圧縮率への影響を最小限に抑えながら、すべてのリソースを活用して圧縮時間を短縮することです。
Sudo apt-get install pxz
PLZIP-Lzipは、LZMAアルゴリズムに基づくロスレスデータコンプレッサーであり、非常に安全な整合性チェックと、gzipまたはbzip2のいずれかに類似したユーザーインターフェイスを備えています。 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%)
上記のニースの概要に加えて(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ファイルの個々のコンポーネントの解凍を高速化するオプションのインデックス機能があります。
XZ Utils v5.2.0以降、マルチスレッド圧縮をサポートしますが、当初はマルチスレッド圧縮解除として誤って文書化されていました。
例:tar -cf - source | xz --threads=0 > destination.tar.xz
lzop も実行可能なオプションですが、シングルスレッドです。
これは、veryfast lempel-ziv-oberhumer 圧縮アルゴリズムを使用します。これは、私の観察ではgzipより5-6倍高速です。
注:まだマルチスレッドではありませんが、1〜4コアシステムでpigzよりも優れている可能性があります。あなたの質問に直接答えていない場合でも、これを投稿することにしました。試してみてください。1つのCPUのみを使用し、圧縮率を少し下げると、CPUのボトルネックの問題が解決する場合があります。私はしばしば、例えばpizzsよりも良い解決策であることがわかりました。
それは実際には答えではありませんが、実際のシナリオでの実際のハードウェアでの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
quick
time gzip -1kN ./db_dump.sql
real 1m22,271s
user 1m17,738s
sys 0m3,330s
gzip
best
time gzip -9kN ./db_dump.sql
real 10m6,709s
user 10m2,710s
sys 0m3,828s
pigz
quick
time pigz -1kMN ./db_dump.sql
real 0m26,610s
user 1m55,389s
sys 0m6,175s
pigz
best(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
アルゴリズムはお勧めしません。これは、それほど重要ではないディスク容量を節約するために圧縮に多大な時間がかかったためです。
結果のファイルサイズ:
p7ZipのLZMA2コンプレッサー は私のシステムで両方のコアを使用します。