web-dev-qa-db-ja.com

中/高中のパフォーマンスが遅いIO

Windows XPネットワークまたはディスクのいずれかのIOの維持中にパフォーマンスが低下するマシン。CPUとメモリの使用量はどちらも最小限であり、Process Explorerによるとシステム+割り込みの使用量は5%未満です。メモリ使用量は20%未満です(維持されたディスクまたはネットワークIO 〜150KB/s以上の場合、大幅な速度低下が発生します。最も顕著なアプリ(すべてアプリ)の起動が非常に遅くなります(小さなHello MinGWでコンパイルされたWorldCアプリは、printf()メッセージを表示して終了するのに12秒かかりました。)

これは正常ですか?そうでない場合、何が起こっているのですか?これも可能な最大I/Oではありません... HDDの場合は100MB /秒、ネットワークの場合は5MB /秒のようなものに簡単に到達できますが、150KB /秒を超えるとこの動作が発生します。

Dell Inspiron 1545、Intel P8600 Core2 Duo @ 2.4GHz、4GB RAM、500GB HDD

3
user73728

あなたが見ているのは、ディスクI/Oに関する通常のWindowsPCの動作だと思います。確認のために、Windowsエクスペリエンスインデックス(インデックス?)が非常に似ているWindows7を実行している2台のPCを比較することができました。最初のPCは、P8600 @ 2.4GHzおよび2.5 "SATA II 5400rpmドライブを備えたThinkpadラップトップです。もう1つのPCは、Athlon 64X2デュアルコア3800+および3.5" SATA7200rpmドライブを備えたデスクトップです。大きな(数ギガバイト)ファイルのlocal_diskからdiskへのコピーを開始します。そのファイルのコピーが進行している間、私はアプリケーションプログラムを起動しようとしました。両方のPCの一般的な遅延は、10〜20秒のオーダーでした(遅延はおそらくアプリのプログラムサイズと相関している可能性があります)。

デスクトップPCには2つのHDDがあるので、一方のディスクドライブでファイルのコピーを実行してから、もう一方のHDDからアプリをロードすることもできました。 2つの独立したディスクドライブを使用すると、アプリは約2〜5秒で起動しました。

この問題は「ネットワークI/O」でも発生するとおっしゃっています。シングルエンドのデータ転送を実行しない限り(たとえば、* nixの/ dev/nullなどのビットバケットへのネットワークデータ)、おそらくディスクファイルをソースまたは宛先として使用します。 「ネットワークI/O」を生成します。したがって、ディスクI/Oは、「ディスクI/O」、「ネットワークI/O」、およびアプリの起動が遅いという一般的なアクティビティとして現れます。

これは、ウィンドウのスケジューリングの癖である可能性があります。I/ Oを集中的に使用するタスク(ファイルコピーなど)は、個々の読み取りまたは書き込み操作が完了すると、スケジューリングの優先順位を取得する可能性があります(プロセスのアイドル時間を補うため)。待機し、I/Oスループットを維持することを余儀なくされました)。このI/O集中タスクがアクティブな間に開始された別のタスク/プロセスは、I/Oスケジューリングの不利になる可能性があります。私は別のオペレーティングシステムで同様の癖を見てきました:私はマルチユーザーシステム(Unixではない)でデータベースコピーユーティリティを開発していました。ユーティリティは、実行中に他のすべてのユーザーのシステムの速度を低下させたため、スケジューラーまたはジョブの優先順位を自分の利益のために不正に操作したと非難されましたが、そうではありませんでした。

2
sawdust

帯域幅は話の半分にすぎません。ランダムI/Oの場合、I/Oがキューに入れ始めるポイントまですべてが遅くなる可能性があります。

Perfmon.exeを起動し、平均ディスクキュー長および転送あたりの平均秒数カウンターを確認する必要があります。

0
surfasb