|
使用uptime或者top命令,都可以看到一个负载的输出,形如load average: 0.00, 0.03, 0.00,这个负载到底是什么东西呢,man文档里只是一笔带过,没有具体的给出负载的定义。
负载的统计,必然是由内核完成的,因此在内核源码中找答案是再好不过的事情了,找来2.6.21的内核源码,开始探索。
节选部分源码: //kernel/timer.c
1254 active_tasks = count_active_tasks();
1256 CALC_LOAD(avenrun[0], EXP_1, active_tasks); 1257 CALC_LOAD(avenrun[1], EXP_5, active_tasks); 1258 CALC_LOAD(avenrun[2], EXP_15, active_tasks);
//include/linux/sched.h
110 #define FSHIFT 11 /* nr of bits of precision */ 111 #define FIXED_1 (1< 112 #define LOAD_FREQ (5*HZ) /* 5 sec intervals */ 113 #define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */ 114 #define EXP_5 2014 /* 1/exp(5sec/5min) */ 115 #define EXP_15 2037 /* 1/exp(5sec/15min) */
117 #define CALC_LOAD(load,exp,n) \ 118 load *= exp; \ 119 load = n*(FIXED_1-exp); \ 120 load >>= FSHIFT;
|
| 共3页: 上一页 1 [2] [3] 下一页 |
评论加载中…
|