CPUがIO(wa)に時間を費やしたのはなぜですか?


18

私はwa(でtop)I / Oを待ってCPU時間を測定することを知っています。多くの記事がそう言っています。

しかし、私はそれを混乱させています、2つの知識ポイントに基づいて:

  1. プロセスがシステムコールを使用してディスクを読み取る場合、プロセスはブロックされます。
  2. プロセスがブロックされている場合、CPUで実行するようにスケジュールすることはできません。

正しい?

CPUがI / Oを待機する時間がないようです...どうなりますか?

さらに読むために私のためにいくつかの本や記事をお勧めする場合は、はるかに良い。


私は足を踏み入れ、適切な答えを書きました。申し訳ありませんが、私が必要なときにそこにいませんでした;-)
アレックティール

回答:


22

CPUのアイドル状態は、二つの異なる「サブ」-statesに分かれていますiowaitidle

CPUがアイドル状態の場合、カーネルは、そのCPUから開始されたローカルディスクまたはリモートマウントディスク(NFS)に対して現在進行中のI / Oが少なくとも1つあるかどうかを判断します。ある場合、CPUは状態にありiowaitます。そのCPUから開始された進行中のI / Oがない場合、CPUはidle状態にあります。

だから、iowaitCPUがアイドル状態である時間の割合である、そのCPUから開始され、進行中の少なくとも1つのI / Oがあるが。

iowaitカウンタは、システムがより多くの計算作業を処理できることを述べています。CPUがiowait状態にあるからといって、そのCPU上で他のスレッドやプロセスを実行できないという意味ではありません。

ですから、iowait単なるアイドル時間です。


これは実際には間違っています。また、NFS-CPUにはその概念さえありません。基本的には、CPUが低レベルのIOを処理しているため、他の何かを実行できないためにCPUが費やした時間です。接続されている何かにアクセスするという意味では、通常ファイルやその他を読み取るI / Oを処理しません。たとえば、Raspberry PiにはDMAコントローラーがないので、CPUは「マザーボードからここからこのバイト数を読み取り、ここからRAMに入れる」ことはできません。手動で行う必要があります
Alec Teal

そのため、カードの読み取りが完了するまでのように、ioを常に待機します。キャッシュミスはこの「io wait」(もちろんカウントされません)で測定できるように聞こえますが、IO waitは次のように定義されます:カーネルが低レベルデバイスI / Oルーチン内で費やした時間-例RPiは、文字通りカードから読み取り手順を実行する必要があり、CPU(DMAなしのチャンプである)はIOバス上のデータを待機する必要があります。DMAコントローラと、それはコントローラに話すと言いますが、「あなたが完了したら、教えて」 -それを残して他のものを行うためにDMAコントローラがデバイスIOを行いながら
アレック・ティール

dstatを使用してIOwaiting BTWを確認します。また、iowaitとカーネルの処理に費やされた時間をプロセスごとに実際に測定することはできません。「ファイル」への「書き込み」という2つのプロセスがあり、最初のプロセスはすぐに完了し、FSは何らかの理由で書き込みをキャッシュすることを選択し、2番目のプロセスはキャッシュをフラッシュさせます。書き込みから、書き込みを引き起こしたプロセスへ。I / O待機でも同じです。これがプロセスごとに測定されない理由です。
アレックティール

4
@AlecTeal:いいえ、それは正しく、コメントは間違っています。iowaitは、I / Oを処理せずに、I / Oでブロックされた時間をカウントします。カーネルソースを読み取ってこれを確認したくない場合は、実験を試してください。ネットワークファイルシステムをマウントし、ファイルの読み取りを開始してから、リモートマシンからファイアウォールを外します。プロセッサが完全にアイドル状態であっても、iowait時間は依然として長くなります。
デビッド

1
この答えをテストしました。dd if=/dev/sda of=/dev/null高くするwa。次に、のwa代わりにwhile-trueコードを実行しusます。カオスに感謝します。
HUAディ

-2

この質問を完全に理解しているわけではありませんが、いくつかのアイデアがあります。

これを尋ねる別の質問があり、いくつかの良い答えがあります:IOWaitが何であるかを正確に説明できますか?

ここに良い投稿があります:http : //veithen.github.io/2013/11/18/iowait-linux.html


7
マイク、答えはコンテンツへのリンクだけでなく、コンテンツを含むことが望ましいです。ここにコンテンツを提供することで、これらのリンクがなくなっても答えに価値があることを確認できます。
EEAA

1
@EEAAその後、回答は編集する必要があります。または、コメントに移動できます。有用な情報がまだ含まれています。Downvotesは、情報がほとんど見えないようにすることによっても、情報が役に立たないということを意味しますか?私はあなたが下票をしたと言っているのではなく、人々がここで持っているアプローチについて疑問に思っています。
ローランドピフラカス

3
@RolandPihlakasそれはやる気の問題です。この状況でのDownvote + commentは、ユーザーが答えを修正する動機を与えます。答えが修正されたら、喜んで私のdvを削除します。これらを編集すると、悪い動作が可能になるため、逆効果です。我々は年間を通じて複数のユーザーを持っていただけで、これまでそうしない求められているにもかかわらず、リンクのみの回答を掲載します。ユーザーがわざわざ自分の回答に少しでも努力することができない場合は、作業を修正することでユーザーを支援するつもりはありません。
EEAA

@EEAA精巧な回答をありがとう。あなたのアプローチは理解可能であり、あなたのコメントを通してあなたは答えの作者にもやる気を起こさせます。対照的に、私は、サイレントダウンボットはほとんど明確ではないので、実際的な動機付けを提供しないのではないかと考えています。しかし、私は少し不正確でした-私は主に答えがなぜそれがグレーアウトされるほどダウン投票されたのだろうと思っていましたか?1つまたは2つの下票であなたのコメントは十分でしたか?
ローランドピラーカス

2
@RolandPihlakas人々は答えが役に立たないと思ったので、彼らは投票しました。彼らは火曜日だからダウン票を投じた。今日ミネアポリスで雪が降っているので、彼らはダウン票を投じた(実際、そうであり、これは春の終わりではないはずだ)。知るか。
EEAA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.