Page 61 - 《软件学报》2025年第9期
P. 61
3972 软件学报 2025 年第 36 卷第 9 期
步操作 [6] . 具体而言, hypervisor 需要感知虚拟机对进程页表的修改, 这通常采用写保护机制完成 (write protection),
即在影子页表中将任意进程页表页的权限修改为不可写. 那么虚拟机中任何对于进程页表的修改都会产生虚拟机
退出 (VM-exit), 从而造成严重的性能开销. 有研究表明, 在页表更新频繁的场景下, 嵌套页表模型的性能能够高于
[9]
影子页表模型近 15%, 而在 TLB 缺失频繁的场景下, 影子页表模型又能够比嵌套页表模型性能提升近 32% .
进程页表 (GVA GPA)
写 写
写 保 保
保 护 护
护
VM-exit 虚拟机
宿主机
进程页表 (GVA GPA) 物理地址翻译表 (GPA HPA)
vsatp
寄存器
虚拟机
宿主机
嵌套页表 (GPA HPA) 影子页表 (GVA HPA)
HPA
HPA
hgatp satp
寄存器 寄存器
(a) 嵌套页表模型 (b) 影子页表模型
页表遍历路径 页表修改路径
图 1 影子页表模型和嵌套页表模型架构图
对于 RISC-V 架构下的内存虚拟化研究, 该问题的主要难点有: 1) 高地址翻译效率和高页表同步效率: 当前通
用方案无法在地址翻译开销和页表同步开销间达到最佳的权衡, 内存虚拟化技术仍然存在性能瓶颈. 2) 用户无感:
云服务提供商不应该对上层客户机操作系统做出任何假设和修改. 3) RISC-V 架构定制: RISC-V 架构与传统架构
(如 x86) 的特权模型和硬件支持各不相同, 应该充分利用 RISC-V 架构特征. 4) 支持主流 RISC-V 架构而无需硬件
修改.
针对上述问题, 本文提出了一种基于 RISC-V 架构的懒惰影子页表模型 LSP (lazy shadow paging), 在保留影子
页表的地址翻译高效性的同时降低了页表同步开销. 该工作首先对虚拟机操作系统中的页表修改行为进行总结和
分析, 发现进程页表的修改操作可以分为两个子集, 其中一个子集中的进程页表修改操作总是与 TLB 刷新对应,
而另一个子集中的操作总是会与一个页面错误 (page fault) 对应, 因此懒惰影子页表模型通过增强页面错误处理程
序功能和 TLB 刷新时进行页表同步来降低 VM-exit 的数量. 然后, 利用 RISC-V 架构中对 TLB 的细粒度刷新且可
拦截的特性, 将被刷新页表项对应的影子页表项进行无效化的方式, 将页表同步操作的开销推迟到页面的访问时
刻. 这种延迟同步的设计能够将对于同一个页表项的修改进行批量同步, 降低了虚拟机退出的软件开销. 最后, 利
用 RISC-V 架构中全新的特权级模型, 将影子页表项无效化的操作卸载到最高特权级, 降低了上下文切换的开销.
多组对比实验验证了本文所提方法在地址翻译效率和页表同步效率上的有效性.
本文第 1 节介绍 RISC-V 下虚拟化技术的相关方法和研究现状. 第 2 节介绍本文所需的基础知识, 包括内存
虚拟化技术和 RISC-V 架构特性. 第 3 节介绍本文构建的基于 RISC-V 架构的懒惰影子页表技术. 第 4 节通过对比
实验验证了所提技术的有效性. 最后总结全文.
1 RISC-V 下的内存虚拟化相关工作
现有的内存虚拟化方法大多都基于传统体系结构进行探究. 然而, 对于 RISC-V 架构而言, 针对于内存虚拟化

