什么是TLB击落?


74

什么是SMP中的TLB击落?

我找不到有关此概念的大量信息。任何很好的例子将不胜感激。


1
这是编程问题吗?
加布

@Gabe,如果@mousey正在尝试实现内核,我想这是一个编程问题。他的一些澄清将不胜感激。
卡尔·诺鲁姆

3
是的,我正在尝试实现内核。
mousey 2010年

30
不断的教条主义尝试将编程与系统概念区分开来,这是Stackoverflow的根本缺陷。该站点的名称恰恰是一个系统概念。如果您是系统程序员,则无法将这些概念与控制它们的代码分开。我们应该停止这样做。
GL2014年

Answers:


70

一个简单的例子:

  1. 您的系统中的所有处理器共享一些内存。

  2. 您的处理器之一限制了对该共享内存页面的访问。

  3. 现在,所有处理器都必须刷新其TLB,以使被允许访问该页面的处理器不再能这样做。

一个处理器导致TLB在其他处理器上被刷新的动作称为TLB击倒。


104

TLB(转换后备缓冲区)是从虚拟内存地址到物理内存地址的转换的缓存。当处理器更改地址的虚拟到物理映射时,它需要告诉其他处理器在其缓存中使该映射无效。

该过程称为“ TLB击落”。


11

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

页表:一种存储虚拟内存(软件)和物理内存(硬件)之间的映射的数据结构

但是,页表可能很大,遍历页表(以查找虚拟地址的对应物理地址)可能是一个耗时的过程。为了使此过程更快,使用了称为TLB(转换后备缓冲区)的缓存,该缓存存储了最近访问的虚拟内存地址。

可以清楚地看到,TLB条目始终需要与其各自的页表条目保持同步。现在,TLB是每个内核的缓存,即。每个核心都有自己的TLB。

只要任何一个内核修改了页表条目,该特定的TLB条目就会在所有内核中失效。此过程称为TLB击落。

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


3
特定的TLB条目在所有内核中都被OS无效。硬件不会自动执行此操作;如果其他内核当前正在运行使用刚修改的页表的任务,则内核必须发送处理器间中断或以其他方式向内核发出信号。但是x86至少不会做负缓存,因此映射新内存(将PTE从无效更改为有效)不需要运行任何invlpg指令。重新映射或取消映射确实需要无效,以阻止核心使用不再有效的TLB条目。
彼得·科德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.