21 | CPU案例:如何提高LLC(最后一级缓存)的命中率?
该思维导图由 AI 生成,仅供参考
性能问题:最后一级缓存(LLC)不命中率太高
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了针对CPU最后一级缓存不命中率过高的性能问题的解决方案。作者首先解释了缓存命中率对CPU性能的重要性,特别是最后一级缓存的不命中对性能的严重影响。然后介绍了三种性能优化策略:紧凑化数据结构、软件预取数据和去除伪共享缓存。其中,软件预取数据是通过合理预测,将可能要读取的数据提前取出,放入缓存中,以减少缓存不命中率。作者还分享了软件预取的实践经验,强调了预取操作的代价和应用场景。最后,重点讨论了如何降低LLC的缓存不命中率,提出了去除伪共享缓存的解决方案,解释了伪共享缓存的问题及解决方法。整体而言,本文提供了针对LLC不命中率高的问题的解决方案,为读者提供了实用的性能优化策略。
《性能工程高手课》,新⼈⾸单¥59
全部留言(10)
- 最新
- 精选
- 三件事硬件指令预取是利用局部性原理 Locality。局部性原理在处理连续内存时是非常有效的,但是在实际情况下内存是不一定连续的,所以会预取到一些无效的 item,以至于会进一步导致有效缓存失效。最终造成性能问题。 有效的话,最典型的例子应该就是 loop 循环访问 data array 了吧。 无效的话,比如说两个矩阵按列相乘。 不知道这个例子对不对,感觉自己现在是刚懂了一些概念,但还做不到举一反三的地步。
作者回复: 你的这个例子其实很好,一般Loop循环就是连续取数组的数据,这些数组数据就有很好的Locality。
2020-03-312 - LindaWang庄老师,您了解的业界有没有用AI做性能调优的工具呢?
作者回复: AI范围很广,用在性能调优上面也是比较有挑战性的; 我个人感觉主流的性能相关的系统,都或多或少的有点“智能”。但是具体的实现和有效性,就见仁见智了。
2020-03-2621 - benny去除伪共享缓存 这个如何发现有这样的问题呢?
作者回复: Linux 下的Perf可以帮忙。你用Google搜一下,有很多相关资料,比如https://joemario.github.io/blog/2016/09/01/c2c-blog/
2020-03-221 - 海华(海菜)采集了下我们的大数据类型机器的cache miss率,采样3台机器,10分钟均在25% ~ 30%左右,请教老师: 一个是25% ~ 30%这个值算比较高了吧? 二是都是hadoop类应用,应该从哪里着手排查问题呢?
作者回复: Cache Miss Ratio多高是正常得看具体的Workload。如果是Hadoop,我的理解是Miss Ratio高点也很正常,因为Hadoop的Worload的Locality一般不太好(尤其是数据量大的话)。
2020-02-091 - LindaWang请教下,庄老师。您了解有没有流程级(函数级)Cache行为诊断机制呢?perf测的是进程级别的,粒度太大了
作者回复: 函数级的我还真不知道。。
2020-07-07 - 蚂蚁内推+v老师您好,我有两个问题: 1.怎么判断什么时候该使用cpu? 缓存优化呢?cache的miss率达到多少就认为应该优化了? 2.CPU从内存中加载数据,会影响CPU使用率吗?比如CPU cache的miss率是10%,是不是一定比miss率是40%的cpu使用率更高?(假设都是cpu密集型的,都没有额外的io操作)。
作者回复: 具体多少cashe miss比较正常,还得看应用程序的特点。有人说如果高于5%就算很高了。 会影响CPU util的,因为CPU只能干等着数据返回,也不能干别的。
2020-04-29 - 钱LLC命中率低导致的性能问题? 这个对我有些高级,基本没处理过这种问题,另外,请教一下,LLC命中率低导致的性能问题表现是怎么样的?可能刚开始不会意识到去查LLC的命中率?再者LLC的命中率多大算是OK,这个问题不同的组件标准估计也上是不同的,具体怎么判断呢? 能否认为CPU使用率较高但性能一般,可能就是LLC命中率较低造成的?
作者回复: 刚开始的确不会想到去查LLC命中率,一般来讲,一个系统只要运行正常,绝大多数时候,就是能用就行。只有当需要大规模优化的时候(比如几千台服务器运行同一个程序),大家才会去努力查找可以优化的地方,从而做各种测试分析。 很多时候是根据经验。像你说的:CPU使用很多,但是性能一般,基本就是某个地方出问题了。LLC方面的问题是一个可能。
2020-03-05 - 安排原本我们想让不同线程各自访问不同的数据,也就是不让他们共享,可以并发操作。但是每个cache line长度并对齐的内存是核间共享的,对他们的访问需要原子进行,从而导致了伪共享。2020-04-111
- 森屿时光作者,您好,按照您的分析,最后一级缓存的未命中数=(LLC-load-miss+LLC-store-miss)/(LLC-load+LLC-store)[我也这么认为的],但是还有一个指标LLC-miss,这个指标测出的数据又代表什么呢? 通过实验我发现: 当执行命令:perf stat -e LLC-miss,LLC-load-miss时,二者数值上相等(不知道为什么会相等) 当执行命令:perf stat -e LLC-miss,LLC-load-miss,LLC-load,LLC-store时,四者数值上均不相等,添加后两个指标后,LLC-miss 和 LLC-load-miss 就不等了【不知道为什么】 还有为什么 LLC-miss != LLC-load-miss+LLC-store-miss 【我也没看到有相关的解释】 另外,是否LLC-load-miss,LLC-store-miss就分别代表对内存的读-写次数 谢谢回复!2022-10-08归属地:江苏
- 外套好2020-01-14