ura*_*raj 6 architecture x86-64 tlb
我目前的工作需要在Intel Core系列的CPU上生成指定数量的TLB未命中,尽管进展不顺利。我尝试了很多方法,但是所有方法都具有很高的TLB命中率。有谁知道关于x86 TLB如何工作的有用信息,或在用户进程中生成大量TLB未命中的某些方法?
TLB 是 CPU 用来记住与虚拟地址关联的物理地址的高速缓存。虚拟地址空间被分成页,通常每页 4KB。TLB 为每个可能的虚拟页都有一个空间,其中包含与其关联的物理页的地址。当您尝试访问物理地址尚未加载的页面时,就会发生 TLB 未命中。因此,为了最大限度地提高未命中率,您需要最大限度地提高访问的不同页面的数量。
不幸的是,事情并没有那么简单。简单的 TLB 未命中将从页表层次结构中读取条目以找到正确的物理地址。但只有当您访问具有物理地址的页面时才会发生这种情况。操作系统将确定哪些虚拟地址具有哪些物理地址,如果您尝试从任何其他地址读取数据,则会导致页面错误。页面错误处理程序将终止非法访问该页面的程序,或者移动数据以将物理页面放入该虚拟地址中。
导致尽可能多的 TLB 未命中的最佳方法是:
当可用 RAM 变低时,未命中次数将会增加,因为操作系统必须移动更多物理页来满足程序的需求,因此最好同时运行其他占用内存的进程。