16 | 内存篇:如何减少延迟提升内存分配效率?
庄振运
该思维导图由 AI 生成,仅供参考
你好,我是庄振运。
上一讲我们讨论了关于 CPU 的性能指标和分析。CPU 和内存是和程序性能最相关的两个领域;那么这一讲,我们就来讨论和内存相关的性能指标和性能分析的工具。
内存方面的性能指标,主要有缓存命中率、缓存一致性、内存带宽、内存延迟、内存的使用大小及碎片、内存的分配和回收速度等,接下来我会逐一进行介绍。现代很多 CPU 都是 NUMA 架构的,所以我也会介绍 NUMA 的影响和常用的工具。
缓存和缓存命中率
我们先看看缓存,也就是 Cache。
缓存是 CPU 与内存之间的临时数据交换器,是为了解决两种速度不匹配的矛盾而设计的。这个矛盾就是 CPU 运行处理速度与内存读写速度不匹配的矛盾。CPU 处理指令的速度,比内存的速度快得多了,有百倍的差别,这一点我们已经在上一讲讨论过。
缓存的概念极为重要。不止是 CPU,缓存的策略也用在计算机和互联网服务中很多其他的地方,比如外部存储、文件系统,以及程序设计上。有人甚至开玩笑说,计算机的各种技术说到底就是三种——Cache(缓存)、Hash(哈希处理)和 Trash(资源回收)。这种说法当然有点偏颇,但你也能从中看到缓存技术的重要性。
现在回到 CPU 缓存的讨论上来。
我们前面也讲了,随着多核 CPU 的发展,CPU 缓存通常分成了三个级别:L1、L2、L3。一般而言,每个核上都有 L1 和 L2 缓存。L1 缓存其实分成两部分:一个用于存数据,也就是 L1d Cache(Data Cache),另外一个用于存指令,L1i Cache(Instruction Cache)。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了如何优化内存性能以及减少内存延迟的相关内容。首先,文章强调了缓存的重要性,以及多级缓存的设计和作用,特别强调了缓存命中率对访问时间延迟的影响。其次,探讨了缓存一致性问题,介绍了缓存一致性协议的重要性和对性能的影响。此外,文章还讨论了内存带宽和访问延迟对计算机性能的制约,以及内存带宽的影响因素和变化趋势。另外,文章还提到了内存池的优化方式,以及NUMA系统对内存性能的影响。最后,文章介绍了一些常用的内存监测工具,如free、vmstat和/proc文件系统,以及对内存性能优化的思考和建议。整体而言,本文全面介绍了内存性能优化的相关知识,对读者进行了深入浅出的指导。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能工程高手课》,新⼈⾸单¥59
《性能工程高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- 钱缓存一致性协议的原理是什么?他怎么实现缓存的一致性的? 内存碎片是怎么影响系统性能,导致系统性能下降的? 为了更高的性能其中有一种空间换时间的策略,老师这里讲减少内存的使用可以提高系统性能,具体是指什么?
作者回复: 缓存一致性说来话长,网上搜搜有些很好的介绍。 内存有碎片就导致内存利用率低,系统会经常被迫回收内存,系统性能就受影响了。 内存使用量少了,就比较紧凑,这样各种缓存就工作比较高效。
2020-03-0432 - Enzomalloc 函数已经实现类似内存池的功能,在应用程序中再实现一个内存池封装,会有性能提升吗?
作者回复: malloc本身应该是最基本的内存申请功能,你是说jemalloc吧?那个的确有帮助;但是jemalloc也有很多问题。这里的“内存池”偏重在概念,和具体的实现分开。
2020-01-0922 - han要实现可靠稳定内存池的实现应该也有难度的,庄老师,实际开发中,有没有一些成熟的内存池库的实现(C/C++)推荐?用这些库应该比自己造轮子更放心
作者回复: 这方面我也不是专家,你Google一下,应该有不错的推荐,比如https://github.com/vit-vit/ctpl 最好自己亲自实验一下。
2020-05-09 - 谢煜锋我们在项目中遇到过 内存通道数量相同,但是因为内存槽插位置不同,带来的很大的性能影响。看intel文章也有相关介绍2021-02-1921
- EnzoSIMD指令可以显著提高缓存命中率,大量数据处理的时候用的多2020-01-0911
- jerry程序使用预申请的内存池会不会影响系统的内存回收 ? 这个在设计时要怎么考虑?2020-03-11
收起评论