🔍 多级 TLB 结构
为什么需要多级 TLB?
TLB 所有层级均为 per-core 私有,核间不共享(一致性代价太高)。
L1 TLB 太小(全关联低延迟),L2 TLB 更大(set-assoc 容纳更多条目)。
L1 miss → 查 L2 TLB → L2 miss → HWPTW 读取页表项;这些 PTE 会像普通数据一样命中 L1 D/L2/L3,再回填 TLB。
RISC-V — SiFive U740
L1 ITLB
48 项 · 全关联 · 指令
L1 DTLB
48 项 · 全关联 · 数据
L2 TLB
512 项 · 4-way · per-core 私有 · I+D 统一
Andes AN6603: 三级 TLB,128 + 128 + 512 项
ARM — Cortex-A72
L1 ITLB
40 项 · 全关联 · 指令
L1 DTLB
40 项 · 全关联 · 数据
L2 TLB
1024 项 · 4-way · per-core 私有 · unified
Cortex-A15: L2 TLB 256 项 · Cortex-A78: 48+48 L1, 1024 L2
TLB 查找流程
①VA 到达,先查 L1 ITLB / L1 DTLB
②命中 → 直接返回 PA + 属性
③L1 miss → 查 L2 TLB(核内统一)
④命中 → 填充 L1,返回 PA
⑤L2 miss → MMU 硬件页表行走,发起 PTE 内存读取
⑥PTE 可命中 L1 D-Cache / L2 / L3,否则到 DRAM
⑦得到翻译结果 → 填充 L2 → L1 → 返回 PA
⑧RISC-V: sfence.vma / ARM: TLBI 刷对应条目
Page Walker 走哪一级 Cache?
不是固定“只从 L2 开始”。TLB miss 后,硬件页表行走器读取的 PTE 本质上是普通内存数据,通常优先走数据侧缓存路径:L1 D-Cache → L2 → L3/LLC → DRAM。
命中哪一级取决于页表 cache line 是否已驻留;部分高端微架构还会有 page-walk cache / paging-structure cache,图里先按通用可见路径表达。
TLB 与 Cache 的区别
TLB = 虚拟地址→物理地址(VA→PA),条目是页表项(PTE),按页对齐。
Cache = 物理地址→数据(PA→Data),条目是 cache line(64B),按块对齐。
Page Walker 读的是页表项,因此它走的是 数据侧 Cache 层级,而不是 I-Cache。
访问顺序:CPU → TLB → PA → L1 Cache → L2 → L3 → DRAM
📦 多级 Cache 层次结构
为什么需要多级 Cache?
L1 最小最 快(独立 I/D,贴近核)→ L2 中等 → L3/LLC 最大最慢(所有核共享)。
通过 包容性 (Inclusive) 或 排斥性 (Exclusive) 策略管理各层关系。
页表为什么也会命中 Cache?
页表本身存放在普通物理内存中,PTE 也是普通 cache line 的一部分。
所以 TLB miss 不等于直接访问 DRAM;若页表热点常驻,HWPTW 很可能先在 L1 D、L2 或 L3 命中。
| 芯片 | 架构 | L1 I/D | L2 | L3 |
| Cortex-A72 | ARMv8 | 48+32 KB | 512 KB | 1–4 MB共享 |
| Cortex-A78 | ARMv8 | 32+32 KB | 256 KB | 2–4 MB共享 |
| SiFive U740 | RISC-V | 32+32 KB | 2 MB | — |
| Andes AN660 | RISC-V | 32+32 KB | 512 KB | 共享 |
| Intel i7-9700K | x86-64 | 32+32 KB | 256 KB | 12 MB |
Cache 查找流程
①PA 到达,查 L1 D-Cache(PIPT)
②命中 → 数据返回 CPU
③L1 miss → 查 L2 Cache(VIPT)
④命中 → 数据填 L1 返回
⑤L2 miss → 查 L3 / DRAM
⑥数据写回各层 Cache(取决于包容性策略)
VIPT vs PIPT
VIPT(L1 I / L2):VA 的 index+offset 查 Cache,tag 比对时需 PA。
PIPT(L1 D):用 PA 查 Cache,无别名问题。
别名问题:同一物理页映射到不同 VA 时,VIPT 可能查到同一 cache line 的两份拷贝(需软件管理或 MMU 消除)。
🔄 完整内存访问路径
CPU 发起 Load/Store → 数据返回
①CPU 生成 虚拟地址 (VA)
②MMU 查 L1 ITLB / DTLB
③TLB miss → 查 L2 TLB
④L2 miss → HWPTW 读取页表 PTE
⑤PTE 先查 L1 D-Cache,再落到 L2 / L3 / DRAM
⑥得到 物理地址 (PA),并回填 L2/L1 TLB
⑦用 PA 查 L1 D-Cache
⑧L1 miss → 查 L2 Cache
⑨L2 miss → 查 L3 / DRAM
⑩数据返回,填充各层 Cache,维护 TLB + Cache 一致性
RISC-V vs ARM 关键差异
RISC-V
satp.MODE 决定是否使能地址翻译,sfence.vma 显式刷 TLB,ASID 隔离不同地址空间。
ARM
TTBR0/1 双页表基址寄存器,TCR 控制地址宽度,TLBI VMALLIS 刷全部 TLB,Stage-1/Stage-2 两级翻译(虚拟化)。