我目前能够使用wrmsr
读取最后一级缓存未命中的硬件计数器和来自用户空间的引用以选择它们,然后rdpmc
来读取它们。
然而,虽然一些未命中是非常明显的引用,我不会达到缓存,但其他更微妙,有时在相同的代码路径被执行多次(命令100,000次)时移动。
我怀疑其中一些未命中是由于硬件预取,所以我通过BIOS禁用了硬件预取器,但我仍然遇到滑动缓存未命中的原因很难确定。
在Linux内核或英特尔的寄存器中是否有某些功能可以确定导致最新的最后一级缓存未命中的指令的地址?
如果它有用,我正在2.6.32-279.el6.x86_64
上运行Intel Xeon X3470
。