Cachegrind介绍
1 Cachegrind基于Valgrind的剖析器(profiler)
计算机系统变得越来越复杂,需要剖析工具
存储系统往往是系统瓶颈,需要剖析Cache
2 功能
- 模拟L1、L2 Cache
- 剖析Cache行为,执行次数、失效率等
- 按照文件、函数、代码行、汇编指令剖析
3 作用
- 详细Cache剖析,发现程序瓶颈
- 指令改进程序,提高执行效率
- Trace驱动的Cache模拟器
4 优点
- 容易使用,不需要重新编译
- 剖析所有执行的代码,包括库
- 不限定语言
- 速度相对较快
- 灵活,模拟不同配置的Cache
Cachegrind使用
- valgrind --tool=cachegrind prog
- -I1/D1/LL=<size>,<associativity>,<line size>
- Output 文件、函数、代码、汇编
检测程序瓶颈
Cachegrind运行结果
Kcachegrind剖析
改进后
Kcachegrind结果
工作原理
- 数据结构
Ø Global Cache State
执行每条指令时更新
标记每个内存块在哪个cache中
Ø Cost Centre Table
Ø 哈希表
Ø 记录每行源代码cache访问状况数据
Ø Instr-info Table
Ø 每条指令信息
Ø 指令地址、数据地址、大小
Ø 指向对应的CostCentre Table
- 插桩过程
性能
p SPEC 2000 20 – 95 倍
p 快速原因
Ø 每天指令的信息存在instrinfo中、减少参数传递
Ø cost centre addresses包含特性
Ø 只有C函数调用 与 trace buffer对比
Ø 使用tracebuffer,可以减少C函数调用,却性能下降
Ø 最后处理整体结果,而不是执行过程中计算
Ø 尽快减少输出文件大小,减少I/O
缺点
p 地址的trace
Ø 系统调用、内核态代码和一些客户端代码
Ø 并发行问题,只考察某个进程
Ø 将x86指令转换Ucode过程中,丢失少量信息
p 地址不准确
Ø 虚拟地址,未考虑虚实地址转换
Ø TLB失效
Ø Valgrind线程调度有别于标准库
Ø 客户程序的内存布局影响
p Cache模拟本身的不正确
Ø 替换算法与真实硬件差别
Ø 未考虑预取
应用
p Haskell 应用与 Glasgow Haskell编译器
p 指导插入prefetchinginstructions
p 提升22%
p Rank和Select查询算法比较[3]
p Rank(B, i)
p Select(B, j)
p Kcachegrind
p Data structure
参考文献
[1]Nethercote N. Dynamic binary analysisand instrumentation[D]. University of Cambridge, 2004.
[2] Bauer M. Detecting bugs andbottlenecks in C/C++ sources[J]. 2012.
[3] González R, Grabowski S, Mäkinen V, etal. Practical implementation of rank and select queries[A]. Poster ProceedingsVolume of 4th Workshop on Efficient and Experimental Algorithms (WEA’05)[C]. pp. 27-38, 2005.
[4] Mehl M, Weinzierl T, Zenger C. A cache‐obliviousself‐adaptive full multigrid method[J]. Numerical Linear Algebra withApplications, 2006, 13(2‐3): 275-291.