マルチプロセッサシステムでのbzip2パフォーマンスのほぼ線形の向上

Linuxは、多くの場合gzipおよびbzip2圧縮を使用します。 どちらも優れた圧縮密度を提供し、使いやすいです。 同時に、bzip2はほとんどのファイルをより効率的に圧縮しますが、一方で、従来のgzipまたはzipよりも動作が遅くなります。



ただし、bzip2の有効性は得られますが、速度は大幅に向上します。 pbzip2ユーティリティ-Parallel BZIP2について話してます。 通常の場合、bzip2を使用する場合、1つのプロセッサコアのみが関与しますが、最新のシステムでは2、4、またはたとえば8になります。



Pbzip2は複数のプロセッサコアを一度に使用できるため、著者によると、パフォーマンスはほぼ直線的に向上します。 pbzip2が作成する圧縮ファイルは、 bzip2 1.0.2およびbzip2の新しいバージョンと完全に互換性があります( pigzユーティリティもあります。これはgzipのマルチスレッド実装です-altexxxに感謝します )。



以下は、2つのIntel Xeon E5520プロセッサー(4コア、8スレッド、クロック速度2.26 GHz)を搭載したコンピューターで、サイズ1000M(dd if = dump.sql of = testfile bs = 1M count = 1000)のSQLファイルの一部の圧縮速度をテストした結果です。 :



試験結果



テスト結果からわかるように、4つのスレッドで動作するpbzip2は、1つのスレッドで動作するbzip2よりも約3.6倍高速です。これは、パフォーマンスがほぼ直線的に向上することです。



同時に、16スレッドで実行されるpbzip2は、4スレッドを使用するpbzip2よりも遅いことが判明しました。これは、おそらくI / O操作の速度が原因です。 また、コメントで追加のテスト参照してください( tristanbliznezzに感謝します-RAMのtmpfsセクションの使用を含みます。



Pbzip2はbzip2とほぼ同じ方法で使用されます 、操作の進行状況をパーセントで出力するなど、いくつかの追加機能があります。





ファイルを圧縮するには:

pbzip2 -k -p4 filename







filenameファイルの名前です。 デフォルトでは、圧縮ファイルはソースと同じ名前で呼び出されますが、最後に.bz2が追加されます(つまり、この場合はfilename.bz2 )。



pbzip2が圧縮の終了後にソースを削除しないように、-kオプションが必要です。 -vオプションを追加して、操作の進行状況などの詳細情報をパーセントで表示することもできます。



-pオプションは、スレッドの数(この場合は4)を設定します。



ファイルを解凍するには:

pbzip2 -dk -p4 filename.bz2







ここで、 filename.bz2ファイルの名前です。 デフォルトでは、解凍されたファイルは圧縮ファイルと同じ名前で呼び出されますが、最後に.bz2が削除されます(つまり、この場合はfilename )。



解凍するには、-dオプションが必要です。



したがって、詳細情報の出力と操作の進行状況とともに、圧縮は次のようになります。

pbzip2 -kv -p4 filename







そして、次のようにファイルを解凍できます。

pbzip2 -dkv -p4 filename.bz2







ディレクトリ全体を圧縮する場合は、gzipおよびbzip2の場合のように、目的のディレクトリを含むいわゆるtarball(それ自体は圧縮されていない)が作成され、必要なユーティリティで圧縮されます。



pbzip2の場合、次のように1行でこれを実行できます。

tar cf myfile.tar.bz2 --use-compress-prog=pbzip2 directory_to_compress/







または:

tar -c directory_to_compress/ | pbzip2 -c > myfile.tar.bz2







2番目のケースでは、それぞれ-p4を追加することもできます(スレッド数を4に設定するため)。




All Articles