Performancecounter DTLB未命中计数差

Performancecounter DTLB未命中计数差,performancecounter,tlb,intel-vtune,Performancecounter,Tlb,Intel Vtune,我在32纳米英特尔Westmile处理器上运行Linux。我担心性能计数器中关于DTLB未命中数的数据似乎存在冲突。我使用随机内存访问测试程序单线程运行了两个实验,如下所示: 实验1:我使用以下性能计数器计算DTLB未命中数 DTLB_未命中。步行_完成事件49H,乌马斯克02H 实验2:我通过将下面两个计数器值相加来计算DTLB未命中数 内存加载失效。DTLB未命中事件CBH,Umask 80H MEM_STORE_RETIRED.DTLB_未命中事件0CH,Umask 01H 我期望这些实验

我在32纳米英特尔Westmile处理器上运行Linux。我担心性能计数器中关于DTLB未命中数的数据似乎存在冲突。我使用随机内存访问测试程序单线程运行了两个实验,如下所示:

实验1:我使用以下性能计数器计算DTLB未命中数

DTLB_未命中。步行_完成事件49H,乌马斯克02H

实验2:我通过将下面两个计数器值相加来计算DTLB未命中数

内存加载失效。DTLB未命中事件CBH,Umask 80H

MEM_STORE_RETIRED.DTLB_未命中事件0CH,Umask 01H

我期望这些实验的结果是相似的。然而,我发现实验1中报告的数字几乎是实验2的两倍。我不知道为什么会这样


有人能帮我们解释一下这种明显的差异吗?

这是预期的,因为第一个事件统计了所有TLB级别的未命中数,这些未命中数是由所有可能的原因引起的,包括加载、存储、预取,包括推测性执行的内存访问,而其他两个事件只统计失效,即,非推测性加载和存储操作,并且仅限于其中未导致任何故障的操作

请参阅《英特尔64和IA-32体系结构软件开发人员手册》第3卷第19.6章

谢谢


Stas

这是自第一个事件以来预期的,统计由于所有可能的原因(包括推测性执行的内存访问)导致的所有TLB级别的未命中数,而其他两个事件仅统计失效,即非推测性加载和存储操作,只有那些没有引起任何过错的人

请参阅《英特尔64和IA-32体系结构软件开发人员手册》第3卷第19.6章

谢谢


Stas

谢谢你的评论,但我不同意你的看法。第一个事件仅统计所有TLB中未命中后的页面漫游。如果L1-TLB未命中L2 TLB,则不会触发页面漫游。另一方面,第二个事件似乎可能包括L1和L2 TLB未命中。我还确保没有使用s/w预回迁,并且所有内存都已预出现故障。唯一可能留下的是由于错误推测而导致的DTLB未命中。然而,我认为,因为我只计算了完成的页面漫游,而没有任何页面漫游也被删除。我遗漏了什么吗?好吧,在这里完成实际上意味着遗漏了所有TLB级别,您案例中的差异可能是由于错误计算、硬件预取以及可能的一些不准确,尽管我无法在第一个事件中证明它,因为它不是一个精确的事件,而其他两个是精确的。谢谢您的评论,但我不同意。第一个事件仅统计所有TLB中未命中后的页面漫游。如果L1-TLB未命中L2 TLB,则不会触发页面漫游。另一方面,第二个事件似乎可能包括L1和L2 TLB未命中。我还确保没有使用s/w预回迁,并且所有内存都已预出现故障。唯一可能留下的是由于错误推测而导致的DTLB未命中。然而,我认为,因为我只计算了完成的页面漫游,而没有任何页面漫游也被删除。我遗漏了什么吗?好吧,在这里完成实际上意味着遗漏了所有TLB级别,您案例中的差异可能是由于错误计算、硬件预取以及可能的一些不准确,尽管我无法在第一个事件中证明它,因为它不是一个精确的事件,而其他两个是精确的。