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

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アルゴリズムがどれだけ速く動作するかという考えから、私は離れません。

Source: https://habr.com/ru/post/J53217/


All Articles