質問: cpu使用率とロードアベレージ linuxのtopコマンド等で出力されるcpu使用率とロードアベレージの違いを教えてください。 また、ロードアベレージをcpu使用率に換算することは可能でしょうか? 可能であれば方法を教えてください。
回答: ロードアベレージは、最も簡単に説明すると、実行プロセス数の平均だ。説明によっては実行待ちプロセス数や実行可能プロセス数となっているが、正確には実行プロセス数(実行中プロセス数+実行可能プロセス数)だ。つまり、i/o待ちのプロセスはカウントされない。 ここで、たとえば、1秒間に10回実行プロセス数をカウントすると、1分間では600回カウントする。カウントした時に、毎回3、4、5あたりをうろうろしていると、平均値としては4ぐらいになる。これがロードアベレージだ。正確に、linuxが1秒に何回カウントしているかは知らんが、どちらにせよ (カウントした時のロード数1+...カウントした時のロード数n)/カウント数 という計算式になるので、1分に何回カウントしたかはあまり重要な数字ではない(もちろん1分に1回やら数回やらというのは困るが)。ロードの平均値を取っているのでロードアベレージだ。 ロードアベレージは、「システム負荷率」と表現される事が多い。負荷ってcpu使用率じゃないのと思うかも知れないが、例えば、cpuが1個のマシンにおいて、cpu使用率が常に100%の状態が1時間続いたと仮定して、その間ロードアベレージが常に1だったとすると、システムの負荷は0という事になる。なぜかと言うと1個のプロセスが常にcpuを占有している状態だからで、それは1個のプロセスが理想的にcpuを使いつづけた状態だからだ。 つまり、ロードアベレージが負荷と表現されるのは、「cpuが割り当てられたらすぐ実行できるのに実行できないプロセスの割合」だからかな。 別のモデルを考える。i/oを行わず、常にcpuによる処理をしている3つのプロセスがあり、システムプロセスを含め、それ以外のプロセスは一切動作しないとすると、ロードアベレージは常に3になる。cpuが1個だと3、2個だと3、3個だと3、4個だと3だ。変わってcpu利用率はcpuが1個だと100%、2個だと100%、3個だと100%、4個だと75%となる。 もちろん、ロードアベレージが3でも、cpuが1個だと常に2つのプロセスが実行可能(cpu割り当て待ち)となるが、3個だと3つのプロセスが全て実行中になる。なので、cpu利用率は1個でも3個でも同じ100%だが、3個だと十分仕事をさばけている状態だし、1個だとさばけていないよね。cpu利用率だけでは分からないって事。なのでロードアベレージが存在するわけだ。 そういう訳で、「ロードアベレージの理想値=cpuの個数」または、「ロードアベレージがcpuの個数を超えなければシステムは良好」などと説明されている訳だな。 これが、私が解釈しているロードアベレージだが、何か参考になれば。