如何计算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

回到顶部