有人可以指导我使用一个命令来测量 LINUX 上的 TLB 未命中吗?是否可以将次要页面错误视为(或近似)TLB 未命中?
答案1
您可以使用性能访问硬件性能计数器:
$ perf stat -e dTLB-load-misses,iTLB-load-misses /path/to/command
例如:
$ perf stat -e dTLB-load-misses,iTLB-load-misses /bin/ls > /dev/null
Performance counter stats for '/bin/ls':
5,775 dTLB-load-misses
1,059 iTLB-load-misses
0.001897682 seconds time elapsed
答案2
小故障和 TLB 未命中并不是很好的类比。当请求的页面位于内存中但未映射到当前页表中时,就会发生小错误。当然,小故障会与 TLB 未命中相关联(因为 TLB 条目是页表条目的快捷方式),但 TLB 未命中将由许多其他原因引起,例如硬故障或程序局部性的转换。
答案3
当页面已加载到内存中但尚未创建关联的页表条目时,会发生次要页面错误。副作用是,较小的页面错误总是会导致 TLB 未命中。另一方面,当页面的转换条目未驻留在 TLB(即高速缓存)中时,就会发生 TLB 未命中,当该 TLB 条目先前由于 TLB 容量有限而被逐出时,可能会发生这种情况。