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