誰もIOWaitが何であるかを正確に説明できますか?


194

私がiowaitについて読んだのと同じくらい、それはまだ私には謎です。

IO操作が完了するのをCPUが待機する時間であることがわかりますが、正確にはどのようなIO操作ですか?私もわからないが、なぜそれがそんなに重要なのか?IO操作の完了中にCPUが何か他のことをしてから、データの処理に戻ることはできませんか?

また、どのプロセスがIOを正確に待機したかを診断する適切なツールは何ですか。

また、IO待機時間を最小限に抑える方法は何ですか?


また、高iowaitとは何ですか?
ムハメドフセインバシッチ

回答:


99

IO操作が完了するのをCPUが待機する時間であることがわかりますが、正確にはどのようなIO操作ですか?私もわからないが、なぜそれがそんなに重要なのか?IO操作の完了中にCPUが何か他のことをしてから、データの処理に戻ることはできませんか?

はい、オペレーティングシステムは他のプロセスがIOでブロックされている間に実行されるようにスケジュールします。ただし、そのプロセス内では、非同期IOを使用していない限り、IO操作が完了するまで進行しません。

また、どのプロセスがIOを正確に待機したかを診断する適切なツールは何ですか。

役立つツール

  • iostat、ディスクのサービス時間を監視する
  • iotop (カーネルがサポートしている場合)、プロセスごとのIOリクエストの内訳を監視するため
  • strace、プロセスによって発行された実際の操作を確認する

また、IO待機時間を最小限に抑える方法は何ですか?

  • OSがメモリ内のディスクブロックをキャッシュできるように、空き物理メモリがあることを確認します
  • 過度の断片化を避けるために、ファイルシステムのディスク使用量を80%未満に保ちます
  • ファイルシステムを調整する
  • バッテリーバックアップアレイコントローラーを使用する
  • io操作の実行時に適切なバッファサイズを選択する

6
「バックエンドストレージがI / O負荷に対応するのに十分な速度であることを忘れないでください」。
jgoldschrafe

1
@Dave Cheney、私のプロセスがアイドル状態のとき、それはIOを待っているからです。それでは、IOWaitとidleの違いは何ですか?
ctrl-alt-delor

4
IOwaitの場合、プロセスは「無停電スリープ」状態にあり、ディスク上のデータが破損するリスクを回避するために、強制終了できません。通常のアイドルプロセスは実際には何も実行していないため、それを殺すリスクが少なくなります。
mveroone 14年

1
実質的には、IOが遅すぎることを意味します。「サーバーの高速化」は、CPUが制限されているか、CPUが飢starしているかによって異なります。誰かが遅いノートブックディスクでデータベースサーバーを実行するのに十分であると判断し、IO負荷によりCPUが使用可能な2%しか使用しないためですIOが終了するのに夢中です。
トムトム14年

OMGここのトップ3の答えがそんなに間違っているとは信じられません。以下のharidsvによる答えは正しいです。ioの完了を「待機」しているCPUはありません。はい、一部のioがブロックされる可能性があります-多くの場合、これには正当な理由があり、状況によってはすべてのioがブロックされる可能性があります。ただし、完全に非同期の操作でiowaitが発生することも確認できます。
symcbean

47

古い質問は、最近衝突しましたが、既存の答えが不十分であると感じました。

IOWaitの定義とプロパティ

IOWait(通常%waは上部にラベル付け%idleされます)は、アイドルのサブカテゴリです(通常、定義されたサブカテゴリを除くすべてのアイドルとして表されます)。つまり、CPUは何もしていません。したがって、CPUが処理できる別のプロセスがある限り、処理を行います。さらに、アイドル、ユーザー、システム、iowaitなどは、CPUに関する測定値です。つまり、iowaitは、ioを待機することによって発生するアイドルと考えることができます。

正確に言えば、iowaitは、ハードウェア割り込みの受信と処理に費やされた時間であり、プロセッサティックの割合として表されます。通常、ソフトウェア割り込みはとして個別にラベル付けされ%siます。

重要性と潜在的な誤解

IOWaitは、多くの場合、IOでボトルネックになっているかどうかを知るための重要な指標であるため、重要です。ただし、iowaitがなくても、アプリケーションがIOでボトルネックにならないわけではありません。システムで実行されている2つのアプリケーションを検討してください。プログラム1がioボトルネックで、プログラム2がCPUのヘビーユーザーである場合、CPUの使用%user + %system率は〜100%のようになり、それに応じてiowaitは0を表示します。これはすべてCPUの観点からであるため、プログラム1です。

IOWaitを検出するツール

Dave CheneyとXerxesの投稿を見る

しかし、単純なものtopも表示され%waます。

IOWaitの削減

また、他の人が言ったことに加えて、私たちは現在2013年に近づいているので、単に素晴らしいIOストレージデバイス、すなわちSSDのオプションが手頃な価格です。SSDは素晴らしいです!!!


35

iowait

iowaitプロセッサが待機している(つまり、アイドル状態何もない)時間であり、その間に実際未処理のディスクI / O要求がありました。

これは通常、ブロックデバイス(メモリではなく物理ディスク)が遅すぎるか、単に飽和していることを意味します。

したがって、システムの平均負荷が高い場合、およびそのほとんどが実際にI / O待機によるものであることを検査で確認した場合、必ずしもシステムに問題があるとは限らないことに注意してください。マシンは、I / Oにバインドされたプロセス(つまり、他の何よりも多くのI / Oを実行するプロセス(I / Oにバインドされていないシステムコール)以外に何もしません。また、システムで行うことはすべて非常に応答性が高いという事実からも明らかです。

道具

  • sarsysstatほとんどの* nixマシンで利用可能なパッケージから)
  • iostat
  • sarface(へのフロントエンドsar

7
厳密に言えば、I / O待ち時間の定義はシングルプロセッサシステムでのみ有効です。マルチプロセッサシステムの場合は、多少改良する必要があります:veithen.blogspot.be/2013/11/iowait-linux.html
アンドレアスヴェイテン

どの程度iowait影響しLoad Averageますか?たとえば、ネットワークを待機する100スレッド、LAは100になりますか?
イヴァンバラショフ

32

このリンクの説明と例は非常に有用であることがわかりました。「iowait」とは正確には何ですか?。ところで、完全を期すために、ここでのI / OはディスクI / Oを指しますが、この他の投稿で説明されているように、ネットワークにマウントされたディスク(nfsなど)のI / Oも含めることができます。

私はいくつかの重要なセクションを引用します(リンクが機能しなくなった場合)、それらのいくつかは他の人がすでに言ったことの繰り返しになりますが、私には少なくともこれらはより明確でした:

1つの文にまとめると、「iowait」はCPUがアイドル状態で、少なくとも1つのI / Oが進行している時間の割合です。

各CPUは、user、sys、idle、iowaitの4つの状態のいずれかになります。

1つのプロセスがI / Oを待っている間に、システムに実行可能な他のプロセスがある場合、どうなるのかと思っていました。以下で説明します。

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

次に例を示します。

CPUで実行されている2つのプログラムがあるとしましょう。1つは、ディスクから読み取る「dd」プログラムです。もう1つは、I / Oを実行しないプログラムですが、その時間の100%を計算作業に費やしています。ここで、I / Oサブシステムに問題があり、物理I / Oが完了するまでに1秒以上かかっていると仮定します。I / Oが完了するのを待っている間、「dd」プログラムがスリープしているときはいつでも、他のプログラムはそのCPUで実行できます。クロック割り込みが発生すると、常にユーザーモードまたはシステムモードでプログラムが実行されます。したがって、%idleおよび%iowaitの値は0になります。iowaitが0になったとしても、物理I / Oが完了するのに1秒以上かかる場合は明らかにI / O問題があるため、I / O問題がないという意味ではありません。

全文は読む価値があります。ここで、このページのミラーが、それがダウンした場合には、。


1

Solarisでは、実行中のI / O操作を確認する必要がある場合、DTraceを使用してプロセスの実行内容を確認します。Linuxの場合、systemtapと呼ばれる同様のプログラムがあり、カーネルとプロセスの呼び出しに対して同様のレベルの露出を提供します。

DTraceを学習するときに使用した1つの例は、cpコマンドとコマンドを比較することddでした。主にデフォルトでバッファサイズが使用されているため(dd書き込みを正しく覚えている場合)、書き込みでcpはなく読み取りが多くなることがわかりddます。


0

どのようなIO操作がアプリケーションとセットアップに依存します。

場合によっては、CPUが続行する必要があるデータまたは命令を取得できないため、重要です。場合によっては続行できますが、実行できるアプリに依存します。大量のディスクアクセスを行うシングルスレッドアプリケーションがある場合は、待つ必要があります。

IO時間を最小限に抑えるには、より多くのより高速なメモリを購入し、より高速なディスクを取得し、お持ちのディスクを最適化します。

それがボトルネックである社内アプリケーションである場合、より大きなブロックでの読み取りやIOの非同期実行に最適化できるかどうかを確認してください。


さて、iowaitはブロッキング IO操作に費やされた時間ですか?
ピータークルミンズ09年

たとえば、select()またはpoll()を実行してブロックした場合、記述子が使用可能になるまで待機する時間がiowait時間になりますか?
ピータークルミンズ09年

それはプログラミングの質問のように見えるので、それはSOに属すると思います。
ジェレミーフランス語

Peteris-はい、それについて考えるのに良い方法です。
user2278 09年

0

ps auxを使用すると
、statがDまたはDsの場合にプロセスSTATを出力できます。プロセス
が無停止スリープに入ると、プロセスは無停止スリープ(通常IO)になり、runqueueのnr_iowaitが追加され、nr_iowait> 0の場合、CPUのアイドル時間がカウントされますiowaitへ

vmstatは、プロセスブロック
の数も示します。r:ランタイムを待機しているプロセスの数。
b:割り込み不可能なスリープ状態のプロセスの数。

http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.