В исходном коде Linux я обнаружил, что get_avenrun()
будет с именем в fs/proc/loadavg.c
, чтобы получить средние значения загрузки за последние 1, 5 и 15 минут.Но в get_avenrun()
определении он просто назначил avenrun[i]
своему первому параметру.Это означает, что вызов этой функции периодически не может обновить /proc/loadavg
.
В kernal/sched/loadavg.c
есть только 2 места, где будет изменен глобальный unsigned long avenrun[3];
,
static void calc_global_nohz(void)
void calc_global_load(unsigned long ticks)
Мне просто интересно, какой внутренний процесс / поток периодически вызывает эти 2 функции (или есть другие способы периодически обновлять avenrun[3]
), и в чем разница между calc_global_nohz()
и calc_global_load()
.