测量x86-64中的TLB未命中处理成本

时间:2012-02-18 03:25:33

标签: profiler performancecounter tlb mmu

我想估计运行Linux的x86-64(Intel Nehalem)机器上由于TLB未命中而导致的性能开销。我希望通过使用一些性能计数器得到这个估计。有没有人指出估算这个的最佳方法是什么?

由于 ARKA

1 个答案:

答案 0 :(得分:16)

如果您可以访问基于“Westmere”的系统,您的代码的性能特征应该与您在“Nehalem”上的性能特征非常相似,但是您可以访问新的硬件性能计数器事件,该事件几乎可以测量正是你想要的。

在Westmere上,等待处理TLB未命中时丢失性能的最佳估计值可能来自硬件性能计数器事件08H,掩码04H“DTLB_LOAD_MISSES.WALK_CYCLES”,其被描述为“Cycles Page Miss Handler忙”由于第二级TLB中的负载未命中而导致页面遍历“。 “英特尔®64和IA-32架构软件开发人员手册”对此进行了描述 第3B卷:系统编程指南,第2部分“(文件号:253669),可在线获取 http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.html

此事件必要的原因是TLB未命中处理时间由读取包含页表条目的高速缓存行所需的时间决定。如果该高速缓存行在L2高速缓存中,那么TLB未命中的开销将非常小(大约10个周期)。如果该行在L3缓存中,那么可能是25个周期。如果该行在内存中,那么约200个周期。

  • 如果在上级页面翻译高速缓存中也存在未命中,则将多次访问存储器以查找和检索期望的页面表条目(例如,https://stackoverflow.com/a/9674980/1264917)。
  • 在某些处理器上,L2缓存计数器可以告诉您在L2中有多少表走,但在Nehalem上没有。 (在这种情况下它没有多大帮助,因为TLB在L3中的攻击也相当快,而你真正想要的是必须进入内存的TLB步行。)