2014-01-13 25 views
2

我知道这个问题已经以许多不同的方式被多次提出过,但对于我来说,CPU负载百分比的含义仍然不清楚。如果一次执行一条指令,CPU负载究竟是多少?

我开始解释我是如何看待的概念,现在(当然,我可能,并且肯定会,是错误的):

  • CPU内核只能同时执行一个指令。在执行完当前指令之前,它不会执行下一条指令。
  • 假设你的盒子有一个单一的CPU和一个单一的核心。因此并行计算是不可能的。您的操作系统的调度程序将选取一个进程,将IP设置为入口点,并将该指令发送给CPU。在CPU完成执行当前指令之前,它不会移动到下一条指令。经过一段时间后,它将切换到另一个进程,依此类推。但是如果CPU当前正在执行指令,它将不会切换到另一个进程。它将等待CPU自由切换到另一个进程。由于您只有一个内核,因此不能同时执行两个进程。
  • I/O很贵。只要进程想要从磁盘读取文件,就必须等到磁盘完成其任务,然后当前进程才能执行下一条指令。在磁盘工作时,CPU没有做任何事情,所以我们的操作系统将切换到另一个进程,直到磁盘完成其工作,以免浪费时间。

遵循这些原则,我来自己的结论是,在给定时间CPU负载只能是以下两个值之一:

  • 0% - 空闲状态。 CPU什么也没做。
  • 100% - 忙。 CPU当前正在执行一条指令。

这显然是错误的,因为taskmgr报告%1,12%,15%,50%等CPU使用率值。

  • 这是什么意思,给定的进程,在给定的时间,利用给定CPU核心的1%(由taskmgr报告)?在给定的过程正在执行的过程中,99%会发生什么?
  • 这是什么意思,总体CPU使用率是19%(现在由Rainmeter报告)?
+1

“* CPU内核只能同时执行一个指令,直到它执行完当前一个它不会执行下一条指令*。”这是不正确的。将“superscalar”打入您最喜爱的搜索引擎。 –

回答

2

如果您在Windows上查看任务管理器,则会出现空闲进程,确实如此,它只是显示没有做任何有用的周期数量。是的,CPU总是很忙,但它可能只是在循环运行,等待有用的东西来。

由于您只有一个内核,因此不能同时执行两个进程 。

这不是真的。是的,真正的并行是不可能的,但你可以用preemptive multitasking创建一个幻想。是的,不可能中断指令,但这不是问题,因为大多数指令只需要很少的时间来完成。 OS与时间片共享时间片,这比单个指令的执行时间长得多。

What does it mean that a given process, at a given time, is utilizing 1% of a given CPU core 

大部分时间的应用程序没有做任何有用的事情。想想等待用户点击按钮开始处理某些东西的应用程序。这个应用程序不需要CPU,所以它大部分时间都在睡觉,或者每次它进入睡眠时间(参见event loop in Windows)。 GetMessage正在阻塞,所以它意味着线程将休眠直到消息到达。那么CPU负载究竟意味着什么?所以想象一下,应用程序接收一些事件或数据做事情,它会做操作而不是睡觉。因此,如果它使用CPU的X%,则意味着该应用程序使用X% CPU采样时间。 CPU时间使用率是平均指标。

PS:总结CPU负载的概念,考虑速度(物理方面)。有瞬时和平均速度,所以对于CPU负载,还有瞬时和平均测量。瞬时总是等于0%或100%,因为在某个时间点过程要么使用CPU,要么使用CPU。如果过程在250ms的过程中使用了100%的CPU,并且在接下来的750ms中没有使用,那么我们可以说过程以1秒的采样周期加载了25%的CPU(平均值测量只能在一定的采样周期内应用)。

1

http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

单核CPU是例如流量的单个通道。想象一下,你是一个桥梁操作员......有时你的桥很繁忙,有汽车排成一列。你想让人们知道交通如何在你的桥上移动。一个体面的指标是在特定时间有多少辆汽车在等待。如果没有汽车在等待,接到的司机知道他们可以马上开车。如果汽车备份,司机知道他们在延误。

这基本上是CPU负载。 “汽车”是使用一段CPU时间(“过桥”)或排队使用CPU的进程。 Unix将此称为运行队列长度:当前运行的进程数加上等待(排队)运行的进程数的总和。

另见:http://en.wikipedia.org/wiki/Load_(computing)

+0

它如何回答闲置状态的问题? – Andrey

+0

是的,CPU可以(理论上)闲置。 –