Page 70 - 《软件学报》2025年第9期
P. 70
李传东 等: RISC-V 架构下的懒惰影子页表模型 3981
20
VM-exit 数量 (千次) 18
19
17
16
15
传统影子页表
懒惰影子页表
14
1 2 4 8 16
时间窗口
图 6 不同时间周期下的全局页表读写产生的 VM-exit 对比
如图 7 所示, 使用懒惰影子页表模型相较于嵌套页表会导致 14%–32% 的 TLB 缺失, 这是由更多的上下文切
换导致的. 然而, 在嵌套页表模型下, 每次 TLB 缺失将导致额外的 15 次访存, 而懒惰影子页表模型只会产生额外
3 次访存. 因此, 虽然懒惰影子页表模型导致的 TLB 缺失的数量增多了, 但是实际导致的惩罚远远小于嵌套页表模
型. 使用懒惰影子页表模型和传统影子页表模型会导致更多的 VM-exit, 而在嵌套页表模型下几乎不存在访存相
关的 VM-exit. 这是因为虚拟机只会在构造嵌套页表的时候才会产生 VM-exit, 而每个虚拟机只维护一个嵌套页表,
当虚拟机预热后几乎不会再产生相关 VM-exit. 而虚拟机将为每个进程维护不同的影子页表, 进程每次运行都需
要重新建立影子页表, 并且虚拟机对影子页表的访问都会被拦截. 因此懒惰影子页表造成的 VM-exit 会高于嵌套
页表. 与传统影子页表相比, 懒惰影子页表能够降低最多 25% 的 VM-exit. 这得益于懒惰影子页表提供的页表同步
绑定和推迟机制.
1.4 1.0
1.2
0.8
1.0
TLB 缺失数量 (%) 0.8 VM-exit 数量 (%) 0.6
0.6
0.4 0.4
0.2
0.2
0 0
403.gcc 429.mcf 433.milc 473.astar 403.gcc 429.mcf 433.milc 473.astar
嵌套页表 传统影子页表 懒惰影子页表
图 7 不同页表模型在访存密集型程序下的 TLB 缺失和虚拟机退出数量
5 讨 论
5.1 懒惰影子页表安全性分析
懒惰影子页表通过分析页表同步行为推迟了进程页表向影子页表的同步时刻, 并且利用 RISC-V 架构下的最
高特权级加速页表同步的上下文切换开销. 这两个核心设计并没有引入额外的安全问题.
对于推迟同步机制, 恶意用户可能在虚拟机中运行恶意操作系统, 通过修改进程页表后不主动刷新 TLB 而继
续通过过时的影子页表项访问未被映射的内存. 但是这里仅发生了虚拟机内用户态越权访问虚拟机内核态内存,

