我目前的工作需要在英特尔酷睿系列的CPU上产生指定数量的TLB未命中,但它并不顺利。我尝试过很多方法,但是所有方法都有很高的TLB命中率。有没有人知道有关x86 TLB如何工作的一些有用信息,或某些在用户进程中产生大量TLB未命中的方法?
答案 0 :(得分:2)
TLB是CPU用来记住与虚拟地址关联的物理地址的缓存。虚拟地址空间被分成页面,每个页面通常为4KB。 TLB为每个可能的虚拟页面都有一个空间,其中包含与之关联的物理页面的地址。当您尝试访问尚未加载物理地址的页面时,会发生TLB未命中。因此,为了最大限度地减少遗漏,您需要最大化访问的不同页面的数量。
不幸的是,事情并非那么简单。简单的TLB未命中将从页表层次结构中读取条目以找到适当的物理地址。但是,只有当您访问具有物理地址的页面时,才会出现这种情况。操作系统将确定哪些虚拟地址具有哪些物理地址,如果您尝试从其他虚拟地址读取,则会导致页面错误。页面错误处理程序将终止您的程序以非法访问该页面或移动数据以将物理页面放入该虚拟地址。
导致尽可能多的TLB未命中的最佳方法是:
随着可用RAM变低,未命中数将增加,因为操作系统必须移动更多物理页面以满足您的程序需求,因此同时运行其他需要内存的进程是件好事。