1

我在 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)中的两倍。我不知道为什么会这样。

有人可以帮助阐明这种明显的差异吗?

4

1 回答 1

4

这是意料之中的,因为第一个事件计算所有可能的原因(加载、存储、预取)导致的所有 TLB 级别的未命中数,包括推测性执行的内存访问,而其他两个事件仅计算退休(即非-推测性)加载和存储操作,并且只有其中没有导致任何错误的操作。

请参阅 Intel® 64 and IA-32 Architectures Software Developer's Manual 第 3 卷第 19.6 章。

谢谢,

斯塔斯

于 2013-07-31T15:32:01.437 回答