gpt4 book ai didi

architecture - 如何导致用户进程的 TLB 抖动?

转载 作者:行者123 更新时间:2023-12-04 04:00:18 30 4
gpt4 key购买 nike

我目前的工作需要在 Intel Core 系列的 CPU 上生成指定数量的 TLB 未命中,但进展并不顺利。我尝试了很多方法,但所有方法的 TLB 命中率都非常高。有谁知道一些关于 x86 TLB 如何工作的有用信息,或者一些在用户进程中生成大量 TLB 未命中的方法?

最佳答案

TLB 是 CPU 用来记住与虚拟地址相关联的物理地址的缓存。虚拟地址空间被分成页,通常每页 4KB。 TLB 为每个可能的虚拟页面都有一个空间,其中包含与之关联的物理页面的地址。当您尝试访问物理地址尚未加载的页面时,会发生 TLB 未命中。因此,为了最大化未命中,您需要最大化访问的不同页面的数量。

不幸的是,事情并没有那么简单。一个简单的 TLB 未命中会从页表层次结构中读取条目以找到正确的物理地址。但这只有在您访问具有物理地址的页面时才会发生。操作系统将确定哪些虚拟地址具有哪些物理地址,如果您尝试从任何其他地址读取,则会导致页面错误。页错误处理程序将终止非法访问该页的程序或移动数据以将物理页放入该虚拟地址。

导致尽可能多的 TLB 未命中的最佳方法是:

  • 分配操作系统允许的尽可能多的内存。您应该交替分配大块和小块,在分配另一个大块后释放小块。这有望最大化碎片化,将您的内存分散到尽可能多的页面上。
  • 创建一个列表,其中包含您分配的内存中使用的每个不同页面的一个地址。您还可以添加您知道可读的其他页面,例如包含您的代码的页面。
  • 循环遍历这个列表,从每一页读取数据。由于操作系统需要释放物理页面以放入您的虚拟页面,因此它将(希望)使用先前与循环中其他页面关联的物理页面,从而导致最大数量的 TLB 未命中。

  • 随着可用 RAM 变低,未命中的数量会增加,因为操作系统将不得不移动更多的物理页面以满足您的程序的需求,因此同时运行其他内存占用的进程是很好的。

    关于architecture - 如何导致用户进程的 TLB 抖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5576402/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com