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

22 | 系统案例:如何提高iTLB(指令地址映射)的命中率?

大页面提供单独的TLB条目,充分利用CPU体系结构
使用大页面减少覆盖二进制文件的工作集所需的TLB条目数
通过分析运行的二进制文件来识别热指令,对配置文件函数进行排序,优化二进制文件中的函数布局
通过编译优化将频繁被访问的指令汇总到一起,形成热区域
大页面的使用在某些部署场景下能显著提升系统性能
完整的解决方案包括编译优化和部署优化
应用程序的吞吐量提高了15%
iTLB不命中率几乎降低了一半,CPU使用率降低了5%到10%
应用程序和服务器系统的性能得到提升
构建自动化流程,包括程序剖析、编译链接和加载部署
采用热文本和大页面放置的互补优化方案
采用大页面
优化软件的二进制文件
iTLB未命中率影响CPU指令执行速度
TLB(转换后备缓冲区)在虚拟内存管理中起到重要作用
高的iTLB不命中率导致CPU无法高效运行
CPU资源是常见的性能瓶颈之一
总结
生产环境的性能提升
如何获得最佳优化结果?
如何提高指令地址映射的命中率?
为什么要关注指令地址映射的不命中率?
如何提高iTLB(指令地址映射)的命中率

该思维导图由 AI 生成,仅供参考

你好,我是庄振运。
我们今天继续探讨性能优化的实践,介绍一个系统方面的优化案例。这个案例涉及好几个方面,包括 CPU 的使用效率、地址映射、运维部署等。
开发项目时,当程序开发完成后,生成的二进制程序需要部署到服务器上并运行。运行这个程序时,我们会不断衡量各种性能指标。而生产实践中,我们经常发现一个问题:是指令地址映射的不命中率太高(High iTLB miss rate),导致程序运行不够快。我们今天就探讨这个问题。
在我过去的生产实践中,针对这一问题,曾经采取的一个行之有效的解决方案,就是同时进行二进制程序的编译优化采用大页面的部署优化。我下面就详细地分享这两个优化策略,并介绍如何在公司生产环境中,把这两个策略进行无缝整合。

为什么要关注指令地址映射的不命中率?

我们先来看看为什么需要关注 iTLB 的命中率
在以往从事的性能工作实践中,我观察到 CPU 资源是最常见的性能瓶颈之一,因此提高 CPU 性能,一直是许多性能工作的重点
导致 CPU 性能不高的原因有很多,其中有一种原因就是较高的 iTLB 不命中率。这里的 iTLB 就是 Instruction Translation Lookaside Buffer,也就是指令转换后备缓冲区。iTLB 命中率不高,就会导致 CPU 无法高效运行。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

文章总结:提高iTLB(指令地址映射)的命中率对于优化CPU性能至关重要。iTLB不命中率高会导致CPU运行效率低下,因为TLB的访问延迟比内存页表高得多。本文介绍了iTLB的作用和重要性,以及针对高iTLB不命中率的解决方案。作者分享了通过二进制程序的编译优化和采用大页面的部署优化来提高iTLB命中率的有效策略。这些优化策略可以显著降低CPU处理未命中iTLB的性能损失,提高指令执行速度。 此外,文章还介绍了两种优化方案:一是通过编译优化来减少iTLB不命中率,包括使用FDO(Feedback-Directed Optimization)和优化编译器选项等方法;二是采用大页面来减少覆盖二进制文件的工作集所需的TLB条目数,从而提高iTLB命中率。这两种方案可以独立工作,也可以整合起来,以获得最佳的优化结果。 为了自动化整个优化过程,文章提出了一个包含程序剖析、编译链接和加载部署三大模块的解决方案。通过这一流程,可以实现对服务的自动优化,使得该解决方案成为能被几乎所有服务简单采用的方案,而且几乎是免维护的解决方案。 最后,文章还分享了在Facebook生产环境中采用这一优化策略的实际效果,包括应用程序和服务器系统性能的提升,以及iTLB不命中率和CPU使用率的降低。这些数据展示了优化方案的实际效果,为读者提供了有益的信息和实践案例。 总的来说,本文通过介绍iTLB命中率优化的重要性和有效策略,为读者提供了在优化CPU性能方面的有益信息。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能工程高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • xiaobang
    请问像Java这类跑在vm上的语言该怎么做itlb优化呢?

    作者回复: Java因为跑在JVM里面,除非去修改JVM,否则程序员/运维能够控制的比较有限。但还是可以看情况尽量使用大页面。JVM的启动有一些大页面相关的参数。

    2020-02-06
    1
  • Joe Black
    请问在linux上不改系统配置,如何手工为应用程序指定大页面呢?

    作者回复: 可以在程序里面调用,比如mmap。参考http://man7.org/linux/man-pages/man2/mmap.2.html

    2020-01-17
    1
  • Linuxer
    请问文中的指标,什么样的取值算正常,什么样的取值算有问题呢?比如下面我抓的mysql的输出算正常吗? 117,811,688,709 dTLB-loads (100.00%) 804,095,370 dTLB-load-misses # 0.68% of all dTLB cache hits (100.00%) 772,145,652 iTLB-loads 1,179,670,139 iTLB-load-misses # 152.78% of all iTLB cache hits 125.454839041 seconds time elapsed

    作者回复: iTLB的数据肯定不对(load 不可能小于miss);应该是系统(CPU)的问题。 查了一下,好像有些CPU(包括Broad well)的iTLB-loads 被错误的映射到 ITLB_MISSES.STLB_HIT; iTLB-load-misses映射到ITLB_MISSES.MISS_CAUSES_A_WALK。

    2020-01-15
    1
  • 蚂蚁内推+v
    想问下老师:文中提到的“编译优化找到Hot Text区域,然后通过链接器脚本来优化二进制文件中的函数布局”,对于C++程序有对应的工具或具体方法么?

    作者回复: 你用Google搜一下,应该有些相关技术和介绍。你也可以参考一下我们的一篇论文,里面有很多参考文献。

    2020-04-01
  • Joe Black
    文中提到“链接器脚本将根据访问顺序,优化二进制文件中的函数布局”,请问这个脚本基于什么方式优化函数布局?链接过程可以自己控制吗?

    作者回复: Facebook把一些相关技术开源了,你可以参考下,包括HFsort和Bolt。 https://github.com/facebook/hhvm/tree/master/hphp/tools/hfsort; https://github.com/facebookincubator/BOLT

    2020-01-17
  • 开眼了,这个层次的优化,远远超出了一个业务研发的能力范围,平时的主要从程序逻辑、架构设计、调整组件参数的方式来搞,这种指令级的无能为力。 人外有人,天外有天,老师厉害。
    2020-03-05
    4
  • 我来也
    长见识了,居然能优化到这种地步。
    2020-01-15
    1
  • stevensafin
    能不能给个实际的案例
    2023-09-06归属地:广东
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部