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に切り替えるとどうなるか見てみましょう。
同じマシンで同じファイル(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使用率bzip2使用時のCPU使用率Bzip2は、並列化に3つ以上のコアを使用します。 彼が使用できるカーネルの数はわかりませんが、ドロップダウンメニューで、7zipはbzip2のカーネルを16個までしか提供していません。 サーバーには8つのコアがあるため、テスト中に非常に多くのコアを選択しました。
残念ながら、bzip2の速度を上げることは、高い圧縮率では意味がありません。通常、最大、およびウルトラの違いは、0.06%の悲惨なものです。 アルゴリズムは時間的に完全にスケーリングしますが、実際には出力ファイルのサイズはスケーリングしません。 これは非常に奇妙です つまり、サイズを小さくするために、並列化によって得られる時間を費やしたいと思います。
ただし、状況に応じて、最小サイズの縮小でも意味があります。
= + n * ( / + )
たとえば、ファイルを圧縮してネットワーク経由で送信する場合、n = 1であるため、圧縮時間は合計時間に大きく影響します。 インターネットにファイルをアップロードする場合、nは大きいため、大きな圧縮時間は合計時間にほとんど影響しません。
結局のところ、低速ネットワークは低速だが効率的なアルゴリズムでうまく機能しますが、高速ネットワークは高速ですが、おそらく効率の悪いアルゴリズムを必要とします。
一方、5ギガバイトのファイルを2分間で5回圧縮する機能は印象的です。 そのため、7zipアルゴリズムを書き直し、3つ以上のコアで動作するように並列化した場合、7zipアルゴリズムがどれだけ速く動作するかという考えから、私は離れません。