L2缓存行未命中计数

4
我想要计算在运行特定程序A时L2高速缓存未命中的总数。有没有办法找到L2高速缓存未命中?
我了解到,Core i7 CPU的性能计数器事件类型“L2_LINES_OUT”可用于计算L2高速缓存线路驱逐次数,但不知道如何使用它?
我正在使用Linux和Intel i7 IvyBridge机器。
非常感谢任何指针或链接。

那对你有什么影响吗?你不能简单地对你的程序进行基准测试吗? - Basile Starynkevitch
1
@BasileStarynkevitch,我认为这正是他想做的 :) - Leeor
3个回答

2

根据这个总结,你可以使用l2_rqsts子事件:

0x01: (name=demand_data_rd_hit) Demand Data Read requests that hit L2 cache
0x03: (name=all_demand_data_rd) Demand Data Read requests
0x04: (name=rfo_hit) RFO requests that hit L2 cache
0x08: (name=rfo_miss) RFO requests that miss L2 cache
0x0c: (name=all_rfo) RFO requests to L2 cache
0x10: (name=code_rd_hit) L2 cache hits when fetching instructions, code reads.
0x20: (name=code_rd_miss) L2 cache misses when fetching instructions
0x30: (name=all_code_rd) L2 code requests
0x40: (name=pf_hit) Requests from the L2 hardware prefetchers that hit L2 cache
0x80: (name=pf_miss) Requests from the L2 hardware prefetchers that miss L2 cache
0xc0: (name=all_pf) Requests from L2 hardware prefetchers 

您可以使用(all_demand_data_rd - demand_data_rd_hit)来计算需求未命中。

1

IBM的文档可能会有所帮助。

它描述了Ivybridge上许多不同指标的各种表达式。你想要的那个似乎是

 *Instruction fetch from L2 cache miss rate*
 100.0 * X_L2_RQSTS_IFETCH_MISS / X_L2_RQSTS_IFETCHES

“IFETCH” 事件仅计算指令缓存未命中(错过代码 L1 并查找共享 L2)的次数。 - Leeor

0
搜索PAPI,它是一个工具,您可以使用它在收集L2缓存未命中的代码段之前和之后读取PMU。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接