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

韩金池 等: Spike-FlexiCAS: 支持缓存架构灵活配置的 RISC-V 处理器模拟器                                3955


                 demonstrate that FlexiCAS significantly outperforms the cache model of ZSim, the fastest execution-driven simulator available.
                 Key words:  cache architecture; cache side channel; RISC-V; simulator

                    使用硬件语言      (如  Verilog、VHDL  等) 开发处理器  [1] 往往需要投入大量的时间和人力资源, 因此在前期的设
                 计探索阶段通常不会使用硬件语言完整的实现想要测试的处理器结构. 使用软件语言实现的处理器模拟器则不仅
                 能实现和评估该领域中的新想法, 还能帮助开发者深入理解程序的行为以及有效地识别出微体系架构中的瓶颈.
                         [2]
                 例如, gem5 等常用的模拟器提供了对微架构级别的详细建模, 支持多种指令集和体系结构的仿真, 成为研究人员
                 进行微架构设计与优化的重要工具. 随着             RISC-V  开源指令集架构的兴起, 专门针对         RISC-V  的模拟器也变得至关
                          [3]
                 重要. Spike 是  RISC-V  的指令集模拟器    (instruction set simulator, ISS), 它是  RISC-V  指令集的标准实现  (golden
                 model). 所有有关  RISC-V  指令集的更新与扩展都会首先在          Spike 上实现、验证以及评估, 除了使用          GDB  调试器
                 直接调试   Spike 本身, 还可以配合使用      OpenOCD  调试运行在    Spike 之上的  RISC-V  执行程序. 因此  Spike 是目前
                 支持  RISC-V  指令集最完整的运行环境.
                    缓存作为处理器核和内存间的桥梁, 它的设计对整个计算机系统的性能有重大影响. 缓存的参数众多, 在设计
                 时除了要考虑缓存的大小, 还要考虑缓存的替换策略、缓存一致性协议以及多级缓存间的包含关系等多方面内
                 容. 设计人员需要在对大量的缓存参数组合测试后才能最终确定缓存的结构                          [4,5] . 与处理器开发类似, 结构简单、
                 快速高效的缓存模拟器可以使开发者在庞大的缓存探索空间中寻找适合设计目标的缓存结构.
                    缓存模拟器在缓存侧信道攻击和防御也发挥着关键性作用.目前的缓存侧信道攻击已经由同核攻击                                  [6] 发展到
                 了跨进程、跨核甚至是跨虚拟机攻击             [7−9] . 这些攻击的初始想法都会首先通过缓存模拟器进行验证               [10,11] . 为了防御
                 缓存侧信道攻击, 一系列的防御措施也相应被提出, 其中一些防御措施是对现有的缓存结构进行修改, 如缓存随机
                 化  [12−16] 、偏斜缓存  (skewed cache) 以及将元数据和数据索引关系解耦合的        Mirage Cache [17] , 这些防御策略都使用
                 了缓存模拟器进行了功能验证.
                    综上, 无论是对缓存设计的空间进行探索和性能评估, 还是对缓存侧信道的攻击算法以及新修改的架构进行
                 测试和可行性验证, 缓存模拟器都扮演着不可或缺的角色. 但这也对缓存模拟器提出了如下挑战: (1) 支持的缓存
                 架构要全面, 这样才能对比不同架构间的性能差异. (2) 代码可修改并且易修改, 探索新的缓存架构有可能会对现
                 有的架构做出大幅度的改动, 模拟器需要可改动以支持评估新的架构是否有效并在此基础上快速迭代. (3) 既支持
                 只有缓存行为的仿真也支持系统仿真. 在设计新缓存结构的初期阶段往往需要一个无噪声的环境                                 (如没有虚实地
                 址转换的干扰) 来验证新的缓存结构是否工作, 而测试缓存时则需要运行测试集                         (如  SPEC CPU2006 [18] ) 获取性能
                 数据, 因此这要求模拟器既能支持简单的读写行为, 也能接入处理器模拟器系统地仿真整个程序的运行.
                    Spike 是  RISC-V  指令集的标准处理器仿真模型, 但        Spike 的缓存模型的设计目标是尽可能地提升仿真速度,
                 仿真过程不依赖于缓存, 且不追求对缓存进行真实的细粒度仿真. 因此                      Spike 的缓存结构与真实多核处理器的缓
                 存结构有很大不同. 总之, Spike 的缓存模型有以下几点缺陷: (1) 缓存结构简单, Spike 的缓存结构仅支持经典多路
                 组相联的二级缓存, 并且无法更换缓存的映射算法和替换算法. (2) 不支持私有缓存, Spike 的多个处理器核心会共
                 享一级指令缓存      (instruction cache, L1-I) 与数据缓存  (data cache, L1-D) 并且不支持多核的缓存一致性协议, 这与
                 大多数真实多核处理器中每个核都有私有的一级和二级缓存的结构相差甚远. (3) 对虚实地址转换的仿真粒度不
                 够. Spike 中仅有用于加速仿真速度的软件旁路转换缓存               (translation lookaside buffer, TLB) 模块, 缺少真实的硬件
                 旁路转换缓存. (4) 缓存性能指标简单, Spike 的缓存模型仅支持统计简单的读写次数、访问次数以及缺失次数等
                 指标, 而对于缓存的研究需要更多维度的性能指标. (5) 外部程序与缓存模型交互不灵活, 缺少外部仿真程序与缓
                 存模型动态交互的接口, 外部程序难以动态地获得缓存信息与调整缓存监视器.
                    本文对   Spike 的缓存模型进行了升级. 具体地, 本文以可配置、易扩展和高性能为目标, 修改和扩展了                          Spike
                 的缓存模型, 并将新的缓存模型命名为             FlexiCAS (flexible cache architectural simulator), 修改后的  Spike 命名为
                 Spike-FlexiCAS, 新的缓存模型的特点如下.
                    (1) 灵活配置. 在上下级缓存关系上, 不仅支持常见的包含性                (inclusive) 缓存, 还支持排他性  (exclusive) 缓存和
   39   40   41   42   43   44   45   46   47   48   49