2016-04-22 21 views
2

今日私はvmstat待ち列で100%待機しているLinuxシステムを持っていました。vmstat:CPUの待ち時間はどういう意味ですか?

ここで私の質問は次のとおりです。I/Oを待っているときにプロセッサは正確に何をしますか?

私の理解では、CPUが実際には待つことができない - それはいくつかのコードを実行する必要があります! これは、「ディスク割り込みが来るまで待ってください」というコードを厳密に実行していますか? ディスクからの割り込みが到着したときに他のコードを実行していないのはなぜですか?

私の知る限り、ディスクは非常に遅いため、CPUはディスクが準備完了するまで何回も何回も実行できます。

I/Oが何らかの作業をする代わりに、LinuxがCPUに待たせるのはなぜですか? IOデバイスを待っている間にプロセスが「uninterruptible'-状態にある場合

トーマス

答えて

2

IOウェイトが発生します。

現在、特定のシステムコールを実行している場合、プロセスは「中断されません」 - ディスクがスピンアップするのを待つ通常のreadはIO待ちにはならないと思います。特定のハードウェアにアクセスするために使用されるドライバの制限などにより、プロセスが中断された場合、アプリケーションまたはデータ損失の可能性があります。

詳細はウェブを検索した後に入手できます。私はここで答えを見つけた「Linuxの無停電カーネル睡眠が説明」

0

を:http://veithen.github.io/2013/11/18/iowait-linux.html

だから、プロセッサレベルでの「I/Oを待っていること」を意味します。私を待っているよりも プロセッサは何もしていない/ O 。 I/Oを待つ間、プロセッサはユーザーコードを実行できます。この場合、I/Oの待機がなくなりCPU%が上昇します。

リンクされたページのテストケースです。 =は/ dev/nullをBS = 1メガバイト

の=は/ dev/sdaには、あなたが最初にすることを見ることができれば

タスクセット1つのDD: ちょうど最初のCPUにI/Oをたくさんやっているタスクを実行しますCPUは現在、カーネルコード(sy)またはI/O(wa)を待っています:

%Cpu0:0.0 us、2.9 sy、0.0 ni、0.0 id、97.1 wa、0.0 hi、0.0 si、0.0 st

今、私たちは同じCPU上でタイトなCPUループを開始:真しばらく

タスクセット1つのsh -c」;真行うと、d CPUがI/Oを待つよりもやるべきことがあるので、I/O Waitは消えてしまいました。ユーザーランドコードを実行しています。

%のCPU0:91.3たち、1.3 SY、0.0 NI、0.0 ID、0.0 WA、他の誰かを助け0.0やあ、7.3 SI、0.0 ST

願っています!

Grettings、

トーマス

関連する問題