7-Zipを高速化する方法


35

私は通常、7-ZipよりもWinRARを使用していますが、それは圧縮が高速で少し効率が悪いからです。7-ZipとWinRARの通常の圧縮と最高の圧縮のデフォルト設定を比較して、さまざまなファイルタイプとサイズでいくつかのテストを行いました。多くの場合、WinRARは50%高速で、実際には100%高速でした。しかし、私はFOSSが好きです。だからここに私の質問があります:

  1. 7-Zipを高速化する方法はありますか?少なくともWinRARの速度と同等になりたい
  2. WinRARでできるように、7-Zipでリカバリセグメントを作成する方法はありますか?何も表示されませんでしたが、コマンドラインの問題かもしれません。
  3. WinRARと7-Zipをそれぞれ最新の安定バージョン(4-dot-something with 7-Zip)を使用してテストしました。9.xベータリリースは、圧縮時に著しく高速ですか?

WinRARの同等の設定で、最小限の圧縮に下げるだけでなく、より高速に話しています。

問題があれば、クアッドコアIntel i7 720(1.6 GHz)/(2.8 GHz)と4 GB DDR3 RAM、64ビットバージョンの7-Zip、デュアルブートDebian x64 5.0.4およびWindows 7を使用しますホーム。


1
#2に関して-7-zipには現在、「回復記録」または「ecc」機能はありません。QuickPar / MultiParやICE ECCのようなサードパーティソフトウェアが必要になりますが、それはアーカイブの一部ではありません。
フレイジャー

回答:


36

7-Zip 9.13ベータ版を入手した場合、アーカイブの種類をLZMA2に変更して、必要なだけスレッドを使用できますが、メモリ使用量は驚くほど増えます。

ベータ版をインストールし、アーカイブしたいものを右クリックして、7-Zipの接続メニューで[アーカイブに追加...]をクリックすると、以下のウィンドウに似たものが表示されます。圧縮方法の下の左側に、「LZMA2」があります。これにより、スレッド数を変更できますが、これは少し下のオプションになります。

これにより、システムに合わせて調整できるため、2コアを超えるプロセッサでパフォーマンスが大幅に向上する可能性があり、通常の圧縮方法では最大2スレッドしか処理できません。

イメージのスレッド数選択ボックスの右側に表示される「/ 1」は、システム内のプロセッサの数であり、したがって推奨されるスレッド数です。私のi7はクアッドコアプロセッサですが、ハイパースレッディング(実際にはここで役立つ)があるため、「/ 8」と表示されます

代替テキスト


Anandtech.comは7-Zipを使用して、マルチコアおよびマルチスレッドCPUで見られるパフォーマンス改善のベンチマークを支援しています。
kmarsh

5
LZMA2を有効にするコマンドライン引数とは何ですか?
djangofan

@Monkubai:私のオフィスのi7 4c-8tでは、設定が何であれ、LZMA2モードで7-zipをフル8コアで実行することはできません。すべての8スレッドを実行できる唯一の方法は、圧縮率が低い(ドロップダウンメニューから)BZip2アルゴリズムを使用していることです。
エドワード

@Edwardどのバージョンを使用していますか?9.20では、そのリストからlzma2を選択すると、最大8コアを使用するオプションが表示されます。
モクバイ

2
@Mokubai 9.20公式バージョン。また、グラフィックUIには何の問題もありません。設定パネルに8/8コアのパラメーターが表示されますが、処理時には実際には<20%CPUしか使用されません。私はこの問題についてSUで簡単な調査を行いましたが、その奇妙な理由をまだ解明していません。-m0 = lzma2 -mmt = 8などのパラメーターを指定してコマンドライン7zを使用すると、圧縮が〜100%のCPUに影響を与えますが、GUIに切り替えると、シングルスレッドモードまたはそのようなものに戻ります... CPUを非常に非効率的な方法で使用します(20%未満)。
エドワード14年

31

各スレッドは複数のファイルを同時に圧縮するように見えるため、非常に大きなzipジョブのパフォーマンスを向上させるためにできる最善の方法は、スレッドを1に設定して、ハードドライブが一度に1つのファイルをシークするようにすることです。

-mmt=off7-zipコマンドラインに追加することにより、毎日のすべてのzipバックアップ手順のパフォーマンスが向上します。複数の小さなファイルから作成された「ビジュアルSVNリポジトリ」のバックアップには、50〜60分かかりました。

では-mmt=off、今では常に5分未満で完了しています!そして、これらの50分間、すべてのサーバーはハードドライブのシークのために非常に低速でした。この5分間、すべてが非常に高速になりました。

マシン上で行うすべての操作について、ハードドライブのアクティビティは常にCPUの処理能力よりも遅くなります。並列処理を無効にし、ハードドライブがファイルを1つずつ順番に読み取り(および書き込み)するようにすることで、ディスクのパフォーマンスを向上させることができます。

また、物理ヘッドは読み取りから書き込みに移動しないため、disk1から読み取り、ZIPをdisk2に書き込むことをお勧めします。

マシンのパフォーマンスを維持しながら最大のZIP速度を得るためのサンプル行:

start "" /wait /belownormal c:\Progra~1\7-Zip\7z.exe a -tzip -mx=1 -mmt=off t:\backup.zip d:\folderToBackup\*

D:そしてT:2つの異なる物理ディスクです


5
これは提案された答えの正反対ですが、実際は正しいことは驚くべきことです。単一のスレッドを使用するように変更することで、アーカイブ操作を12時間から2時間に短縮しました。
N・ジョーンズ

2
本当です。これも私にとってはうまくいきました。おそらく、彼が使用しているので理にかなっています-mx=1(ほとんど圧縮されていません)。圧縮していない場合、ほとんどの作業はHDDによって行われます。-mx=9プロセッサを設定する場合、実際にファイルを圧縮する必要があります。私はそれを試してみる必要がありますが、ボトルネックが何であるか(HDDまたはCPU)に応じて、それはより良い場合も悪い場合もあります。
ディエゴヤンシック

9
この答えは、老化技術に非常に固有のものです。シーク時間が非常に短いため、SSDでこれを試すのはおそらく役に立たないでしょう。ランダムIOPSがボトルネックになる可能性は低くなります。圧縮をほとんど実行しなかったため、あなたのケースは非常に特殊でした。基本的に、ファイルのコピーを行っていました。そのため、回転するHDでのシーケンシャルアクセスが明らかに勝者です。典型的な7zipユースケースは、IOバウンドではなくCPUバウンドである可能性があります。そのためには、すべてのCPUコアを使用することが不可欠です。しかし、同様の状況にある人にとって、あなたのアドバイスは非常に貴重です。
dss539

1
-mmt=offでも使用は高速-m0=lzma2 -mx=5です。(なし-mmt=off実1m27.811s、ユーザー2m4.976s、sys 0m3.729s。あり-mmt=off実1m18.896s、ユーザー1m17.160s、sys 0m1.661s
-ostrokach

スレッドを1に減らすのはかなり遅いようです。20GBのファイルに対して1スレッドで、約2 MB /秒の速度で処理していました。16スレッドでは、約16 MB /秒の速度で処理されていました。
ライトイヤーバズ

0

最近使用したすべての圧縮アルゴリズム(ZIP、RAR、7z、tar / bzip2)は、CPUバウンドではなく、I / Oバウンドです。MacラップトップでMenuMetersを見ると、一定のディスクアクティビティが表示されますが、CPUアクティビティは50%以下です。

したがって、圧縮/解凍を高速化する方法は、ディスクを高速化することです。これは常に可能とは限りません。

これに対する私の「解決策」は、何かを圧縮している間に何か他のことをすることです。:-)


2
ディスクI / OがMattの問題であった場合、WinRARは彼のシステムで7Zipよりも速くディスクから何らかの方法で読み取ることができることを意味します。
foraidt

1
WinRARがよりスマートなディスクI / Oを使用する可能性があります。Info-ZIPのzipは、非常に小さいI / Oバッファーによって妨げられていることを知っています。しかし、そう、圧縮アルゴリズムの違いかもしれません。
10

7zは、高速モードでもI / Oバウンドではありません。
サルジボルシュ14

説明した方法のほとんどは並行して圧縮しないため、CPUの1コアのみが使用されるため、2コアマシンでは50%になります。IOにバインドされているのではなく、MacにCPUがバインドされているのではないかと心配しています。ほとんどのMacにはSSDがあり、ディスクシークに苦しむことはありません。オプションを選択すると、7zは並行して圧縮できます。(tar、zip、bzip、gzip、xsは一般的にはありません)
マーティン

0

私の会社では、古いバージョンの7-zip(4.52ベータ)を使用しており、次のコマンドを実行しています。

"C:\Program Files\7-Zip\7z.exe" a -mx7 -mmt -sfx -xr!*.<exclude_extension> <destination>.exe <source_directory>\* 

これは正常に機能していますが、新しいバージョン16.04(32ビット)にアップグレードした後、パフォーマンスが大幅に低下したため、古いバージョンにダウングレードすることにしました。


0

この例のようなコードを使用するときのパフォーマンスを向上させるもう1つの小さなトリック:

$7zip = "$env:ProgramFiles\7-Zip\7z.exe"
set-alias sz $7zip
$FileZip = "$DiscoZip\temp\$TempFile"
foreach ($DirData in $ListDir) { $out7z = (sz a $FileZip $DirData) }

可能であれば、配列に$ ListDirをサイズの小さい順にリストします。これは、各foreachサイクルで7zipが元のファイルと同じ大きさ(または大きい)の一時ファイルを作成し、その中に新しいファイルを追加するために発生します。私はいくつかのMBの大きなディレクトリが2つ以上あり、1つの大きなGBのディレクトリが2つ以上あり、時間の節約が数分程度の場合で試しました。


これは、既存のアーカイブにファイルを追加するときにのみ適用されると思います。複数のファイルを一度に追加する場合、使用される一時ファイルは1つだけです。新しいアーカイブを作成するとき、一時ファイルはまったく使用されません。
ダニエルB

-1

私の推測では、圧縮/圧縮解除アルゴリズムを書き直さずに7-Zipを高速化することは不可能だと思います。お探しの50〜100%の増加。


6
まったく真実ではありません。デフォルト設定を変更するだけで、7-zipを大幅に高速化できます。実際、デフォルトの設定は、最小のファイルサイズ(および最も遅い圧縮アルゴリズム-BZip2)に合わせて調整されています。ZIPに変更し、LZMA圧縮を「最速」に設定すると、非常に高速になります。
NickG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.