性能工程高手课
庄振运
Facebook 性能优化和容量管理高级专家
24631 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
性能工程高手课
15
15
1.0x
00:00/00:00
登录|注册

16 | 内存篇:如何减少延迟提升内存分配效率?

/proc文件系统
内存监测命令
最佳线程和处理器分配
NUMA系统的特点
内存分配效率的优化
系统内存用光的问题
内存使用大小的影响
内存总带宽的因素
内存带宽和内存访问延迟的关系
内存对性能的制约
缓存性能的下降
缓存一致性协议
缓存一致性问题
缓存命中率对访问时间延迟的影响
多级缓存的设计目的
缓存的重要性
工具
NUMA的影响
内存的分配
内存带宽和延迟
缓存一致性
缓存和缓存命中率
思考题
总结
内存性能指标和性能分析的工具
CPU性能指标和分析
如何减少延迟提升内存分配效率

该思维导图由 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
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 缓存一致性协议的原理是什么?他怎么实现缓存的一致性的? 内存碎片是怎么影响系统性能,导致系统性能下降的? 为了更高的性能其中有一种空间换时间的策略,老师这里讲减少内存的使用可以提高系统性能,具体是指什么?

    作者回复: 缓存一致性说来话长,网上搜搜有些很好的介绍。 内存有碎片就导致内存利用率低,系统会经常被迫回收内存,系统性能就受影响了。 内存使用量少了,就比较紧凑,这样各种缓存就工作比较高效。

    2020-03-04
    3
    2
  • Enzo
    malloc 函数已经实现类似内存池的功能,在应用程序中再实现一个内存池封装,会有性能提升吗?

    作者回复: malloc本身应该是最基本的内存申请功能,你是说jemalloc吧?那个的确有帮助;但是jemalloc也有很多问题。这里的“内存池”偏重在概念,和具体的实现分开。

    2020-01-09
    2
    2
  • han
    要实现可靠稳定内存池的实现应该也有难度的,庄老师,实际开发中,有没有一些成熟的内存池库的实现(C/C++)推荐?用这些库应该比自己造轮子更放心

    作者回复: 这方面我也不是专家,你Google一下,应该有不错的推荐,比如https://github.com/vit-vit/ctpl 最好自己亲自实验一下。

    2020-05-09
  • 谢煜锋
    我们在项目中遇到过 内存通道数量相同,但是因为内存槽插位置不同,带来的很大的性能影响。看intel文章也有相关介绍
    2021-02-19
    2
    1
  • Enzo
    SIMD指令可以显著提高缓存命中率,大量数据处理的时候用的多
    2020-01-09
    1
    1
  • jerry
    程序使用预申请的内存池会不会影响系统的内存回收 ? 这个在设计时要怎么考虑?
    2020-03-11
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部