Page 62 - 《软件学报》2025年第9期
P. 62

李传东 等: RISC-V  架构下的懒惰影子页表模型                                                     3973


                 的优化方法探究是非常少的. 而随着           RISC-V  架构在全球范围内的广泛应用和快速发展              [12] , 如何在该架构下实现
                 高效的虚拟机内存虚拟化已成为当前的一个重要研究方向. 当前                     RISC-V  架构下的内存虚拟化实现仍然沿用传统
                 架构方案, 研究者只进行了一些功能性的探究. 因此利用                 RISC-V  的硬件特性实现高效的内存虚拟化是一个值得
                 探究的方向.
                    在内存虚拟化的相关优化工作中, 当前最前沿的解决方案通常考虑以修改硬件或者利用架构特性来结合嵌套
                 页表模型和影子页表模型. Wang         等人  [9] 指出影子页表模型和嵌套页表模型都无法达到最优, 其根据实时监控的
                 TLB  缺失和页表错误数量动态切换硬件和软件页表模型以达到最佳性能, 然而切换页表模式总是需要重建整个影
                 子页表, 这对于    GB  甚至  TB  级别的负载会造成严重的性能开销. Gandhi 等人          [11] 观察到虚拟机对于进程页表的修
                 改总是倾斜分布在末级页表页, 并且对于页表页的修改满足双峰分布, 即页表页要么非常频繁地被虚拟机操作系
                 统修改, 要么在相当一段时间内保持稳定. 因此他们提出灵活页表模型                      (agile paging), 对于频繁修改的页表页将局
                 部地切换为嵌套页表模式, 而保持稳定的页表页仍然使用影子页表模式. 但是这种局部嵌套页表的方法需要硬件
                 修改, 难以应用在实际云服务环境中. Sha           等人  [13,14] 在国产申威架构下提出了敏捷影子页表模型            (swift shadow
                 paging), 其利用了申威架构软件管理       TLB  的特性, 在硬件模式维护       TLB  表项的同时维护影子页表. 这种方法适用
                 于支持软件管理      TLB  的架构, 而   RISC-V  架构仍然沿用硬件管理        TLB. Hill 等人  [8] 提出直接映射模式   (direct
                 mode), 使用段式直接映射的方式维护以加速虚拟机地址翻译过程, 即从虚拟机物理地址到宿主机物理地址的映射
                 由一个段基址加偏移完成, 避免了对嵌套页表的访问. 但是这种方法要求                       hypervisor 分配给虚拟机的物理内存是
                 连续的, 这会导致虚拟机内存容量无法动态调节, 也与一些虚拟机管理技术不兼容, 比如虚拟机页面共享, 虚拟机
                 热迁移等, 实用性较低. Ahn      等人  [15] 提出了推测式扁平嵌套/影子页表模型          (speculative flat nested/shadow paging)
                 将嵌套页表和影子页表的扁平化设计, 即页表只保留一级, 地址翻译首先通过一次扁平影子页表的访问进行推测
                 执行, 再由扁平嵌套页表进行验证. 这种方法将极大地增大页表的存储开销, 在大工作集场景并不适用. Sha 等人                             [16]
                 也在国产申威架构上完成了扁平嵌套页表的实现. Park                等人  [17] 将嵌套页表的表项以缓存行粒度进行放置, 提高了
                 页表遍历的缓存命中. 这些方案大多在传统架构下实现, 很少有对于                     RISC-V  架构下内存虚拟化的优化探究. 表         1
                 展示了当前内存虚拟化学界前沿的页表模型在不同维度的权衡, 目前还没有针对                           RISC-V  架构的内存虚拟化页表
                 模型探究, 并且当前已有的解决方案要么需要激进的硬件修改, 要么也是针对其他架构的定制设计. 当前                                RISC-V
                 下的  hypervisor 实现仍然沿用传统的通用影子页表或者嵌套页表模型.

                                             表 1 内存虚拟化中页表模型的不同权衡

                         页表模型             硬件修改        架构特性       地址翻译效率        页表同步开销        页表存储开销
                         灵活页表  [11]          是          无            较高           较低            较低
                         敏捷页表  [13]          否        申威架构           高             低             低
                       直接映射模式    [8]         是          无            极高            无             无
                   推测式扁平嵌套/影子页表      [15]    是          无            极高           较低            较低
                        懒惰影子页表               否       RISC-V架构        高             低             低

                    在  RISC-V  架构下的虚拟化技术研究中, 当前解决方案通常聚焦在虚拟化技术整体的功能完备性和安全隔离
                 性等方面, 内存虚拟化方法仍然沿用传统架构的影子页表模型或者嵌套页表模型. Behrens 等人                          [18] 在无虚拟化扩
                 展的  RISC-V  架构下实现了   RVirt, 其通过陷入-模拟的方式在       U-mode 运行虚拟机, 采用传统影子页表模型实现了
                 内存虚拟化. Martins 等人   [19] 针对嵌入式系统, 实现了一套满足实时性, 安全性和可靠性的                bao-hypervisor, 其中对
                 于中断虚拟化进行了定制优化, 达到较高的性能, 但是其内存虚拟化仍然使用传统模型. Patel 等人                          [20] 实现了支持
                 全虚拟化和半虚拟化的        Xvisor, 已支持在  RISC-V  架构下以较为轻量级的方式在嵌入式场景运行虚拟机, 但是仍
                 然使用传统影子页表模型和嵌套页表模型进行内存虚拟化.

                 2   基础知识

                    本文工作主要是关于        RISC-V  架构下的内存虚拟化实现, 下面就相关概念和基本知识予以介绍.
   57   58   59   60   61   62   63   64   65   66   67