我读了这个SO question描述什么是TLB击落。我试图了解这是内核执行还是处理器执行的操作,还是两者都执行?
我的问题是:
最佳答案
x86 TLB在内核之间不共享,并且在硬件级别上彼此之间不同步。
是操作系统指示处理器刷新其TLB。
指示“当前”处理器相当于调用一个函数,指示另一个处理器相当于制作IPI。
术语“TLB击倒”明确地指的是这种(甚至比正常情况还要昂贵的)昂贵情况,在这种情况下,为了保持系统一致性,OS必须告诉其他处理器使其TLB无效以达到特定处理器的相同映射。
我认为这仅在新映射影响某些共享内存的情况下才有必要,否则每个处理器将执行一个进程的不同实例,每个实例均具有其映射。
在上下文切换期间,将刷新TLB以删除旧的映射,这必须独立于计划的程序所运行的最后一个处理器来完成。
由于处理器正在刷新自己的TLB,因此这不是TLB击落。
在处理器之间必须始终保持一致的共享区域可以是:内核页面,内存映射的IO,共享内存映射的文件。
指令invlpg
,invpcid
,移至cr0
,cr3
(包括在硬件任务切换期间)或cr4
的执行以及VMX转换都使TLB无效。
有关确切的粒度和语义,请参见Intel Manual 3的4.10.4节。
关于linux - 谁执行TLB击落?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50256740/