itlb_misses.miss_causes_a_walk、itlb_misses.walk_completed 和 itlb_misses.walk_pending 之间有什么区别

itlb_misses.miss_causes_a_walk、itlb_misses.walk_completed 和 itlb_misses.walk_pending 之间有什么区别

我跑了

  perf stat -e itlb_misses.miss_causes_a_walk,itlb_misses.walk_completed,itlb_misses.walk_pending  grep Hecuba  /storage/nvme6/complete_shakespeare_4096_times

并得到了

 Performance counter stats for 'grep Hecuba /storage/nvme6/complete_shakespeare_4096_times':

            27,732      itlb_misses.miss_causes_a_walk                                   
            13,492      itlb_misses.walk_completed                                   
         1,048,087      itlb_misses.walk_pending                                    

       0.252038252 seconds time elapsed

显然这三个都是不同的。我运行 perf 的实际工作负载并不重要,因为无论我运行什么工作负载,计数器的相对值都是相似的。

我知道为什么失误会导致步行,但上述似乎暗示并非所有步行都完成。为什么是这样?

另外,为什么待处理的步行比引起的步行大得多?

最后,如果我想了解 itlb 未命中率,我应该使用上述哪个计数器?

答案1

计数器是描述如下

0x01:(name=miss_causes_a_walk) 在导致页遍历的所有 ITLB 级别上未命中
0x10:(name=walk_pending) 对于忙于指令获取请求的页遍历的每个 PMH,每个周期计数 1。
0x0e:(name=walk_completed)所有 TLB 级别中的代码缺失会导致页面遍历完成。 (所有页面尺寸)

如果页表中实际上没有描述所需的页面,则页面遍历可能无法完成;到达“不存在”页面的页面遍历被视为失败的页面遍历(如果不是推测,则会导致页面错误)。

待处理步行计数器并不反映待处理步行的瞬时数量;它计算浏览页面所花费的周期数。

要计算 iTLB 丢失率,您通常会使用第一个计数器(相对于 iTLB 查询总数)。

也可以看看有关多级分页中页表遍历的详细信息

相关内容