ablog

不器用で落着きのない技術者のメモ

load average ってなんじゃい?

top - 15:47:11 up 46 days,  4:57,  1 user,  load average: 0.03, 0.01, 0.00
Cpu0  :  0.0%us,  0.3%sy,  0.0%ni, 98.7%id,  1.0%wa,  0.0%hi,  0.0%si,  0.0%st
top - 15:47:17 up 46 days,  4:57,  1 user,  load average: 0.03, 0.01, 0.00
Tasks: 130 total,   1 running, 127 sleeping,   2 stopped,   0 zombie
Cpu(s): 15.5%us,  2.6%sy,  0.1%ni, 59.9%id, 21.6%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   2075600k total,  2023484k used,    52116k free,    15464k buffers
Swap:  2096472k total,   361992k used,  1734480k free,  1851512k cached
...

top コマンドで上にでてくる「load average」ってなんじゃいと思って調べてみた。

まとめ

  • 過去1分、5分、15分の間の実行待ちプロセス数の平均数。
  • 「実行待ちプロセス」とは以下の状態のプロセス。
    • TASK_RUNNING
      • 実行中もしくは実行可能でCPU割り当てを待っている状態。
      • vmstat で r 列に表示されるのがこの状態のプロセスの数。
    • TASK_UNINTERRUPTIBLE
      • 割り込み不可能な待ち状態。ディスクI/O待ちなど短い事象。
      • vmstat で b 列に表示されるのがこの状態のプロセスの数。
  • 「複数CPUならload averageはCPU数で割れ」
    • load average は CPU 数で割り算をしていない。各CPU(ランキュー)ごとに値を保持するのではなく、システム全体で一つ。
    • 負荷があるとき && 均等に分散される場合は「load average は CPU で割れ」というのは正しい。

要するに load average が高いと、CPU がなかなか割り当てられないので、「ターミナルエミュレータを使って ssh などでログインしてコマンドを打ってもレスポンスが帰ってくるのが遅い」というような状況になっているときだと思う。


こんな感じかな。よく見えんなー。まいっか。

関連


追記(2012/02/05):

P.43

ロードアベレージがいう負荷は、

  • 処理を実行したくても、実行できなくて待たされているプロセスがどのくらいあるか

であり、より具体的には、

  • CPUの実行権限が与えられるのを待たされているプロセス
  • ディスクI/Oが完了するのを待っているプロセス

であることがわかります。
(中略)
ロードアベレージそのものは二つの負荷をまとめて、あくまで待ちタスク数を表すだけの数字なので、これを見ただけでは、CPU負荷が高いのか、I/O負荷が高いのかは判断できません。

お、load average ってCPU待ちのみだと思い込んでた。。。自分で過去に書いたエントリ(↑)にはちゃんとI/O待ち(TASK_UNINTERRUPTIBLE)も含まれるって書いてるのに。