我在 32-nm Intel Westmere 处理器上运行 Linux。我担心来自性能计数器的 DTLB 未命中数上看似矛盾的数据。我使用随机内存访问测试程序(单线程)进行了两次实验,如下所示:
实验(1):我使用以下性能计数器计算了 DTLB 未命中
DTLB_MISSES.WALK_COMPLETED ((Event 49H, Umask 02H)
实验(2):我通过以下两个计数器值相加来计算 DTLB 未命中
MEM_LOAD_RETIRED.DTLB_MISS (Event CBH, Umask 80H)
MEM_STORE_RETIRED.DTLB_MISS (Event 0CH, Umask 01H)
我希望这些实验的输出是相似的。然而,我发现实验(1)中报告的数字几乎是实验(2)中的两倍。我不知道为什么会这样。
有人可以帮助阐明这种明显的差异吗?