考虑以下场景:
- 我的机器上只有一个进程在运行,并且像 top 这样的资源可以提供 100% 的 CPU 使用率,这很好。我正在有效地使用 CPU。
- 我有两个进程,每个进程占用 50% 的 CPU。我仍然有效地使用 CPU,因为总数达到了 100%。
- 我的机器上运行着N个(数量相对较多)进程。因为CPU很忙。我的进程可能无法达到 100% CPU 利用率,但仍然有意义,因为处理器也很忙。
- 现在假设机器上只有一个进程,但 CPU 使用率仍然没有达到 100% CPU。假设原因是由于程序错误(IO 过多或程序根本不执行任何操作)。
如何检测案例 4?平均负载不是一个好的指标,因为它取不同时间的平均值。
是否有任何指标或方法可以用来量化我的程序在空载条件和满载条件下使用 CPU 的效率?
答案1
“效率”的最佳描述可能是“使用最少的资源产生最多的有用结果”。
如果程序的目的是处理文件之间的数据,那么“太多 IO”并不是低效率的衡量标准——它是该特定程序的全部目的。
同样,“100% CPU 使用率”可能根本就不好:它可能只是算法效率严重低下的症状。通过更好地了解正在解决的问题,甚至用不同的语言重写相同的算法,您可能只需要 5% 的 CPU 即可完成相同的任务。
IIRC,平均负载与 CPU 使用率关系不大。它基本上测量调度程序的准备运行作业队列的长度。但它不知道这些作业是否需要 10 微秒或 10 秒的 CPU 时间才能完成。
通常会单独衡量整体程序性能,并对其进行分析和改进以满足期望。对于实时运行,目标是实现进程的混合,这些进程可以很好地协同工作,并确定它们开始过度相互干扰的点(调度程序对于大多数工作负载都做得相当不错)。这导致需求管理,并最终进行成本/效益分析,以证明更大的盒子是合理的。
我曾经有一位经理非常担心 Windows 空闲进程消耗了大约 97% 的 CPU。他们实际上提议设立一个项目以提高效率。当我离开房间时,我不得不强忍住笑声。