私がiowaitについて読んだのと同じくらい、それはまだ私には謎です。
IO操作が完了するのをCPUが待機する時間であることがわかりますが、正確にはどのようなIO操作ですか?私もわからないが、なぜそれがそんなに重要なのか?IO操作の完了中にCPUが何か他のことをしてから、データの処理に戻ることはできませんか?
また、どのプロセスがIOを正確に待機したかを診断する適切なツールは何ですか。
また、IO待機時間を最小限に抑える方法は何ですか?
私がiowaitについて読んだのと同じくらい、それはまだ私には謎です。
IO操作が完了するのをCPUが待機する時間であることがわかりますが、正確にはどのようなIO操作ですか?私もわからないが、なぜそれがそんなに重要なのか?IO操作の完了中にCPUが何か他のことをしてから、データの処理に戻ることはできませんか?
また、どのプロセスがIOを正確に待機したかを診断する適切なツールは何ですか。
また、IO待機時間を最小限に抑える方法は何ですか?
回答:
IO操作が完了するのをCPUが待機する時間であることがわかりますが、正確にはどのようなIO操作ですか?私もわからないが、なぜそれがそんなに重要なのか?IO操作の完了中にCPUが何か他のことをしてから、データの処理に戻ることはできませんか?
はい、オペレーティングシステムは他のプロセスがIOでブロックされている間に実行されるようにスケジュールします。ただし、そのプロセス内では、非同期IOを使用していない限り、IO操作が完了するまで進行しません。
また、どのプロセスがIOを正確に待機したかを診断する適切なツールは何ですか。
役立つツール
iostat
、ディスクのサービス時間を監視するiotop
(カーネルがサポートしている場合)、プロセスごとのIOリクエストの内訳を監視するためstrace
、プロセスによって発行された実際の操作を確認するまた、IO待機時間を最小限に抑える方法は何ですか?
古い質問は、最近衝突しましたが、既存の答えが不十分であると感じました。
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です。
Dave CheneyとXerxesの投稿を見る
しかし、単純なものtop
も表示され%wa
ます。
また、他の人が言ったことに加えて、私たちは現在2013年に近づいているので、単に素晴らしいIOストレージデバイス、すなわちSSDのオプションが手頃な価格です。SSDは素晴らしいです!!!
iowait
iowait
プロセッサが待機している(つまり、アイドル状態で何もしない)時間であり、その間に実際に未処理のディスクI / O要求がありました。
これは通常、ブロックデバイス(メモリではなく物理ディスク)が遅すぎるか、単に飽和していることを意味します。
したがって、システムの平均負荷が高い場合、およびそのほとんどが実際にI / O待機によるものであることを検査で確認した場合、必ずしもシステムに問題があるとは限らないことに注意してください。マシンは、I / Oにバインドされたプロセス(つまり、他の何よりも多くのI / Oを実行するプロセス(I / Oにバインドされていないシステムコール)以外に何もしません。また、システムで行うことはすべて非常に応答性が高いという事実からも明らかです。
道具
sar
(sysstat
ほとんどの* nixマシンで利用可能なパッケージから)iostat
sarface
(へのフロントエンドsar
)iowait
影響しLoad Average
ますか?たとえば、ネットワークを待機する100スレッド、LAは100になりますか?
このリンクの説明と例は非常に有用であることがわかりました。「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問題がないという意味ではありません。
全文は読む価値があります。ここで、このページのミラーが、それがダウンした場合には、。
どのようなIO操作がアプリケーションとセットアップに依存します。
場合によっては、CPUが続行する必要があるデータまたは命令を取得できないため、重要です。場合によっては続行できますが、実行できるアプリに依存します。大量のディスクアクセスを行うシングルスレッドアプリケーションがある場合は、待つ必要があります。
IO時間を最小限に抑えるには、より多くのより高速なメモリを購入し、より高速なディスクを取得し、お持ちのディスクを最適化します。
それがボトルネックである社内アプリケーションである場合、より大きなブロックでの読み取りやIOの非同期実行に最適化できるかどうかを確認してください。
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/