【问题标题】:Measuring TLB miss handling cost in x86-64测量 x86-64 中的 TLB 未命中处理成本
【发布时间】:2012-03-09 10:36:51
【问题描述】:

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

谢谢 阿尔卡

【问题讨论】:

标签: profiler performancecounter tlb mmu


【解决方案1】:

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

在 Westmere 上,等待处理 TLB 未命中时性能损失的最佳估计可能来自硬件性能计数器事件 08H,掩码 04H “DTLB_LOAD_MISSES.WALK_CYCLES”,它被描述为计数“循环页面未命中处理程序忙由于二级 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 上却不能。 (在这种情况下,这不会有太大帮助,因为在 L3 中命中的 TLB 遍历也相当快,而您真正想要的是必须进入内存的 TLB 遍历。)

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 2012-02-17
    • 2011-12-21
    • 2011-03-16
    • 2013-02-04
    • 2015-12-11
    • 2017-05-30
    • 2011-09-04
    • 2012-05-13
    相关资源
    最近更新 更多