结论:TLB(Translation Lookaside Buffer)是 CPU 内缓存"虚拟页号 → 物理页框号"映射的高速缓存。没有 TLB,每次内存访问都要先多级查页表(4 级页表意味着 4 次额外内存读);TLB 命中时一次比较即得物理地址,把地址翻译开销降到接近零。
展开:工作流程:CPU 发出虚拟地址,先并行查 TLB——命中直接拼出物理地址;未命中走硬件页表遍历(page walk),结果填入 TLB。典型 TLB 命中率 99%+,因为程序有良好的空间局部性(一页 4KB 内的访问共享一次翻译)。关键工程问题:1)上下文切换后 TLB 里的映射属于旧进程,需要刷新——PCID/ASID 技术给 TLB 项打进程标签避免全刷;2)大页(2MB/1GB)让单个 TLB 项覆盖更大范围,数据库、JVM 等大内存负载开启大页后 TLB miss 显著下降;3)多级 TLB(L1 指令/数据分离 + L2 统一)平衡速度与容量。易错点:TLB 是硬件结构,操作系统只在页表变更时负责刷相应项(invlpg);mmap/munmap 后内核必须做 TLB shootdown(跨核发送 IPI 使其他核失效对应项),这是高并发 mmap 场景的著名性能瓶颈。
追问方向:page walk 的硬件流程、透明大页的 khugepaged 合并机制。