マルチコア時代のファイル圧縮

Stack Overflowの毎日の大きなバックアップを行ったので、ファイル圧縮で少し遊んでみました。



サーバーには、最新の64ビットバージョンの7zip (4.64)がインストールされています。 デスクトップシステムにはデュアルコアプロセッサで十分だと思います。 しかし、サーバーを使用すると、すべてが単純になります。コアが増えるほど、楽しくなります! サーバーには2つのクアッドコアプロセッサがあり、コアは8つしかないため、RARも7zipも2つ以上のコアを使用していないことに少しがっかりしました。



ただし、圧縮に2つのコアのみを使用しても、7zipアルゴリズムは非常に効率的であり、最近では非常に高速になりました。 以前は、ZipではなくRARを使用することをお勧めしていました。 RARとは異なり、無料で、7zipの有効性を考えると、今ではそれを選択するのが論理的です。



以下に、4.76 GBのデータベースバックアップファイルを圧縮するためのテストをいくつか示します(2つのクアッドコア2.5 GHz Xeon E5420プロセッサを搭載したサーバーを使用しました)。

7zip 最速 5分 14 MB /秒 973 MB
7zip 速い 7分 11 MB /秒 926 MB
7zip 普通の 34分 2.5 MB /秒 752 MB
7zip 最大 41分 2.0 MB /秒 714 MB
7zip ウルトラ 48分 1.7 MB /秒 698 MB
7zipが最大およびウルトラの圧縮比で良好な結果を示すと思われる場合、ウルトラプラスでは結果が完全に信じられないほどになると思いますが、残念です。 アーカイバのメーカーがデフォルトの圧縮率を通常に設定する理由はいくつかあります。 圧縮率を下げると、出力アーカイブのサイズが急激に増加しますが、圧縮率を上げると、圧縮時間の大幅な増加と引き換えに、出力アーカイブのサイズが比較的小さくなります。



7zipをbzip2に切り替えるとどうなるか見てみましょう。

bzip2が選択された7zip



同じマシンで同じファイル(4.76 GB)を圧縮します。

bzip2 最速 2分 36 MB /秒 1092 MB
bzip2 速い 2.5分 29 MB /秒 1011 MB
bzip2 普通の 3.5分 22 MB /秒 989 MB
bzip2 最大 7分 12 MB /秒 987 MB
bzip2 ウルトラ 21分 4 MB /秒 986 MB
bzip2が7zipよりもずっと速いのはなぜですか? 簡単です:

7zip使用時のCPU使用率

7zipマルチスレッドCPUの使用

bzip2使用時のCPU使用率

bzip2-multithreaded-cpu-usage.png



Bzip2は、並列化に3つ以上のコアを使用します。 彼が使用できるカーネルの数はわかりませんが、ドロップダウンメニューで、7zipはbzip2のカーネルを16個までしか提供していません。 サーバーには8つのコアがあるため、テスト中に非常に多くのコアを選択しました。



残念ながら、bzip2の速度を上げることは、高い圧縮率では意味がありません。通常、最大、およびウルトラの違いは、0.06%の悲惨なものです。 アルゴリズムは時間的に完全にスケーリングしますが、実際には出力ファイルのサイズはスケーリングしません。 これは非常に奇妙です つまり、サイズを小さくするために、並列化によって得られる時間を費やしたいと思います。



ただし、状況に応じて、最小サイズの縮小でも意味があります。



= + n * ( / + )







たとえば、ファイルを圧縮してネットワーク経由で送信する場合、n = 1であるため、圧縮時間は合計時間に大きく影響します。 インターネットにファイルをアップロードする場合、nは大きいため、大きな圧縮時間は合計時間にほとんど影響しません。

結局のところ、低速ネットワークは低速だが効率的なアルゴリズムでうまく機能しますが、高速ネットワークは高速ですが、おそらく効率の悪いアルゴリズムを必要とします。



一方、5ギガバイトのファイルを2分間で5回圧縮する機能は印象的です。 そのため、7zipアルゴリズムを書き直し、3つ以上のコアで動作するように並列化した場合、7zipアルゴリズムがどれだけ速く動作するかという考えから、私は離れません。




All Articles