1. TLB shootdown 在多核页表修改时跨核 invalidate 的 IPI 风暴工程价值?
在多核 CPU 上修改页表时,TLB shootdown 需要跨核 invalidate(失效)各核的 TLB,为什么会引发 IPI 风暴,其工程价值是什么?
- TLB 的 per-CPU 缓存属性
- 页表修改后需跨核失效 TLB
- IPI 风暴与批处理
TLB 是每个 CPU 核私有的页表缓存,当某核修改页表(如 munmap、mprotect、unmap、页迁移)后,其他核可能仍缓存着旧的映射,必须通过 IPI(Inter-Processor Interrupt)通知这些核失效对应 TLB 条目,否则会出现"内存已释放但 TLB 仍指向旧页"的悬挂问题。在频繁的页表操作(如大量 munmap、swap、进程切换)下,每次都要向所有可能缓存该映射的核发 IPI,就会形成 IPI 风暴,造成跨核中断开销、cache line 争用与调度延迟。工程上通过 batch 化(把多个 TLB 失效合并成一次 flush)、flush 的 lazy/deferred 优化、以及按地址空间/范围(shootdown 到确实映射该区域的核)来减少 IPI 数量。其价值在于:TLB shootdown 是保证多核虚拟内存一致性的基石,而控制 IPI 风暴是保证多核可扩展性的关键。
TLB 一致性本质上是一个"多核缓存一致性"问题,shootdown 是维持一致性的协议,IPI 风暴是该协议的开销,工程的核心是"少发 IPI、合并失效、按需失效"。