web-dev-qa-db-ja.com

IO待機使用率と負荷平均の関係は何ですか

負荷平均は、実行中または実行可能であるか、中断されないスリープ状態にあるプロセスを使用します。では、中断のないスリープ状態のプロセスは、topコマンドのように%waに対応していますか?どちらもIOを待機しているスレッドを参照しているため、一方が増加すると、もう一方も増加すると想定するのは直感的です。

しかし、私はまったく逆のことを見ています。 %waitは増加せず、%idleは高く、負荷平均も高くなります。これに関する他の質問を読みましたが、この動作を説明していないため、満足のいく答えは見つかりませんでした。

  • %waitに中断のないスリープ状態が含まれていない場合、それは正確には何ですか? %waitが実際に負荷に対応していないということですか? (たとえば、2 CPUマシンでは負荷が10になる可能性がありますが、待機率は30%にすぎません)
  • そして、このIOは中断されない状態で参照されるIOとどのように異なりますか?この場合の可能な救済策は何ですか?

CPUがピックアップしていないタスクがキューにあるため、明らかにCPUを増やしても役に立ちません。

負荷平均とCPU使用率が合計されないことが直感的でないように思われる別の状況:

この状況は少し異なります。 CPUアイドル時間が長く、負荷平均が高く(多くの場合、CPUの数が2倍)、ディスクI/Oがないため、スワップ使用量、一部のネットワークI/Oがあります。無停電スリープ状態のプロセスはなく、実行キューは頻繁に高くなります。しかし、CPUはまだアイドル状態ですか? CPUが100%使用されていると期待すべきではありませんか?ネットワーク(または他の何か)で待機しているために、多数のタスクをCPUに配置できないということですか?これらのタスクがそれぞれCPUでほとんど時間を消費しないと想定するのは合理的と思われます。あれは正しいですか?この場合のボトルネックは何ですか? CPUを増やしても役に立たないと言うのは正しいですか?負荷平均を減らすために、何を構成するか、またはどのリソースを増やすかをどのように見つけることができますか?

sar -n TCP,ETCP,DEV 1sar

netstat接続数 netstat

iostatiostat

vmstatvmstat

uptime稼働時間

toptop

nicstatnicstat

1
tushar

(Linuxを想定していますが、一般的な概念は他のオペレーティングシステムにも適用できます。)

ワークロードは、負荷平均と%iowaitだけで説明することはできません。これらは、特定の状態のタスクのみを要約するメトリックです。実行可能および中断不可能、それぞれアイドル時間およびI/O未処理の数。

実行可能な状態のタスクがあり、CPUサイクルがアイドル状態であるが、I/Oではアイドル状態ではない状況が発生する可能性があります。 2つのCPUで実行されている200のワーカープロセスを備えたややビジーなWebサーバーを想像してみてください。負荷の平均は約1、iowaitは0に近い。タスクが多く、それぞれの作業はそれほど多くなく、CPUがアイドル状態であるがディスクで待機している時間はさらに短くなります。

この架空のWebサーバーVMがライブマイグレーションされた場合、そのメモリ遅延と使用可能なCPU時間が一時的に低下する可能性があります。症状は負荷平均が高くなることですが、これはiowaitを駆動しません。

システムのすべてのコンポーネントを調べるための包括的なアプローチを取ります。これはトップをはるかに超えています。たとえば、 使用率、飽和度、およびeverything のエラーについて考えてみます。パフォーマンスツールがほとんどすべてのものを数え、プロファイリングできるのに、なぜ全体の話をしていない同じ古いトップに落ち着くのですか?

1
John Mahowald