性能工程高手课
庄振运
Facebook性能优化和容量管理高级专家
立即订阅
2337 人已学习
课程目录
已更新 33 讲 / 共 36 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 代码不要眼前的苟且,而要效率的提升和性能的优化
免费
开篇:认识代码性能和系统容量效率 (3讲)
01 | 程序员为什么要关心代码性能?
02 | 程序员也要关心整个系统和公司成本吗?
03 | 导读:专栏是怎么设计的?需要哪些知识?
性能定律和数理基础 (5讲)
04 | 性能工程三定律:IT业和性能优化工作的“法律法规”
05 | 概率统计和排队论:做性能工作必须懂的数理基础
06 | 性能数据的分析:如何从大量数据中看出想要的信号?
07 | 性能数据的展示:一图胜千言,说出你的数据故事
08 | 经验总结:必须熟记的一组常用性能数字
性能测试 (5讲)
09 | 性能测试的种类:如何快准狠地抓住一个测试的本质?
10 | 性能测试的规划和步骤:为什么性能测试不容易一蹴而就呢?
11 | 性能测试的工具:七大测试场景如何选择高质量的测试工具?
12 | 九条性能测试的经验和教训:如何保证测试结果可靠且可重复?
13 | 性能测试的工程集成:如何与产品开发和运维业务有机集成?
性能分析 (5讲)
14 | 性能分析概述:性能问题归根结底是什么原因?
15 | CPU篇:如何让CPU的运行不受阻碍?
16 | 内存篇:如何减少延迟提升内存分配效率?
17 | 存储篇:如何根据性能优缺点选择最合适的存储系统?
18 | 网络篇:如何步步拆解处理复杂的网络性能问题?
性能优化 (6讲)
19 | 性能优化六大原则:三要三不要,快速有效地进行优化
20 | 性能优化十大策略:如何系统地有层次地优化性能问题?
21 | CPU案例:如何提高LLC(最后一级缓存)的命中率?
22 | 系统案例:如何提高iTLB(指令地址映射)的命中率?
23 | 存储案例:如何降低SSD峰值延迟?
24 | 跨层案例:如何优化程序、OS和存储系统的交互?
性能工程实践 (5讲)
25 | 如何在生产环境中进行真实的容量测试?
26 | 怎么规划和控制数据库的复制延迟大小?
27 | 多任务环境中的Java性能问题,怎样才能不让程序互相干扰?
28 | 网络数据传输慢,问题到底出在哪了?
29 | 如何彻底发挥SSD的潜力?
容量规划与服务效率 (3讲)
30 | 服务器的管理和部署:工业界近几年有哪些发展趋势?
31 | 规划部署数据中心要考虑哪些重要因素?
32 | 服务的容量规划:怎样才能做到有备无患?
性能工程高手课
登录|注册

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

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

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

我们先来看看为什么需要关注 iTLB 的命中率
在以往从事的性能工作实践中,我观察到 CPU 资源是最常见的性能瓶颈之一,因此提高 CPU 性能,一直是许多性能工作的重点
导致 CPU 性能不高的原因有很多,其中有一种原因就是较高的 iTLB 不命中率。这里的 iTLB 就是 Instruction Translation Lookaside Buffer,也就是指令转换后备缓冲区。iTLB 命中率不高,就会导致 CPU 无法高效运行。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《性能工程高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

  • 我来也
    长见识了,居然能优化到这种地步。
    2020-01-15
    1
  • xiaobang
    请问像Java这类跑在vm上的语言该怎么做itlb优化呢?
    2020-02-06
  • feihui
    大页面最大的缺点在于对于小程序上会造成内存浪费

    作者回复: 如果程序一定要大页面,的确会造成浪费。
    如果让操作系统去管理,比如用THP,那么浪费的不会太大。THP会根据情况自适应。

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

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

    2020-01-17
  • 钱晓明
    请问在linux上不改系统配置,如何手工为应用程序指定大页面呢?

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

    2020-01-17
  • 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
收起评论
6
返回
顶部