マルチコアとコピー速度


4

私がやりたいのは500Kのファイルをコピーすることです。

サーバー内の1つの宛先から別の宛先にコピーしたい。ほとんどの場合、非常に多くの小さなファイルの電子メールが含まれています。

その23 GB以上のみですが、非常に時間がかかります(30分以上、まだ完了していません)、linux cpコマンドも1 CPUのみを使用します。

したがって、複数のcpを使用するようにスクリプト化すると、高速化されます。

システムは16コア、16 GB RAM、15Kドライバー(15000 RPM SATA)です。

他のオプションは何ですか?

タール化と解凍はさらに時間がかかり、マルチコアを使用しないと思います..


1
大量のファイルをコピーするには大量のディスクI / Oが必要な理由について、この質問に対する私の答えを参照してください。superuser.com
おがくず

回答:


6

あなたのボトルネックはハードドライブの速度です。マルチコアではこれを高速化できません。


ハードドライブ。hdpramでテストすると、278MB / sが返されます。23GBファイルをコピーするのに100秒しかかかりません。マルチスレッドプログラムで複数のCPを使用しても、これは改善されませんか?
Phyo Arkar Lwin

1
いいえ、ありません。ボトルネックは、エンタープライズレベルのギアを使用していない限り、ほぼ確実に物理メディア自体の読み取り/書き込み速度です。
-Shinrai

@ V3ss0n私は、ハードドライブがランダムアクセスではないことを知っています。
Pubby

2
@ Pubby8-ええと、HDDはランダムアクセスデバイスです(ブロック/セクターレベル)。多くの場合、順次ブロックデバイスであるテープ(磁気テープなど)と比較されます。典型的なデバイスは一度に1つのI / O操作しか実行できないと述べているのではないでしょうか。一度に2つの操作を実行できるデュアルポートディスクドライブと呼ばれる動物がいますが、これをかなり複雑にするファイルシステムの問題があります。
おがくず

私が確認したいのは、Pythonで作成したプログラムで、後で種類のパーサー(doc、pdf、emlなど)を使用して複数のファイル形式からテキストを抽出し、後でインデックス付けおよび検索します。最初はスクリプトは単一プロセスのみでしたが、マルチプロセッシングモジュール(高レベルフォーク、フォークと同じ)を使用してマルチプロセスにすると、速度が大幅に向上します。ただし、最大4プロセス、6プロセスIOストールで完全に動作が遅くなり、プロセス全体がフリーズすることさえあります。
ピョーアルカールウィン

3

単一の大きなファイルのコピーは、各操作のセットアップと破棄に大きな遅延があるため、多くの小さなファイルを移動するよりも高速です-また、ディスクとOSは単一の大きなファイルで多くの先読みを行うことができます。そのため、最初にそれをtarすることでより速くなります。tarにかかる時間を考慮に入れると、物事はあまり高速化されないかもしれません。

単一のディスクからしか読み取っていないことに注意してください。そのため、ディスクへの呼び出しを並列化すると、実際には速度が低下し、複数のファイルを同時に処理しようとします。


1
tarを実行するには、すべてのファイルを読み取ってtarを作成し、元のファイルを削除してからコピーを作成する必要はありませんか?間違いなく時間がかかるようです。
Pubby

はい、確かに-私はあなたの答えに同意しました、私はいくつかの追加情報を提供するだけでした。OPが質問を書いた時点でコピーが進行中のように見えることを考えると、それは情報収集の演習のように思われました。最初にtarringを実行すると全体的なパフォーマンスが向上する場合があります。
ポール


0

質問はかなり古いものですが、最良の方法はlbzip2やpbzip2などのマルチコアを使用して圧縮することだと思います。圧縮ファイルを転送し、マルチコアを使用して解凍します。インターネット上のコマンドについて調べることができます。


ディスクリソースの消費が少ない理由を説明できますか?(これがボトルネックである可能性が高い)。
ヘネス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.