TLB shootdown是什么?

90

SMP中的TLB shootdown是什么?

我无法找到关于这个概念的太多信息。任何好的例子都将不胜感激。


1
这是一个编程问题吗? - Gabe
@Gabe,如果@mousey试图实现内核,则我猜这是一个编程问题。他能够提供更多的澄清将会非常感激。 - Carl Norum
4
是的,我正在尝试实现一个内核。 - mousey
56
堆栈溢出(Stackoverflow)试图将编程与系统概念分隔开来的不断死板的尝试是其一个基本缺陷。这个网站的名称本身就是一个系统概念。如果你是一位系统程序员,你不能将这些概念与控制它们的代码分离开来。我们应该停止尝试这样做。 - GL2014
不一定要实现内核,他/她也可以编写模拟器/虚拟机。 - GL2014
3个回答

125
一个TLB(翻译后为“翻译后备缓存”)是虚拟内存地址到物理内存地址的转换的一个缓存。当处理器更改地址的虚拟与物理映射时,它需要通知其他处理器将该映射从其缓存中使无效。这个过程被称为“TLB shootdown”。

81
一个快速的例子:
  1. 您的系统中所有处理器共享一些内存。

  2. 其中一个处理器限制对该共享内存页面的访问。

  3. 现在,所有处理器都必须刷新它们的TLB,以便被允许访问该页面的处理器不能再访问。

一个处理器的操作导致其他处理器的TLBs被刷新,这就是所谓的TLB shootdown。

20

我认为这个问题需要更详细的回答。

页面表:存储虚拟内存(软件)与物理内存(硬件)映射关系的数据结构。

然而,页面表可能非常大,并且遍历页面表(以查找虚拟地址对应的物理地址)可能是一个耗时的过程。为了加快这个过程,使用了一个名为 TLB(翻译后备缓存)的高速缓存,它存储最近访问的虚拟内存地址。

可以清楚地看到,TLB条目必须始终与其相应的页面表条目同步。现在TLB是每个核心的缓存,也就是每个核心都有自己的TLB。

每当任何一个核心修改了一个页面表项,所有核心中的该特定 TLB 条目都将无效。这个过程称为 TLB shootdown。

TLB 刷新可以通过各种虚拟内存操作来触发,这些操作会改变页面表项,如页面迁移、释放页面等。


4
在所有的核心上通过操作系统使特定的TLB条目失效。硬件不会自动执行此操作;如果其他核心当前正在运行使用刚刚修改的页表的任务,则内核必须发送跨处理器中断或以其他方式向其他核心的内核发出信号。但至少在x86架构中,不会进行负缓存,因此映射新内存(将无效的PTE更改为有效)不需要运行任何invlpg指令。重新映射或取消映射需要失效才能防止核心使用不再有效的TLB条目。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接