performance - 有没有办法测量缓存一致性未命中
问题描述
给定在多个内核上运行的程序,如果两个或多个内核在同一缓存行上运行,是否有办法测量缓存一致性失效/未命中的数量(即当 Core1 写入缓存行时,然后强制Core2 刷新它的缓存行副本以使两个内核保持一致)?
如果我对这个概念使用了错误的术语,请告诉我。
解决方案
是的,可以使用硬件性能计数器来执行此操作。但是,获取它们的方法是依赖于操作系统和您的处理器。在 Linux 上,perf
也可用于跟踪性能计数器(尤其是perf stat -e COUNTER_NAME_1,COUNTER_NAME_2,etc.
)。或者,在 Linux 和 Windows 上,英特尔 VTune 也可以做到这一点。
可以使用perf list
(或使用 PMU-Tools)检索硬件计数器列表。
您要测量的指标类型类似于MESI 缓存一致性协议中的所有权请求(RFO) 。希望大多数现代 (x86_64) 处理器都包含硬件事件来测量 RFO。在 Intel Skylake 处理器上,有称为 的硬件事件,更准确地说,是在L2 缓存级别执行此操作。或者,有许多更高级的 RFO 相关硬件事件可以在核心层级使用。l2_rqsts.all_rfo
l2_rqsts.code_rd_hit
l2_rqsts.code_rd_miss
推荐阅读
- airflow - Apache 气流宏获取最后 dag 运行执行时间
- powershell - 将数千个文件夹中的jpg文件重命名为avatar.jpg和main.jpg
- python - tf strided_slice 在 numpy 中等效吗?
- java - 如何在java中的List中保留两个不同的对象?
- regex - 正则表达式检查 AND
- arrays - 从R中的列表中获取元素中的元素
- angular - 为什么 CanDeactivate Guard 无法读取我的组件中的方法?
- javascript - 如何自动点击网页中的超链接?
- dart - 为什么 Flutter 在 Device 和 DateTime/TimeOfDay 之间返回不同的时间
- java - Ignite Remote Cluster [无法映射缓存键(所有分区节点离开网格)]