web-dev-qa-db-ja.com

マルチコア圧縮ツール

圧縮ツール は、マルチコアCPUの恩恵を受けることができるUbuntuで利用可能です。

59
Luis Alvarado

主に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。

32
Oli

さて、キーワードは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%)

72
Luis Alvarado

上記のニースの概要に加えて(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ファイルの個々のコンポーネントの解凍を高速化するオプションのインデックス機能があります。

10
nturner

更新:

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

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

8
donbradken

lzop も実行可能なオプションですが、シングルスレッドです。

これは、veryfast lempel-ziv-oberhumer 圧縮アルゴリズムを使用します。これは、私の観察ではgzipより5-6倍高速です。

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

4
ce4

それは実際には答えではありませんが、実際のシナリオでの実際のハードウェアでの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 SQLdump

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 bestzopfliなし)

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アルゴリズムはお勧めしません。これは、それほど重要ではないディスク容量を節約するために圧縮に多大な時間がかかったためです。

結果のファイルサイズ:

  • bests:1309M
  • quicks:1680M
  • zopfli:1180M
3
helvete

p7ZipのLZMA2コンプレッサーInstall p7Zip は私のシステムで両方のコアを使用します。

3
David Foerster

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

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

  1. Zstdのv1.1.0にはサードパーティのpzstdもありました。
2
LiveWireBT