我想估计在运行 Linux 的 x86-64 (Intel Nehalem) 机器上由于 TLB 未命中而导致的性能开销。我希望通过使用一些性能计数器来获得这个估计值。有人对估计这个的最佳方法有一些指示吗?
谢谢阿卡
我想估计在运行 Linux 的 x86-64 (Intel Nehalem) 机器上由于 TLB 未命中而导致的性能开销。我希望通过使用一些性能计数器来获得这个估计值。有人对估计这个的最佳方法有一些指示吗?
谢谢阿卡
如果您可以访问基于“Westmere”的系统,那么您的代码的性能特征应该与您在“Nehalem”上的性能特征非常相似,但是您将可以访问一个新的硬件性能计数器事件,该事件几乎可以准确地测量您的想。
在 Westmere 上,等待处理 TLB 未命中时性能损失的最佳估计可能来自硬件性能计数器事件 08H,掩码 04H“DTLB_LOAD_MISSES.WALK_CYCLES”,它被描述为计数“Cycles Page Miss Handler is busy with a page由于第二级 TLB 中的负载缺失而行走”。这在“英特尔® 64 和 IA-32 架构软件开发人员手册第 3B 卷:系统编程指南,第 2 部分”(文档编号:253669)中进行了描述,可从 http://www.intel.com/content/www/在线获取我们/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.html
此事件之所以必要,是因为 TLB 未命中处理时间主要取决于读取包含页表条目的高速缓存行所需的时间。如果该高速缓存行在 L2 高速缓存中,则 TLB 未命中的开销将非常小(大约 10 个周期)。如果该行在 L3 缓存中,则可能是 25 个周期。如果该行在内存中,则大约 200 个周期。