SMP中的TLB shootdown是什么?
我无法找到关于这个概念的太多信息。任何好的例子都将不胜感激。
SMP中的TLB shootdown是什么?
我无法找到关于这个概念的太多信息。任何好的例子都将不胜感激。
您的系统中所有处理器共享一些内存。
其中一个处理器限制对该共享内存页面的访问。
现在,所有处理器都必须刷新它们的TLB,以便被允许访问该页面的处理器不能再访问。
我认为这个问题需要更详细的回答。
页面表:存储虚拟内存(软件)与物理内存(硬件)映射关系的数据结构。
然而,页面表可能非常大,并且遍历页面表(以查找虚拟地址对应的物理地址)可能是一个耗时的过程。为了加快这个过程,使用了一个名为 TLB(翻译后备缓存)的高速缓存,它存储最近访问的虚拟内存地址。
可以清楚地看到,TLB条目必须始终与其相应的页面表条目同步。现在TLB是每个核心的缓存,也就是每个核心都有自己的TLB。
每当任何一个核心修改了一个页面表项,所有核心中的该特定 TLB 条目都将无效。这个过程称为 TLB shootdown。
TLB 刷新可以通过各种虚拟内存操作来触发,这些操作会改变页面表项,如页面迁移、释放页面等。
invlpg
指令。重新映射或取消映射需要失效才能防止核心使用不再有效的TLB条目。 - Peter Cordes