Linuxでは、「/proc/loadavg」はどのように定期的に更新されていますか
Linuxのソースコードから見れば、1分間、5分間と15分間の平均負荷量(load average)を取るように(例えば、cat /proc/loadavg
)、fs/proc/loadavg.c
でget_avenrun()
は呼び出される【※1】のが分かっています。そして、kernal/sched/loadavg.c
にあるget_avenrun()
のソースコード【※2】を見れば、単にavenrun[i]
が1つ目の引数に代入されるのが分かっています。定期的にこの関数を呼び出すのは/proc/loadavg
を更新できないわけです。
kernal/sched/loadavg.c
には、グローバル変数のunsigned long avenrun[3]
を書き込む関数は2つしかないです。
static void calc_global_nohz(void)
void calc_global_load(unsigned long ticks)
どのインターナルのプロセス或いはスレッドが上記の関数を定期的に呼び出しますか、或いは、別の方法でavenrun[3]
が定期的に更新できますか。
また、その2つの関数の区別は何でしょうか。