上記の質問のとおり、7zip (具体的には Linux 上の p7zip) は、アーカイブのテスト中にディスク領域を使用しますか? 作業に使用できるドライブは 2 TB のみで、アーカイブのサイズは 800 GB ~ 1 TB の範囲であるため、1 つのアーカイブだけではなく 2 つのアーカイブを同時にテストすることを考えていました。
7zip の公式ドキュメントには、テスト中のディスク使用量については記載されていません。
答え1
そんなことはないはずです。(でも、そうなるかもしれません)
アーカイブを解凍するときにアーカイブ内のデータが正しいことを確認するために、すべてのファイルまたはデータ ブロックには CRC またはエラー検出コードが関連付けられます。
ファイルを解凍する際には、効率の観点から、エラーチェックを行うことが非常に理にかなっています。前にデータをディスクに書き込む。そうしないと、アーカイブから読み取り、それをディスクに書き込み、エラー チェックを行うためにディスク上のデータを再度読み取るという貴重なリソースを無駄にすることになります。アーカイブが大きい場合やメモリが制限されているシステムでは、ファイルの解凍にかかる時間が 2 倍になる可能性があり、これは許容できません。この場合、ディスクの読み取りと書き込みがプロセスの中で最も遅い部分であると想定しています。
書き込み前にチェックを行うと、アーカイブをデコンプレッサー、エラー チェック アルゴリズムを介して効果的にストリーミングし、ディスクに出力して、ディスク サブシステムが何を実行しているかを認識していると想定できます。これで完了です。
このようにすることで、アーカイブの「テスト」は無料の操作になります。解凍の場合とまったく同じ手順に従いますが、データをディスクに書き込まずに破棄するだけです。
私はこれが動作方法であると強く期待しています。なぜなら、アーカイブをテストするためだけにすべてをディスクに書き込むのは無謀に思えるし、データの「実際の」解凍よりも速くはないでしょう。「テスト」が速いということは、少なくとも 1 つのステップ (おそらくディスクへのデータの書き込み) がスキップされることを意味します。
答え2
いいえ、少なくとも 19.00 バージョンではそうではありません。
複数のファイルを並行してテストすることは、ソリッド ステート ドライブではうまく機能しますが、通常、機械式ドライブではパフォーマンスが低下します。複数のアーカイブを並行して読み取るには、多くのシークが必要になります。したがって、次の推奨事項が考えられます。
ソリッド ステート ドライブ (NVMe または SATA SSD) 上のアーカイブをテストする場合は、コアの数と同じ数のプロセスを起動します (可能な場合)。
同じ機械ドライブ (または機械 RAID ボリューム) 上のアーカイブをテストする場合は、1 つ、または最大 2 つのプロセスを起動します。
USB ドライブ上のアーカイブをテストする場合、結果は異なります。
一般的な USB「ペンドライブ」または「スティック」の悲しいことに、大多数は読み取り時でさえ非常に遅いです。つまり、USB インターフェイスの帯域幅を飽和させるにはほど遠いのです。このようなドライブの中には、ドライブの複数の異なる領域から同時にデータにアクセスすると、さらに遅くなるものもあります。これは、ディスク コントローラの RAM が限られているために発生します。コントローラは、ドライブ全体にアクセスするために必要なすべてのメタデータを RAM に一度に格納することができず、ドライブの読み取り領域を変更するたびにフラッシュ メディアからメタデータを再読み取りすることになり、多くの場合、リンク チェーンをたどってメタデータを探す必要があります。このようなメタデータの読み取りは、フラッシュ メモリのレイアウトで可能であっても、ドライブによって並列化されないことが多く、また、単に遅い専用のコード パスを使用して実装されることも少なくありません。
これに対処する唯一の確実な方法は、帯域幅テストを行うことです。アーカイブa
、b
、c
、d
、e
をf
、サイズがほぼ同じ桁数で検証する必要があるとします。これらは、サイズの降順で並べ替える必要があります。まず、 の検証にかかる時間を計測しa
、帯域幅 を計算します。次に、とBW_a = time_a / size_a
の検証を並行して行い、それらの帯域幅を計算します。それらの合計が より大きい限り、パフォーマンスが向上します。次に、 、 を並行して検証し、それらの帯域幅を計算します。それらの合計が より大きい限り、パフォーマンスが向上します。これを繰り返します。最終的に、前のテストと比較して合計帯域幅が低下するストリーム数に到達します。前のより少ない数のストリームを使用して、残りのアーカイブの検証を続けます。b
c
sum_BW_bc
BW_a
d
e
f
sum_BW_def
sum_BW_bc
この方法はどのドライブにも適用できますが、機械式ドライブのパフォーマンス低下が急激であるため、検証プロセスの全体的なパフォーマンスに過度の影響を与える可能性があります。そのため、並列テストは、帯域幅が前のステップの帯域幅の 90% 未満であることがわかった時点で終了する必要があります。これを行うには、テストの実行中 1 秒ごとに帯域幅を再計算し、帯域幅がカットオフ ポイントを下回ったらテストを終了します。