我读了这个SO question描述什么是TLB击落。我试图了解这是内核执行还是处理器执行的操作,还是两者都执行?

我的问题是:

  • 上下文切换时是否发生TLB击落?我假设不会,因为需要能够在多处理器CPU上同时执行多个进程。这个假设正确吗?
  • 什么时候发生TLB击落?
  • 谁执行实际的TLB击落?是内核(如果是,在哪里可以找到执行刷新的代码?)还是CPU(如果是,则触发操作的原因)还是两者(内核执行导致中断的指令,依次导致CPU执行TLB击落)
  • 最佳答案

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

    关于linux - 谁执行TLB击落?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50256740/

    10-15 00:45