如何计算CPU使用率?
在我的桌面上,我有一个小部件,可以告诉我当前的CPU使用率。它还显示了我两个内核中每个内核的用法。
我一直想知道,CPU如何计算使用了多少处理能力?另外,如果CPU挂断了一些密集的计算,那么它(或处理此活动的任何对象)如何检查使用情况而又不挂断?
回答:
CPU不会自行计算使用率。它可能具有使该任务更轻松的硬件功能,但这主要是操作系统的工作。因此,显然实现的细节将有所不同(尤其是在多核系统的情况下)。
总体思路是查看CPU需要执行的工作队列有多长时间。操作系统可能会定期查看调度程序,以确定其必须执行的操作数量。
这是Linux中的一个功能(从Wikipedia摘录),用于执行上述计算:
#define FSHIFT 11 /* nr of bits of precision */#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */
#define LOAD_FREQ (5*HZ) /* 5 sec intervals */
#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5 2014 /* 1/exp(5sec/5min) */
#define EXP_15 2037 /* 1/exp(5sec/15min) */
#define CALC_LOAD(load,exp,n) \
load *= exp; \
load += n*(FIXED_1-exp); \
load >>= FSHIFT;
unsigned long avenrun[3];
static inline void calc_load(unsigned long ticks)
{
unsigned long active_tasks; /* fixed-point */
static int count = LOAD_FREQ;
count -= ticks;
if (count < 0) {
count += LOAD_FREQ;
active_tasks = count_active_tasks();
CALC_LOAD(avenrun[0], EXP_1, active_tasks);
CALC_LOAD(avenrun[1], EXP_5, active_tasks);
CALC_LOAD(avenrun[2], EXP_15, active_tasks);
}
}
至于问题的第二部分,大多数现代操作系统都是多任务的。这意味着OS不会让程序占用所有处理时间,而不会自己占用任何处理时间(除非您让它这样做)。换句话说,即使应用程序似乎挂起,操作系统
仍然 可以占用一些时间来完成自己的工作。
以上是 如何计算CPU使用率? 的全部内容, 来源链接: utcz.com/qa/409402.html