2010-11-27 13 views
16

これはわずかにOTかもしれませんが、IOを頻繁に使用するプロセス(同じディスク上のある場所から別の場所へのcpの大きなファイル)を使用すると、CPUのほとんどが処理されているプロセスでさえも、すべてが遅くなります。私は両方のOSで私は頻繁に(Mac OS XとLinux)を使用して気づいた。IOレートが高いと、Linux上のすべての処理が遅くなるのはなぜですか?

特にマルチコアが本当に役に立たないのは、コモディティハードウェア(ディスクコントローラなど)のハードウェアの制限なのか、OSの制限なのか、または本質的に適切なリソース(スケジューリング)?

+2

Windowsのすべてが遅くなります。 CPUがBUSの操作とCPUの操作を同時に管理することができないからだと私は信じていますが、ここにいる誰かがより良い応答を持っていると確信しています。 –

+1

Windowsでは状況が非常に悪いです。 WindowsはIOスループットを抑えて、使えるようにしようとしています。このため、多くのベンチマークではパフォーマンスがあまり良くありません。 –

+0

"ほとんどCPUにバインドされたプロセスさえも" - これらのプロセスは "I/Oバウンド"になるかもしれません。つまり、* RAM * I/Oです。私は、あなたがオンボードキャッシュでデータを実行している/実行しているCPUバインドされたプロセスを見つける(または作る)ことができれば、その物語は違うだろうと思います。 – ChrisW

答えて

2

大きなファイル(使用可能なバッファキャッシュよりも大きいサイズ)をコピーすると、通常はバッファキャッシュを経由するため、最近使用されなかったページがスローされます。

時折IOの小さな少量をやっている

他のプロセスは、(単にディレクトリをstat'ing言う)その後、それらのキャッシュはすべて吹き飛ばさ取得し、物理的な操作を行う必要があります後ろにそれらのページを持って読み込む。

うまくいけば、これは固定され得ることができますこの種のものを検出し、それに応じて(例えばposix_fadviseを使って)カーネルにアドバイスするコピーコマンドによって、ファイルを大量に一括して転送する必要がない後で読み取られても、バッファ・キャッシュからすべてのクリーン・ページが完全に破棄されることはありません。

+0

これは、ファイルシステムのキャッシュであり、CPUのキャッシュではないと言っています。 – ChrisW

+0

はい、ファイルシステムのキャッシュだと思います。コピーコマンドは、大部分のキャッシュを吹き飛ばすことなく、原則として非常に大きなファイルをコピーすることができます。それは単に彼らが典型的にそうでないことです。 – MarkR

+0

あなたの答えがカフェのものよりも正しいかどうかを確認する簡単な方法はありますか?どちらも私にとっては妥当なようです。私はposix_fadviseについて知らなかった。 POSIX_FADV_DONTNEEDを使用して単純なcpを実装すると、バッファキャッシュが破棄されるのを防ぐことができますか? –

1

通常、高いIO処理速度は、CPUが処理する必要のある割込みの割合が高いことを意味し、CPU時間がかかります。

cpの場合、各データブロックがユーザー空間との間でコピーされるため、かなりの量の使用可能なメモリ帯域幅も使用されます。これはまた、他のプロセスが必要とするデータをCPUキャッシュおよびTLBから取り出す傾向があり、キャッシュミスを起こすと他のプロセスが遅くなる傾向があります。

+0

割り込みレベルで費やされたCPU時間に直接起因しているとは思いません。CPU使用率全体に占める割合はそれほど高くありません。 – ChrisW

+0

各CPUに独自の半独立キャッシュがありますか?もしそうなら、CPUバインドされたプロセスを実行しているCPUのキャッシュからデータが取り出されることは確実ですか? – ChrisW

+0

@ChrisW:OPは "マルチコア"と言います。同じパッケージ内の2つのコアが同じL2キャッシュを共有することが多く、CPUと競合するタスクの数によっては、実行中のCPU上で 'cp'がスケジュールされることがありますCPUバインドタスク – caf

4

現在のスケジューラには制限があります。 Googleの "Galbraithのスケジュール:autogroup patch"または "linuxの奇跡のパッチ"(本当にはい!)そこ洗練されているプロセスで200行のパッチは明らかだと、グループスケジュールを追加する程度Linus saysた合併:

私は何それはインタラクティブなパフォーマンスにしても非常に満足しています。 確かに、私の "テストケース"は実際には( ウェブブラウザで電子メールを読んで、少しスクロールしながら、同時に カーネルで "make -j64"を実行しています)、テストケースです私にとっては非常に関連している です。そしてそれは巨大な改善です。

前と後のビデオhere

+0

どういうわけか私はこれは無関係だと思いますが、言及するのはいいことです。パッチはIOでなくCPU競合と関係しています。 –

+0

私はそれが無関係であることがわかりません。 Linuxは、自分自身がI/O境界であると想定していたプロセスを大幅に助けたと指摘した。 – Ken

+0

はい、私はあなたが正しいと思います。 –

0

また、Linuxでの仮説を検証する方法を知っていますか? IOの集中的な操作を実行しながら割り込みの数。割り込みをどうする

、私はカフェの仮説があると推測している:毎秒

  • 多くの割り込み。
  • 割り込みは、任意の/すべてのCPUによって処理されます。
  • したがって、CPUキャッシュをフラッシュします。

テストする必要がある統計情報は、1秒あたりの割り込み数です。

詳細については、http://www.google.com/#q=cpu+affinity+interruptを参照してください。割り込みを単一のCPUに割り当てることができるかどうかはわかりません。

これは私が理解していないことです(これは初めてこの質問を見ました):私のラップトップのperfmon(Windows Vistaを実行中)は、ほとんどの場合、2000割り込み/秒アイドル(perfmonを表示して何もしません)。私はどのデバイスが2000割り込み/秒を生成しているのか想像できません。CPUキャッシュを吹き飛ばすには十分だと思いました(私の推測では、ビジーなスレッドのCPUクォンタムは50ミリ秒のようなものです)。それはまた、平均350DPC /秒を示しています。

ハイエンドハードウェアにも同様の問題がありますか?

ハードウェアの違いの1つに、ディスクハードウェアとディスクデバイスドライバがあり、割り込みやその他の競合が多かれ少なかれ発生する可能性があります。

+0

リアルタイムクロック、マウスの動き、キーボードの押下はすべて割り込みによって処理されます –

関連する問題