負荷平均
ナビゲーションに移動
検索に移動
負荷平均 (load average(s)) は、
CPU への負荷を表す、UNIX 系 OS での数値の一種。
2ちゃんねる では、サーバーの OS として、
UNIX 系の FreeBSD を使用している。
概要
UNIX 系 OS では、一時点での CPU への 負荷 を、
「プロセス」[1]のうち、その時点で "ready to run" なもの
(すなわち、現に実行されているプロセスと、
実行時間の割り当てだけを待っているプロセス)の数
と、とらえるのが伝統的。
この意味での 負荷 の、
最近 1 分間、最近 5 分間、最近 15 分間での、平均値
を、後述のような簡便算出法で概算して並べて、
load average(s) としている。
CPU の数と負荷平均の値が、ほぼ同じなら、
性能と負荷のバランスが、(この観点だけからは)ほぼ理想的だった
ことになる。[2]
(ただし、「余力がある性能を」と考えるのが普通。)
マイクロプロセッサーでは、「コアの数」が、内蔵する CPU の数。
その簡便算出法
前述のような平均値を精密な記帳をして算出するのでは、
「そのために時間をとりすぎてしまう」と、みなされかねない。
そこで、以下のような簡便算出法で概算されている。
(例えば) 1 秒おきに、 その時点で "ready to run" なプロセスの数 と、 前回の算出値 とを、加重平均する。 1 分間なり、 5 分間なり、 15 分間なりでの、 算出回数を N とすると、前回の算出値のウェイトは、 exp( - 1 / N ) になっている。したがって、 1 分以上前なり、 5 分以上前なり、 15 分以上前なりの、 算出値のウェイトは、 exp( - 1 ) = 1 / exp( 1 ) 以下になる。
なお、浮動小数点計算をさけ、整数計算だけで済ませるため、
例えば、以下のようにしている。
- 算出値は、 2 の L 乗倍した値を整数で保持。
- 「その時点で "ready to run" なプロセスの数」も、
まず L ビット左シフト。 - 各ウェイトは、 2 の M 乗倍した値を整数定数とする。
- 加算結果を M ビット右シフトする。
簡便算出法の原理
これは結局、次のようにしたうえでの、
指数的加重移動平均 (exponentially weighted moving average)
の応用例のひとつと考えられる。
- (例えば) 1 秒おきに、サンプリングした数だけから、算出。
- 古い算出値の影響については、(その「寿命」のかわりに)
指数的減衰 での 平均寿命 が、 1 分間、 5 分間、 15 分間
になるようにウェイトを決めている。
なお、指数的加重移動平均 の、金融工学での応用とは、
次のような点が違うらしい。
- 金融工学での応用では、(例えば)ある日の価格としては、
その1日間にも変動があった価格から、
なんらかの意味がある値が採用されるらしい。 - 金融工学での応用での、ウェイトの通常の決めかたは、
指数的減衰 での 平均寿命 とは無関係らしい。