0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用于衡量CPU的繁忙程度的正确指标

Linux阅码场 来源:cg 2018-12-23 13:50 次阅读

1. 引言

可能你认为的 90% CPU 利用率意味着这样的情形:

而实际却可能是这样的:

CPU 并非 90% 的时间都在忙着,很大一部分时间在等待,或者说“停顿(Stalled)”了。这种情况表示处理器流水线停顿,一般由资源竞争、数据依赖等原因造成。多数情况下表现为等待访存操作,其中又以读操作为主。在停顿周期内,不能执行指令,这意味着你的程序不往前走。值得注意的是,图中 “Stalled” 状态所占的比例是作者依据生产环境中的典型场景计算而来,具有普遍现实意义。因此,大多时候 CPU 处于停顿状态,而你却不知道,因为 CPU 利用率这个指标没有告诉你真相。通过进一步分析 CPU 停顿的原因,可以指导代码优化,提高执行效率,这是我们深入理解CPU微架构的动力之一。

2. CPU 利用率的真实含义是什么?

我们通常所说的CPU利用率是指 “non-idle time”:即CPU不执行 idle thread 的时间。操作系统内核会在上下文切换时记录CPU的运行时间。假设一个 non-idle thread 开始运行,100ms 后结束,内核会认为这段时间内 CPU 利用率为 100%。这种度量方式源于分时复用系统。早在阿波罗登月舱的导航计算机中,idle thread 当时被叫做 “DUMMY JOB”,工程师通过比对运行 “DUMMY JOB” 和 “实际任务” 的时间来衡量导航系统的利用率。

那么这个所谓“利用率”的问题在哪儿呢?

当今时代,CPU 执行速度远远大于内存访问速度,等待访存的时间成为占用 CPU 时间的主要部分。当你在 top 中看到很高的 “%CPU”,你可能认为处理器是瓶颈,但实际上却是内存。在过去很长一段时间内,CPU 频率增长的速度大于 DRAM 访存延时降低的速度(CPU DRAM gap),直到2005年前后,处理器厂商们才开始放弃“频率路线”,转向多核、超线程技术,再加上多处理器架构,这些都导致访存需求急剧上升。尽管厂商通过增大 cache 容量、优化 cache 策略、提升总线带宽来试图缓解访存瓶颈,但我们的程序仍深受 CPU stall 困扰。

3. 如何真正辨别 CPU 在做些什么?

在 PMC(Performance Monitoring Counters) 的帮助下,我们能看到更多的 CPU 运行状态信息。下图中,perf采集了10秒内全部 CPU 的运行状态。

这里我们重点关注的核心度量指标是 IPC(instructions per cycle),它表示平均每个 CPU cycle 执行的指令数量,很显然该数值越大性能越好。上图中IPC 为 0.78,看起来还不错,是不是 78% busy 呢?现代处理器一般有多条流水线,运行perf的那台机器,IPC 的理论值可达到 4.0。如果我们从 IPC的角度来看,这台机器只运行到其处理器最高速度的 19.5%(0.78 / 4.0)。幸运的是,在处理器内部,有很多 PMU event,可用来帮助我们分析造成 CPU stall 的原因。用好 PMU 需要我们熟悉处理器微架构,可以参考 Intel SDM。

4. 最佳实践是什么?

如果 IPC < 1.0, 很可能是 Memory stall 占主导,可从软件和硬件两个方面考虑这个问题。软件方面:减少不必要的访存操作,提升 cache 命中率,尽量访问本地节点内存;硬件方面:增加 cache 容量,加快访存速度,提升总线带宽。

如果IPC > 1.0, 很可能是计算密集型的程序。可以试图减少执行指令的数量:消除不必要的工作。火焰图CPU flame graphs,非常适用于分析这类问题。硬件方面:尝试超频、使用更多的 core 或 hyperthread。作者根据PMU相关的工作经验,设定了1.0这个阈值,用于区分访存密集型(memory-bound)和计算密集型(cpu-bound)程序。读者可以根据自己的实际工作平台,合理调整这个阈值。

5. 性能工具应该告诉我们什么?

作者认为,性能工具中使用 %CPU 时都应该附带上 IPC,或者将 %CPU 拆分为指令执行消耗 cycle(%INS) 和 stalled 的 cycle(%STL)。对应到top,在 Linux 系统有一个能够显示每个处理器 IPC 的工具tiptop:

6. 其他可能让 CPU 利用率引起误解的因素

除了访存导致的 stall 容易让人误解 CPU 利用率外,还有其他一些因素:

温度原因导致处理器 stall;

Turboboost 干扰了时钟速率;

内核使得时钟速率加快;

平均带来的问题:1分钟利用率平均 80%,掩盖了中间 100% 部分;

自旋锁: CPU 一直在被使用,同时 IPC 也很高,但是应用逻辑上并没有任何进展。

7. 更新:CPU 利用率真的错了吗?

这篇文章引起了大量留言:

http://www.brendangregg.com/blog/2017-05-09/cpu-utilization-is-wrong.html的留言栏;

https://news.ycombinator.com/item?id=14301739

https://www.reddit.com/r/programming/comments/6a6v8g/cpu_utilization_is_wrong/

总结下作者的回答是:这里讨论的并不是 iowait (那是磁盘IO),而且如果你已经确认是访存密集型,是有些处理办法(参考上面)。

那么 CPU 利用率指标是确确实实错误的,还是只是容易误导?如作者前面所说,他认为许多人把高 CPU 利用率理解为瓶颈在 CPU 上,这一行为才是错误的;其实单看 CPU 利用率并不清楚瓶颈在何处,很多时候瓶颈是在外部。这个指标技术上看是否正确?如果 CPU stall 的周期并不能被其他地方使用,它们是不是也就因此是“忙于等待“(听起来有点矛盾)?在有些情况,确实如此,你可以说 CPU 利用率作为操作系统级别的指标技术上看是对的,但是容易产生误导。从另一个角度来说,有超线程的情况下,那些 stalled 的周期是可以被其他线程使用的,这时 “%CPU” 可能会将可用的周期统计为正在使用,这种情况是错误的。这篇文章作者想关注的是解释清楚这个问题,并给出解决方法建议,但没错,CPU 利用率这个指标本身也是存在一些问题的。

当你可能会说利用率作为一个指标已经不对,Andrian Cockcroft之前讨论已经指出过 (http://www.hpts.ws/papers/2007/Cockcroft_HPTS-Useless.pdf)。

8. 结论

CPU 利用率已经开始成为一个容易误导的指标:它包含访存导致的等待周期,这样会影响一些新应用。也许 “%CPU” 应该重命名为 “%CYC”(cycles的缩写)。要清楚知道 “%CPU” 的含义,需要使用其他指标进行辅助,其中就包括每周期指令数(IPC)。IPC < 1.0 多半意味着访存密集型,IPC > 1.0 多半意味着计算密集型。作者之前的文章中涵盖有 IPC 说明,以及用于测量 IPC 的 Performance Monitoring Counters(PMCs)的介绍。

所有的性能监控产品如果展示 “%CPU”,都应该同时展示 PMC 指标用于解释其真实意义,不要误导用户。比如,可以把 “%CPU” 和 “IPC” 一起放,或者说指令执行消耗周期和 stalled 周期。有这些指标之后,开发者和操作者就能够知道该如何更好地对应用和系统进行调优。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10826

    浏览量

    211159
  • IPC
    IPC
    +关注

    关注

    3

    文章

    345

    浏览量

    51830

原文标题:震惊,用了这么多年的 CPU 利用率,其实是错的

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ADC直流分辨率衡量指标问题

    -----------------------------------------------------------------------SINAD和ENOB用于测量ADC 的动态性能,而有效分辨率和无噪声码分辨率用于衡量
    发表于 05-10 13:47

    衡量电能质量的指标

      提高电能质量是电力部门的一项重要任务,电能质量即电力系统中电能的质量。理想的电能应该是完美对称的正弦波。一些因素会使波形偏离对称正弦,由此便产生了电能质量问题。衡量电能质量的指标主要是电压、频率
    发表于 09-20 09:36

    示波器衡量指标中至关重要但常被忽略的两个概念是什么?

    示波器衡量指标中至关重要但常被忽略的两个概念是什么?
    发表于 05-12 06:49

    PUE指标能准确衡量数据中心能效吗?

    PUE指标能准确衡量数据中心能效吗?孙长青,注册暖通工程师,高级工程师,规划设计部总工程师,IDC单位设计总监等,有多年从事数据中心规划设计、咨询顾问、甲方自建设计部等全过程的实战经验,对数
    发表于 07-12 08:06

    PUE指标能准确衡量数据中心能效吗?

    PUE指标能准确衡量数据中心能效吗?数据中心PUE的局限有哪些?
    发表于 07-15 09:09

    衡量微型计算机的主要技术指标是什么

    衡量微型计算机的主要技术指标是?特点是?
    发表于 09-10 08:33

    五大指标衡量电池性能

    五大指标衡量电池性能
    发表于 11-10 16:31 1.5w次阅读

    CPU缓存对性能的影响

      说到CPU,不得不说的就是CPU缓存,目前CPU的缓存已经成了衡量CPU性能的一个必要指标
    发表于 11-13 17:58 2455次阅读

    通过哪些指标衡量开关电源的优劣

    通信开关电源技术在20世纪80年代引入我国,如今已广泛应用于通信领域。由于通信开关电源的性能直接影响着通信系统的可靠性,因此正确判别通信电源的优劣也就显得尤为重要。仅从电源的输入、输出特性指标
    的头像 发表于 09-21 08:00 6223次阅读

    如何衡量IT运营的成功和指标

    在组织使用云计算基础设施为客户提供新的服务获利的时候,应该如何衡量IT运营的成功呢? 通过监控设备上的绿色、黄色或红色指示灯来衡量IT运营状态仍然有用吗?
    的头像 发表于 11-30 11:51 2564次阅读

    物联网项目之助旅客了解公交车繁忙程度

    电子发烧友网站提供《物联网项目之助旅客了解公交车繁忙程度.zip》资料免费下载
    发表于 10-21 09:37 0次下载
    物联网项目之助旅客了解公交车<b class='flag-5'>繁忙</b><b class='flag-5'>程度</b>

    衡量CDN服务质量的指标有哪些

    ,应用CDN后,DNS返回的不再是IP地址,而是CNAME,指向CDN的全局负载均衡,下面一起来了解一下衡量CDN服务质量的指标有哪些?1、命中率用户访问的资源恰
    的头像 发表于 07-31 17:40 1679次阅读
    <b class='flag-5'>衡量</b>CDN服务质量的<b class='flag-5'>指标</b>有哪些

    Aigtek:衡量基准电压源的技术指标有哪些

    基准电压源在电子领域中扮演着至关重要的角色,它为各种应用提供了稳定、可靠的电压。为了确保电路的准确性和可靠性,工程师需要关注和评估基准电压源的技术指标衡量基准电压源的技术指标有很多,下面将详细介绍
    的头像 发表于 03-14 11:22 525次阅读
    Aigtek:<b class='flag-5'>衡量</b>基准电压源的技术<b class='flag-5'>指标</b>有哪些

    CPU主要性能指标有哪些

    CPU(中央处理器)的性能指标衡量其处理能力和效率的关键参数。这些指标不仅决定了CPU在处理各种任务时的速度和效率,还影响了整个计算机系统
    的头像 发表于 09-02 11:01 3115次阅读

    衡量功率放大电路的指标有哪些

    功率放大电路是电子学中的一个重要领域,它负责将输入信号的功率放大到足以驱动负载(如扬声器、电机等)的水平。衡量功率放大电路性能的指标有很多,这些指标可以帮助我们评估放大器的设计和性能。 输出功率
    的头像 发表于 09-03 09:30 317次阅读