我想估计运行 Linux 的 x86-64 (Intel Nehalem) 计算机上由于 TLB 未命中而导致的性能开销。我希望通过使用一些性能计数器来获得这个估计。有人知道估计这个的最佳方法是什么吗?
谢谢
阿尔卡
如果您可以访问基于“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 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 https://stackoverflow.com/a/9674980/1264917).
- 在某些处理器上,L2 缓存计数器可以告诉您 L2 中命中和错过的表遍历数量,但 Nehalem 上则不然。 (在这种情况下,这不会有太大帮助,因为在 L3 中命中的 TLB 遍历也相当快,而您真正想要的是必须进入内存的 TLB 遍历。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)