我试图通过使用硬件性能计数器生成D-TLB未命中的地址跟踪。英特尔处理器具有“精确的基于事件的采样”(PEBS),每次采样时都可以转储硬件寄存器内容。我需要使用此寄存器转储来创建导致D-TLB未命中的地址。但是,我不确定如何从寄存器转储生成访问地址。
有人在做类似的事情方面有经验吗?可以给我一些指示吗?
由于
阿尔卡
答案 0 :(得分:0)
是的,您可以使用perf mem
子命令在现代英特尔硬件上使用更新版本的perf
执行此操作。
有关详细信息,请参阅this answer。
答案 1 :(得分:-1)
性能计数器基本上是计数器,您需要他们不提供的额外信息。 你需要的是一个能够捕获公交交易的跟踪器,这可能有点难以实现,但仍然不会是完美的,因为你只能捕获错过STLB(二级TLB)的错误,加上 - 他们的页面步行阶段没有达到缓存,因此您可以有足够的可见性来重建虚拟地址。 在我看来,你最好的选择是简单地通过二进制检测工具(例如PIN或szim)运行代码,编写一个钩子来捕获所有内存访问 - 并通过模拟DTLB的回调运行它们(你可以使用几个uarch模拟器或为自己编写一些简单的代码)。您只需要获取系统的基本DTLB详细信息(大小,关联性等)。这应该让您对DTLB错过的地址在真实系统上的内容有一个相对清晰的认识。当然,如果您使用混合大小的页面或虚拟化(上帝禁止......),可能会出现并发症。