Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance macOS上的缓存未命中_Performance_Caching_X86_Performancecounter_Xcode Instruments - Fatal编程技术网

Performance macOS上的缓存未命中

Performance macOS上的缓存未命中,performance,caching,x86,performancecounter,xcode-instruments,Performance,Caching,X86,Performancecounter,Xcode Instruments,关于这个话题有一些问题,但没有一个真正的答案。问题是:如何测量macOS上的L1、L2、L3(如果有)缓存未命中 问题不在于macOS在理论上不提供这些价值,即使没有任何外部工具。在仪器中我们可以使用计数器并转到录制选项…,如下所示: 但是,没有一级缓存未命中或二级缓存未命中,而是有大量可能选择的项: 因此,当测量一级缓存和二级缓存未命中时(或者如果有,甚至是三级缓存未命中),我如何计算它们 为了检索神奇的“缓存未命中”数字,我应该注意列表中的哪个“缓存未命中” 在Ivy Bridge、Ha

关于这个话题有一些问题,但没有一个真正的答案。问题是:如何测量macOS上的L1、L2、L3(如果有)缓存未命中

问题不在于macOS在理论上不提供这些价值,即使没有任何外部工具。在仪器中我们可以使用计数器并转到录制选项…,如下所示:

但是,没有一级缓存未命中或二级缓存未命中,而是有大量可能选择的项:

因此,当测量一级缓存和二级缓存未命中时(或者如果有,甚至是三级缓存未命中),我如何计算它们


为了检索神奇的“缓存未命中”数字,我应该注意列表中的哪个“缓存未命中”

在Ivy Bridge、Haswell、Broadwell和Goldmont处理器上,您可以使用以下事件来统计来自cacheable1加载指令的请求加载所需的数据缓存线的数量,这些指令未命中L1、L2和L3:
MEM\u load\u UOPS\u RETIRED.L1\u MISS
MEM\u load\u UOPS\u RETIRED.L2\u MISS
,和
MEM\u LOAD\u UOPS\u RETIRED.L3\u MISS
。在Skylake和更高版本上,相应的事件被称为:
MEM\u LOAD\u RETIRED.L1\u MISS
MEM\u LOAD\u RETIRED.L2\u MISS
MEM\u LOAD\u RETIRED.L3\u MISS
。这些事件仅统计失效的加载指令所需的缓存线

在Nehalem和更高版本上,您可以使用以下事件统计来自可缓存存储指令的请求存储请求所需的缓存线数量,这些指令未命中L1、L2和L3:
L2\u RQSTS.所有RFO
L2\RQSTS.RFO\u未命中
,以及
堆外响应
(MSR位1、17、26-29、30-37)。这些事件统计从管道中失效或刷新的存储指令所需的缓存线

仅对失效指令进行计数比根据场景对所有指令的访问进行计数更有用。不幸的是,没有对应于
MEM\u LOAD\u UOPS\uu*
的存储事件。但是,有些加载事件同时计算失效和刷新的加载。这些包括
L2\u rqts。对于L1负载未命中,所有的需求数据未命中
L2\u rqts。对于L2负载未命中,需求数据未命中
,以及对于L3负载未命中,
堆外响应(MSR位0、17、26-29、30-37)
。请注意,前两个事件还包括来自L1硬件预取器的负载。
L2\u RQSTS.DEMAND\u DATA\u RD\u MISS
事件仅在Ivy Bridge和更高版本上受支持。在Sandy Bridge上,我认为它可以通过从
L2\u RQSTS.ALL\u DEMAND\u DATA\u RD\u HIT
中减去
L2\u RQSTS.DEMAND\u RD\u HIT来计算

另见:


脚注:


(1)
指令中的
被算作Haswell上的
MEM\u LOAD\u UOPS\u RETIRED.L1\u MISS
事件(请参阅:)。我还根据经验验证了所有
MEM_LOAD_UOPS_RETIRED.L1 | 2 | 3 | LFB_MISS | HIT
事件都不计算UC或WC内存类型的负载,而是计算WP、WB和WT内存类型的负载。请注意,手册仅提及UC负载被排除在外,并且仅适用于部分事件。顺便说一句,
MEM\u UOPS\u已退役。所有加载都对来自所有内存类型的加载进行计数。

这些“事件”的文档是最新的。@Rob我已经自由地编辑了标签,使其更容易引起Peter Cordes、BeeOnRope和其他专家的注意。