【问题标题】:DTLB miss number counting discrepencyDTLB 未命中数计数差异
【发布时间】:2013-07-31 13:51:36
【问题描述】:

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

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

【问题讨论】:

    标签: performancecounter tlb intel-vtune


    【解决方案1】:

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

    请参阅英特尔® 64 和 IA-32 架构软件开发人员手册第 3 卷第 19.6 章。

    谢谢,

    地位

    【讨论】:

    • 感谢您的 cmets,但我不敢苟同。第一个事件仅计算所有 TLB 中未命中后的页面遍历(如果 L1-TLB 未命中 L2 TLB,则不会触发页面遍历)。另一方面,似乎第二个事件可能包括 L1 和 L2 TLB 未命中。我还确保没有使用 s/w 预取,并且所有内存都预先故障。唯一可能剩下的就是由于错误推测而导致的 DTLB 未命中。但是,我认为因为我只计算了“已完成”的页面浏览,所以没有任何页面浏览也被注意。我错过了什么吗?
    • 好吧,这里的“已完成”实际上意味着“任何错过了所有 TLB 级别”,您的情况的差异可能是由错误推测、硬件预取和可能的一些不准确性来解释的(尽管我无法证明这一点) 在第一个事件中(因为它不是一个精确的事件,而其他两个是精确的)。
    猜你喜欢
    • 2020-07-26
    • 1970-01-01
    • 2018-05-10
    • 2015-04-07
    • 2015-12-30
    • 2012-08-26
    • 2021-04-01
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多