sen*_*iwa 9 performance x86 caching performancecounter xcode-instruments
关于此主题有一些问题,但没有一个是真正的答案。问题是:如何测量macOS上的L1,L2,L3(如果有)缓存未命中?
问题在于,即使没有任何外部工具,macOS在理论上也不会提供这些值。在乐器中,我们可以使用计数器并转到录音选项...,如下所示:
但是,不存在L1高速缓存未命中或L2高速缓存,但是可以选择的可能项目数量庞大:
因此,在测量L1和L2 高速缓存未命中率(或L3,如果有的话)时,如何计算它们?
为了检索该神奇的“缓存未命中”数字,我应该注意哪个列表“ 缓存未命中”?
在Ivy Bridge的,Haswell的,Broadwell微架构,并Goldmont处理器,你可以使用下面的事件数是需要通过缓存的需求负载请求该数据缓存行数1个错过的L1,L2和L3加载指令:MEM_LOAD_UOPS_RETIRED.L1_MISS,MEM_LOAD_UOPS_RETIRED.L2_MISS,和MEM_LOAD_UOPS_RETIRED.L3_MISS。在SKYLAKE微架构,后来,相应的事件被称为:MEM_LOAD_RETIRED.L1_MISS,MEM_LOAD_RETIRED.L2_MISS,和MEM_LOAD_RETIRED.L3_MISS。这些事件仅计算已退出的装入指令所需的高速缓存行。
在Nehalem处理器和更高版本,可以使用下面的事件来算的是需要从缓存存储指令错过的L1,L2和L3需求存储请求高速缓存行的数量:L2_RQSTS.ALL_RFO,L2_RQSTS.RFO_MISS,和OFFCORE_RESPONSE(MSR位1,17,26 -29、30-37)。这些事件计算从管道中退出或清除的存储指令所需的缓存行。
根据情况,仅计算退休指令比计算所有指令的访问量更为有用。不幸的是,没有对应于的商店事件MEM_LOAD_UOPS_*。但是,有些负载事件会同时统计已退休和已刷新的负载。其中包括L2_RQSTS.ALL_DEMAND_DATA_RDL1负载未命中,L2_RQSTS.DEMAND_DATA_RD_MISSL2负载未命中和OFFCORE_RESPONSE (MSR bits 0, 17, 26-29, 30-37)L3负载未命中。请注意,前两个事件还包括来自L1硬件预取器的加载。该L2_RQSTS.DEMAND_DATA_RD_MISS事件仅在Ivy Bridge和更高版本上受支持。在Sandy Bridge的,我认为它可以减去算出L2_RQSTS.DEMAND_DATA_RD_HIT的L2_RQSTS.ALL_DEMAND_DATA_RD。
另请参阅:Linux性能如何计算缓存引用和缓存未命中事件。
脚注:
(1)该IN指令被视为MEM_LOAD_UOPS_RETIRED.L1_MISSHaswell上的一个事件(请参阅:端口映射的I / O在Sandy Bridge上的外观如何)。我还凭经验验证了所有MEM_LOAD_UOPS_RETIRED.L1|2|3|LFB_MISS|HIT事件均不计算UC或WC内存类型的负载,并且它们确实计算WP,WB和WT内存类型的负载。请注意,手册仅提及UC负载被排除,并且仅针对某些事件。顺便说一下,MEM_UOPS_RETIRED.ALL_LOADS计算所有内存类型的负载。
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |