Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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
X86 三级缓存未命中的PMC(性能监视计数器)值过高_X86_Cpu Architecture_Performancecounter_Msr_Intel Pmu - Fatal编程技术网

X86 三级缓存未命中的PMC(性能监视计数器)值过高

X86 三级缓存未命中的PMC(性能监视计数器)值过高,x86,cpu-architecture,performancecounter,msr,intel-pmu,X86,Cpu Architecture,Performancecounter,Msr,Intel Pmu,我正在寻找一种方法来估计三级缓存未命中数,方法是在装有英特尔CPU(英特尔i7 6700 skylake)的Linux PC上使用“IA32_PERFEVTSELx”和“IA32_PMCx”MSR对。 为此,我在内核中安装了一个计时器,它定期(1秒)报告PMC的值。 在代码中,我在写入“0x41412E”后读取IA32_PMC1 MSR的值(映射到0xC2),其中事件选择部分为0x2E,UMask部分为0x41,第16位为用户,第22位为相对于IA32_PERFEVTSEL1 MSR的启用位(映

我正在寻找一种方法来估计三级缓存未命中数,方法是在装有英特尔CPU(英特尔i7 6700 skylake)的Linux PC上使用“IA32_PERFEVTSELx”和“IA32_PMCx”MSR对。 为此,我在内核中安装了一个计时器,它定期(1秒)报告PMC的值。 在代码中,我在写入“0x41412E”后读取IA32_PMC1 MSR的值(映射到0xC2),其中事件选择部分为0x2E,UMask部分为0x41,第16位为用户,第22位为相对于IA32_PERFEVTSEL1 MSR的启用位(映射到0x187):

即使我期望该值表示三级缓存未命中的数量,但这似乎很奇怪。它的值太高,因此,我认为它不是三级缓存未命中数,我在手册(英特尔64和IA-32体系结构软件开发人员手册第3B卷:系统编程指南)中找不到它的含义。我观察到的数值如下:

rdmsr: 0 at start_shscan(56) in mcsched.c
rdmsr: 0 at start_shscan(56) in mcsched.c
rdmsr: 8595908 at start_shscan(56) in mcsched.c
rdmsr: 17274482 at start_shscan(56) in mcsched.c
rdmsr: 21449216 at start_shscan(56) in mcsched.c
rdmsr: 26305745 at start_shscan(56) in mcsched.c
rdmsr: 26511242 at start_shscan(56) in mcsched.c
rdmsr: 33316291 at start_shscan(56) in mcsched.c
rdmsr: 34736360 at start_shscan(56) in mcsched.c
rdmsr: 35151932 at start_shscan(56) in mcsched.c
rdmsr: 43806356 at start_shscan(56) in mcsched.c
rdmsr: 51132302 at start_shscan(56) in mcsched.c
rdmsr: 59797757 at start_shscan(56) in mcsched.c
rdmsr: 0 at start_shscan(56) in mcsched.c
rdmsr: 0 at start_shscan(56) in mcsched.c
rdmsr: 6820029 at start_shscan(56) in mcsched.c
rdmsr: 8322078 at start_shscan(56) in mcsched.c
rdmsr: 63313471 at start_shscan(56) in mcsched.c
rdmsr: 397962 at start_shscan(56) in mcsched.c
rdmsr: 9429026 at start_shscan(56) in mcsched.c
rdmsr: 18124455 at start_shscan(56) in mcsched.c
rdmsr: 23706367 at start_shscan(56) in mcsched.c
rdmsr: 27087960 at start_shscan(56) in mcsched.c
rdmsr: 68769660 at start_shscan(56) in mcsched.c
rdmsr: 69110424 at start_shscan(56) in mcsched.c
rdmsr: 78216541 at start_shscan(56) in mcsched.c
rdmsr: 87385467 at start_shscan(56) in mcsched.c
rdmsr: 95083478 at start_shscan(56) in mcsched.c
rdmsr: 101347654 at start_shscan(56) in mcsched.c
rdmsr: 8327692 at start_shscan(56) in mcsched.c
rdmsr: 27377092 at start_shscan(56) in mcsched.c
rdmsr: 36316258 at start_shscan(56) in mcsched.c
rdmsr: 45323291 at start_shscan(56) in mcsched.c
rdmsr: 54366010 at start_shscan(56) in mcsched.c
rdmsr: 63135801 at start_shscan(56) in mcsched.c
rdmsr: 72037000 at start_shscan(56) in mcsched.c
rdmsr: 81032798 at start_shscan(56) in mcsched.c
rdmsr: 89975340 at start_shscan(56) in mcsched.c
rdmsr: 98661287 at start_shscan(56) in mcsched.c
rdmsr: 107482921 at start_shscan(56) in mcsched.c
rdmsr: 116290561 at start_shscan(56) in mcsched.c
rdmsr: 125135979 at start_shscan(56) in mcsched.c
rdmsr: 133920103 at start_shscan(56) in mcsched.c
rdmsr: 142695638 at start_shscan(56) in mcsched.c
rdmsr: 151456156 at start_shscan(56) in mcsched.c
rdmsr: 160171239 at start_shscan(56) in mcsched.c
rdmsr: 168879495 at start_shscan(56) in mcsched.c
rdmsr: 177788861 at start_shscan(56) in mcsched.c
rdmsr: 186589920 at start_shscan(56) in mcsched.c
rdmsr: 195331675 at start_shscan(56) in mcsched.c
rdmsr: 204166715 at start_shscan(56) in mcsched.c
rdmsr: 213045449 at start_shscan(56) in mcsched.c
rdmsr: 221942627 at start_shscan(56) in mcsched.c
rdmsr: 231073520 at start_shscan(56) in mcsched.c
代码中有我犯的错误吗?或者请给我一个建议的价值观

=====================================添加了以下内容==========================

@Peter Cordes,我参考了《英特尔手册》(英特尔64和IA-32体系结构软件开发人员手册第3B卷:系统编程指南),我打算使用“LLC未命中”,这是下表中预定义的体系结构性能事件之一:


我认为在perf中给出一个示例更有助于您理解:我可以在perf中使用“perf stat-e r412e ls”来估计“ls”命令期间的三级缓存未命中。“r412e”可分为“r”+“41”+“2e”,r表示“[原始硬件evnet事件描述符],41表示UMask(0x41),2e表示事件选择(0x2e)。您可以通过“性能列表”查看它。

您认为您正在测量的事件的名称是什么?
mem\u load\u retired.l3\u miss
,或其他事件之一?您正在记录的CPU内核上运行的是什么?这些数字是否接近您为tha获得的
perf stat--per core-C$core\u number-e LLC load miss
t core?(这个命令可能不太正确,但你明白了。)@PeterCordes我看到了您的评论并添加了上述文章。请再次检查。谢谢。您是否尝试过使用
perf stat-e LLC load misses
进行测量,以查看其计数是否与您使用自己的测量代码看到的计数一样高?对于此事件或任何其他事件?参考周期很容易验证,因为它具有精确的相关性pondence to wall clock time,这样你就知道应该有多少个周期。(特别是如果你使用
rdtsc
)@PeterCordes啊,对不起。我刚刚执行了一个微基准测试,它创建了4个线程(适合物理核的数量),我将每个线程固定在一个物理核中,每个线程访问自己的数据(大尺寸int数组)。基准测试用于对三级缓存进行阈值筛选。结合您估计的结果和我上面的结果,我的测量值似乎大致符合三级缓存未命中率。非常感谢!是的,对于刷新缓存的工作负载来说,每秒6900万次三级缓存未命中率似乎完全合理。即每57个时钟周期1次(使用4GHz CPU).内存操作是流水线的,每个核心可以为不同的缓存线保留10个未完成的请求。(因此,如果没有遇到DRAM吞吐量瓶颈,吞吐量=最大并发/延迟。)请参阅。
rdmsr: 0 at start_shscan(56) in mcsched.c
rdmsr: 0 at start_shscan(56) in mcsched.c
rdmsr: 8595908 at start_shscan(56) in mcsched.c
rdmsr: 17274482 at start_shscan(56) in mcsched.c
rdmsr: 21449216 at start_shscan(56) in mcsched.c
rdmsr: 26305745 at start_shscan(56) in mcsched.c
rdmsr: 26511242 at start_shscan(56) in mcsched.c
rdmsr: 33316291 at start_shscan(56) in mcsched.c
rdmsr: 34736360 at start_shscan(56) in mcsched.c
rdmsr: 35151932 at start_shscan(56) in mcsched.c
rdmsr: 43806356 at start_shscan(56) in mcsched.c
rdmsr: 51132302 at start_shscan(56) in mcsched.c
rdmsr: 59797757 at start_shscan(56) in mcsched.c
rdmsr: 0 at start_shscan(56) in mcsched.c
rdmsr: 0 at start_shscan(56) in mcsched.c
rdmsr: 6820029 at start_shscan(56) in mcsched.c
rdmsr: 8322078 at start_shscan(56) in mcsched.c
rdmsr: 63313471 at start_shscan(56) in mcsched.c
rdmsr: 397962 at start_shscan(56) in mcsched.c
rdmsr: 9429026 at start_shscan(56) in mcsched.c
rdmsr: 18124455 at start_shscan(56) in mcsched.c
rdmsr: 23706367 at start_shscan(56) in mcsched.c
rdmsr: 27087960 at start_shscan(56) in mcsched.c
rdmsr: 68769660 at start_shscan(56) in mcsched.c
rdmsr: 69110424 at start_shscan(56) in mcsched.c
rdmsr: 78216541 at start_shscan(56) in mcsched.c
rdmsr: 87385467 at start_shscan(56) in mcsched.c
rdmsr: 95083478 at start_shscan(56) in mcsched.c
rdmsr: 101347654 at start_shscan(56) in mcsched.c
rdmsr: 8327692 at start_shscan(56) in mcsched.c
rdmsr: 27377092 at start_shscan(56) in mcsched.c
rdmsr: 36316258 at start_shscan(56) in mcsched.c
rdmsr: 45323291 at start_shscan(56) in mcsched.c
rdmsr: 54366010 at start_shscan(56) in mcsched.c
rdmsr: 63135801 at start_shscan(56) in mcsched.c
rdmsr: 72037000 at start_shscan(56) in mcsched.c
rdmsr: 81032798 at start_shscan(56) in mcsched.c
rdmsr: 89975340 at start_shscan(56) in mcsched.c
rdmsr: 98661287 at start_shscan(56) in mcsched.c
rdmsr: 107482921 at start_shscan(56) in mcsched.c
rdmsr: 116290561 at start_shscan(56) in mcsched.c
rdmsr: 125135979 at start_shscan(56) in mcsched.c
rdmsr: 133920103 at start_shscan(56) in mcsched.c
rdmsr: 142695638 at start_shscan(56) in mcsched.c
rdmsr: 151456156 at start_shscan(56) in mcsched.c
rdmsr: 160171239 at start_shscan(56) in mcsched.c
rdmsr: 168879495 at start_shscan(56) in mcsched.c
rdmsr: 177788861 at start_shscan(56) in mcsched.c
rdmsr: 186589920 at start_shscan(56) in mcsched.c
rdmsr: 195331675 at start_shscan(56) in mcsched.c
rdmsr: 204166715 at start_shscan(56) in mcsched.c
rdmsr: 213045449 at start_shscan(56) in mcsched.c
rdmsr: 221942627 at start_shscan(56) in mcsched.c
rdmsr: 231073520 at start_shscan(56) in mcsched.c