arch: CPI stack

This commit is contained in:
Cheng Jian
2022-01-05 22:52:05 +08:00
parent 4575ea74e3
commit 3038c27cfa
+39 -21
View File
@@ -34,21 +34,37 @@ blogexcerpt: 虚拟化 & KVM 子系统
# 1 CPI stack
# 1 CPI
-------
Van Craeynest 提出了性能影响的评估模型(performance impact estimation PIE
指令周期数(CPI)是一个很重要的高级指标, 用来描述 CPU 如何使用它的时钟周期, 同时也可以用来理解 CPU 使用率的本质.
大核和小核的 MLP 和 ILP 的比值可以很好的说明核间的性能差异
当应用在某一个 core 上执行时,收集 ILP 和 MLP 信息,以及 CPI 堆栈。利用收集的信息,估计另一个类型的 core 上的应用程序的性能
简化的思想,根据程序运行时,core 利用 ILP 和 MLP 对整体性能的影响程度来决定调度方案
这个指标也可以被表示为每周期指令数(instructions per cycle, IPC), 即 CPI 的倒数.
CPI 较高代表 CPU 经常陷入停滞, 通常都是在访问内存. 而较低的 CPI 则代表 CPU 基本没有停滞, 指令吞吐量较高.
通常情况下, 通过 CPI 的取值, 我们可以大致判断一个计算密集型任务, 到底是 CPU bound 还是 Memory Bound:
* CPI 小于 1, 程序通常是 CPU Bound;
* CPI 大于 1, 程序通常是 Memory Bound;
这些指标指明了性能调优的主要工作方向. 内存访问密集的负载, 可以通过下面的方法提高性能, 如使用更快的内存(DRAM)、提高内存本地性(软件配置), 或者减少内存 I/O 数量.
使用更高时钟频率的 CPU 并不能达到预期的性能目标, 因为 CPU 还是需要为等待内存 I/O 完成而花费同样的时间. 换句话说, 更快的 CPU 意味着更多的停滞周期, 而指令完成速率不变. CPI 的高低与否实际上和处理器以及处理器功能有关, 可以通过实验方法运行已知的负载得出.
例如, 你会发现高 CPI 的负载可以使 CPI 达到 10 或者更高, 而在低 CPI 的负载下, CPI 低于 1(受益于前述的指令流水线和宽度技术, 这是可以达到的).
值得注意的是, CPI 代表了指令处理的效率, 但并不代表指令本身的效率. 假设有一个软件改动, 加入了一个低效率的循环, 这个循环主要在操作 CPU 寄存器(没有停滞周期): 这种改动可能会降低总体 CPI, 但会提高 CPU 的使用和利用度
# 2 学术研究
# 2 CPI stack
-------
## 2.2 学术研究
-------
[Mluti-Strage CPI Stacks](https://heirman.net/papers/eyerman2018mscs.pdf)
@@ -65,19 +81,9 @@ https://users.elis.ugent.be/~leeckhou/papers/asplos06.pdf
[A Top-Down Approach to Architecting CPI Component Performance Counters](https://xueshu.baidu.com/usercenter/paper/show?paperid=f8386b09436480d8ed1f1d8460e29c97) https://users.elis.ugent.be/~leeckhou/papers/toppicks07.pdf
[CPCI Stack: Metric for Accurate Bottleneck Analysis on OoO Microprocessors](https://www.semanticscholar.org/paper/CPCI-Stack%3A-Metric-for-Accurate-Bottleneck-Analysis-Tanimoto-Ono/3a7420ec4f5369e67f658af17563d98efe19733e)
# 3 工业实践
-------
https://personals.ac.upc.edu/marc/Marc_Gonzalez_Home_page/Material_PoTra_files/POTRA%20tutorial%20-%20PART%201.pdf
https://old.hotchips.org/wp-content/uploads/hc_archives/hc26/HC26-12-day2-epub/HC26.12-8-Big-Iron-Servers-epub/HC26.12.817-POWER8-Mericas-IBM%20Revised-no-spec.pdf
https://openpowerfoundation.org/wp-content/uploads/2015/03/Sadasivam-Satish_OPFS2015_IBM_031615_final.pdf
# 4 开源工具
## 2.3 开源工具
-------
[Sniper CPI Stacks Generate Tools](http://snipersim.org/w/CPI_Stacks)
@@ -92,6 +98,18 @@ https://openpowerfoundation.org/wp-content/uploads/2015/03/Sadasivam-Satish_OPFS
## 2.3 工业实践
-------
IBM 的 [POWER5](http://www.ee.unlv.edu/~meiyang/ecg700/readings/ibmpower5chipadualcore.pdf) 是最早支持 CPI stack 跟踪的乱序(Out-of-Order)处理器, 随后在 POWER7, [POWER8](https://old.hotchips.org/wp-content/uploads/hc_archives/hc26/HC26-12-day2-epub/HC26.12-8-Big-Iron-Servers-epub/HC26.12.817-POWER8-Mericas-IBM%20Revised-no-spec.pdf) 中不断优化, 大放异彩. 参见 [POWER8 Performance Analysis](https://openpowerfoundation.org/wp-content/uploads/2015/03/Sadasivam-Satish_OPFS2015_IBM_031615_final.pdf).
Intel 随后在 [A Top-Down method for performance analysis and counters architecture](https://www.semanticscholar.org/paper/A-Top-Down-method-for-performance-analysis-and-Yasin/6776ff919597ca4feccd413208dedc401f6e655d#extracted) 中进一步扩展了 CPI stack, 进一步对微架构的事件进行了拆解, 并引入了 TOPDOWN(自顶向下) 的分析方法.
TOPDOWN 可以看作是 CPI Stack 的分析的扩展实现, 自此替代传统的 CPI stack 分析成为业界目前主流的微架构分析方法.