摘要
在半导体技术受到管控的背景下,实现芯片的完全自主可控已成为现今半导体技术发展的重点.由于RISC-V具有开源、应用广泛的特性,研究RISC-V架构对于我国微处理器的自主可控具有重要研究意义.在微处理器系统中,由于物理资源的有限性和直接访问存储可能潜在危害, DMA访问I/O设备时将会受到诸多限制,从而影响访问性能.目前主流的方法是通过将I/O事务虚拟化,可以很好地解决这一问题.本文首次提出了一种基于RISC-V的I/O虚拟化架构,极大地加速了I/O访问进程,仅花费几个时钟周期就可快速完成I/O设备对内存的DMA请求.本设计将来可以作为IP,集成到RISC-V架构的处理器中,加速I/O设备对内存的访问.
在半导体技术受到封锁和制裁的背景下,实现芯片的完全自主可控已经成为现今半导体技术发展的重点.RISC-V作为一种开源指令集架构,在实现芯片自主可控上具有重要的意义.RISC-V在高性能处理器、服务器、人工智能及机器学习领域有广泛应用前景,RISC-V生态发展正呈现明显的加速态
根据使用的技术方案不同,I/O虚拟化也分为全虚拟化、半虚拟化和硬件辅助虚拟化.其中,全虚拟化指的是在管理程序(hypervisor)或宿主机完全模拟设备的行为,虚拟机(Virtual Machine,VM)对外设的所有操作都会触发VM陷入hypervisor,之后由hypervisor将VM对设备的操作信息截获下来进行处
为实现IOMMU的I/O虚拟化功能,IOMMU中的DMA重映射遵循RISC-V特权架构下的两级地址转换内容.基于I/O虚拟化,本文对RISC-V特权规范中虚拟地址转换等内容进行研究.使用Verilog HDL对电路进行建模,设计了一款完全符合RISC-V IOMMU规范的电路,该电路主要功能包括:实现基于device_id与process_id的设备上下文(Device Context)和进程上下文(Process Context)翻译、单级或两级虚拟地址翻译、设备MSI中断的重映射、PCIe设备的ATS接口、位于内存的队列接口等功能.为提升IOMMU的性能,同时对IOATC(I/O Address Translation Caches)进行研究,使用PLRU更新算法来设计对应Cache.
经过实验证明,相较于一般的DMA访问性能,本文设计的RISC-V架构IOMMU在较高命中率的前提下极大地提升了I/O访问的性能,实现I/O设备与系统内存的安全性和隔离性.
1 IOMMU架构介绍
1.1 设计架构
RISC-V下的IOMMU与Intel的VT-d、AMD的IOMMU、ARM的SMMU的工作原理和流程大致相似.位于可以进行DMA的I/O设备与系统内存之间,属于系统级的内存管理单元.该方案主要由TCU和IOATC模块组成,可以实现I/O设备对系统内存的安全访问,并加速其访问进程.
IOMMU在DMA转换时,使用软件提供的页表来翻译虚拟地址的过程可能会影响DMA访问(需要访问主存).CPU中的MMU通常使用TLB(Translation Look-aside Buffer)来缓存翻译的结果,这样可以加速地址翻译过程.RISC-V的IOMMU中也使用到了类似的机制,即IOATC(I/O Address Translation Caches).
在PCIe的情况下,如设备端支持ATS服务,根端口可将ATS接口合并至IOMMU,以支持IOMMU的PCIe ATS协议.在支持ATS的PCIe端点设备内部,有设备端的ATC(DevATC,Device Address Translation Cache),用来保存PCIe设备使用ATS协议从IOMMU处的转换.
本论文中设计的IOMMU在SOC系统中的位置如

图1 SOC中的IOMMU架构
Fig.1 IOMMU architecture in SOC
当I/O设备具有DMA能力时,可以选择直接连接到IO Bridge,I/O设备可以发送使用IOVA(VA、GVA、GPA)的事务,由IO Bridge来调用IOMMU将IOVA地址转换为系统物理地址(SPA).当IOMMU未开启时,IO Bridge不会调用IOMMU来处理DMA事务,DMA事务直接穿过IO Bridge进行下一级传递.
在PCIe的情况下,如设备端支持ATS服务,根端口可将ATS接口合并至IOMMU,以支持IOMMU的PCIe ATS协议.在支持ATS的PCIe端点设备内部,有设备端的ATC(DevATC,Device Address Translation Cache),用来保存PCIe设备使用ATS协议从IOMMU处的转换.
IOMMU主要分两部分:TCU(Translation Control Unit)与IOATC(IO Address Translation Cache),如

图2 IOMMU主要模块
Fig.2 IOMMU main module
在从主存中读取特定数据的过程中往往需要访问多级页表,这意味着需要多次访问主存,而访问主存带来的时间代价是相当大的.而在IOATC中缓存IOMMU在page table walk过程中读取回来的页表项之后,每当需要从主存中查询数据时,首先查询IOATC中对应的Cache,如命中则直接取Cache的内容,不需要访问主存,可以大大地降低时序上的延迟,从而提高性能.
存在Cache就会有一致性问题,IOMMU中对于IOATC一致性的维护是通过与软件的交互完成的.当内存中的页表结构有更新或失效操作时,会向IOMMU的命令队列CQ发送相应的失效命令,IOMMU在取到失效命令之后,向IOATC发送失效请求,通过请求中包含的tag信息来对全部或部分Cache进行失效操作.通过这样的方式来维护Cache与主存中数据的一致性.
1.2 功能点分析
在RISC-V IOMMU规范的基础上,结合具体I/O虚拟化应用的需求,将本次设计的功能特性介绍如下:
· 支持存储于内存的DDT结构,可以通过DMA请求中提供的硬件信息device_id来定位并取出DDT中的设备上下文DC.所支持的device_id位宽最宽可为24 bits,可选地支持3、2、1级DDT结构.
· 支持存储于内存的PDT结构,可以通过DMA请求中提供的硬件信息process_id来定位并取出PDT中的进程上下文PC.所支持的process_id位宽最宽可为20 bits,可选地支持3、2、1级PDT结构.
· 支持基于页面的虚拟地址系统,与RISC-V特权规范中虚拟地址翻译保护的内容一致,可以使用与CPU使用公共的页表,也可以对IOMMU使用单独的页表.
· 规范中支持最高57位的虚拟地址,56位物理地址和59位的GPA.在本设计中,支持Sv39和Sv48,故本文支持最高48位虚拟地址和50位的GPA.
· 支持上文中所述的对于虚拟中断文件写入MSI的重映射,MSI的页表项可参见RISC-V Advanced Interrupt Architecture(AIA)协议.
· 硬件性能监视器(Hardware Performance Monitor).
根据具体应用的不同,所支持的功能也有所差别,软件可以通过读取capabilities寄存器的内容来发现IOMMU所具体实现的功能.
2 TCU设计
TCU的工作流程如

图3 上下文获取流程
Fig.3 Context acquisition process
在成功获得对应的设备与进程上下文后,也就获得了对IOVA进行地址转换的策略及相关信息.地址转换的流程见

图4 地址转换流程
Fig.4 Address translation process
由
3 IOATC设计
IOATC用于缓存IOMMU页表查找过程中查找到的叶子项页表信息,即页表条目.当IOMMU接收到来自设备的地址转换请求时,其根据当前地址转换的阶段,首先到IOATC中获取相应页表数据的缓存信息.若命中地址转换所需的信息,则可以快速实现地址的转换,而不需要花费大量的时间到系统内存中去获取地址翻译所需的数据结构和所必须经历的页表转换.在IOMMU中,专门用于页表转换的模块为TCU,TCU与IOATC之间的主要接口如

图5 IOATC与TCU交互接口
Fig.5 Interface between IOATC and TCU
IOATC中的各个子模块缓存相应数据结构页表的子块数据,也就是IOMMU在地址转换过程中所必需的设备上下文(DC)、进程上下文(PC),以及各阶段页表地址转换的PTE等数据信息.IOATC中包含的子模块如

图6 IOATC子模块
Fig.6 IOATC submodule
其中每个子模块的功能如下,每个子模块为相应数据结构的缓存项以及控制逻辑:
•micro_Cache:缓存两阶段地址转换(VS-stage和G-stage)的系统物理地址(SPA),当tag标志匹配时,可直接实现虚拟地址到物理地址的转换.
•main_Cache:在两阶段查找中,当micro_Cache查找miss时,开始查找main_Cache.main_Cahce中的VS-stage_Cache和G-stage_Cache分别缓存了VS-stage地址转换的叶子项数据和G-stage地址转换的叶子项数据.
在设计了IOATC后,IOMMU的访问IOATC工作流程如

图7 IOMMU访问IOATC工作流程
Fig.7 IOMMU access IOATC workflow
当设备发出地址转换请求时,IOMMU首先到DDTC中查找设备对应的设备上下文DC,若命中DDTC则不需要花费较长的时间去内存中查找PDT页表.获取到设备地址转换所必需的DC之后,根据DC中的信息判断该地址请求的类型:
·若请求为MSI地址转换,则IOMMU将访问MSITC,如果命中了MSITC中的缓存项,则完成MSI的地址转换,并将其路由到中断控制器.如果未命中则需要花费较长时间到内存中访问MSI页表,再完成后续的过程.
·若请求为单阶段地址转换,则IOMMU将访问S-stage Cache.如果在访问过程中命中了缓存项,将使用缓存中的物理页号与虚拟地址中的偏移量组成物理地址,快速完成单阶段地址转换的过程.如果未命中缓存项,则需要耗费大量时间到系统内存中查找S阶段页表.
·若请求为两阶段地址转换,则IOMMU首先将访问micro Cache.如果命中micro Cache的缓存项,那么可以直接实现由虚拟地址到物理地址的转换.如果未命中micro Cache,则将访问main Cache进行两级查找.若在main Cache中命中了VS阶段的缓存项,则可直接实现由虚拟地址到客户物理地址的转换,然后再对G阶段的缓存项进行查找.若命中了G阶段的页表项,则实现客户物理地址到系统物理地址(SPA)的转换,从而完成了两阶段地址转换.在查找main Cache的过程中,若未命中缓存项都将花费大量时间到内存中进行页表翻译.
Walker操作从内存中获取数据的时间往往是命中IOATC的数百倍,而命中IOATC可极大节省访问的时间.由
4 仿真结果
4.1 上下文PTW
在将TCU与IOATC集成为IOMMU后,对上下文PTW进行仿真的结果如

图8 上下文PTW仿真结果
Fig.8 Context page table walk simulation result
IOMMU在初始化后,IOATC未缓存任何内容,所以各个数据结构都需要进行PTW来获得主存中的数据.在PTW结束后,会将相关信息填充至IOATC当中.两阶段地址翻译的PTW过程见

图9 两阶段地址转换PTW
Fig.9 Two stage translation page table walk
4.2 两阶段PTW
如
当第一阶段地址转换结束后,再使用转换过的GPA再进行第二阶段地址转换,转换结束后ptw_done信号拉高,同时输出最后的结果SPA.且在每次地址转换完成后,都需要对相应的Cache进行填充操作.
4.3 IOATC全命中
IOMMU在正常工作过程中全部命中IOATC的仿真如

图10 地址转换全命中
Fig.10 Address translation all hit
对比命中IOATC与进行PTW的时序情况,可见当IOATC未命中时,进行PTW所带来的耗时是IOATC命中时的几十倍甚至几百倍.所以高命中率的IOATC会大幅提升IOMMU的性能.
4.4 MSI重映射
IOATC中缓存有MSI重映射所需要的PTE,所以在处理MSI中断重映射时,需要查询MSI Cache.如

图11 MSI缓存命中
Fig.11 MSI Cache hit
在第1个时钟周期时,接收到MSI重映射请求,nxt_st进入MSI_LOOK_UP状态(3’h1),向Cache发送gpa、gscid以及查询请求.第2个时钟周期等待Cache返回信号,第3个时钟周期Cache返回hit信号及命中的MSI PTE,nxt_st进入MSI_READY状态,表明已读取到MSI PTE内容.第4个时钟周期将PTE读取到MSI模块内部.
MSI重映射地址转换模式有基本翻译模式与MRIF模式,IOMMU协议中建议MSI Cache中仅缓存基本翻译模式的PTE,具体实现采用了这一做法.故从Cache中读取的MSI PTE都为基本翻译模式.在
4.5 命中率评估
IOMMU中的命中率是评估虚拟化性能的重要指标,如若虚拟化后命中率过低则将会降低外设访问的速率,从而影响性能.本文的命中率根据公式:命中率=命中次数/总访问次数计算得出.
由于初始阶段IOATC中缓存为空,此时命中率较低.经过大量的访问后,得益于PLRU算法以及本文中的缓存策略,IOATC的命中率有了较大提升,并且维持在较高水平.在命中率稳定之后,截取任意的12次访问,仅有1次未命中,计算出通过PLRU算法优化后的IOATC命中率为91%左右.
4.6 综合结果
IOMMU在计算机体系架构中处于I/O外设与系统互联之间,通常不会做单独的芯片产品,往往是处于SOC架构中或者以IP的形式输出,无论是SOC或IP,都需要经过FPGA综合与仿真验证.使用FPGA对IOMMU中的TCU进行的综合报告见
Family | Cyclone IV E |
---|---|
Total logic elements | 7 656 |
Total combinational functions | 5 703 |
Dedicated registers | 4 160 |
可以看出,作为IOMMU主要的控制与进行PTW的模块,TCU中的组合逻辑单元使用为5 703,寄存器资源使用为4 160.寄存器资源较多是因为TCU内部存在上下文的缓存寄存器、地址转换请求缓存buffer,以及三种队列的缓存buffer,整体电路面积适中.
通过
I/O访问方式 | 访问时间 | 寄存器资源 | 安全性 |
---|---|---|---|
普通DMA访问 | 数十~数百个周期 | 4 160个 | 一般 |
IOMMU访问 | 3~4个周期 | 8 520个 | 较好 |
5 结 论
在计算机体系中,随着计算性能的不断提升, I/O外设与虚拟机之间的数据流变得十分庞大且复杂.对外设的I/O事务进行虚拟化操作有助于实现虚拟机之间的隔离与安全,同时也会大幅提升物理资源利用率,从而提升计算机整体的性能.
由于目前暂未有RISC-V架构的I/O硬件辅助虚拟化实现,本文首次提出一种基于RISC-V架构的IOMMU实现方法.仿真结果表明,本文设计的IOMMU,IOATC命中率高达91%,极大地提高了I/O设备的DMA访问速度.占用资源较少,将来可以作为IP核,集成到RISC-V架构的处理器中.
参考文献
种丹丹.基于RISC-V的开源芯片生态发展现状及未来机遇[J].中国集成电路,2021,30(8):25-30. [百度学术]
CHONG D D.Current status and future opportunities of open-source chip ecosystem based on RISC-V[J].China Integrated Circuit,2021,30(8):25-30.(in Chinese) [百度学术]
MORABITO R,COZZOLINO V,DING A Y,et al.Consolidate IoT edge computing with lightweight virtualization[J].IEEE Network,2018,32(1):102-111. [百度学术]
ZHANG W,LI Y D,LIU Y.A survey of direct interrupt delivery techniques in I/O virtualization[C]//2017 8th IEEE International Conference on Software Engineering and Service Science (ICSESS).Beijing,China.IEEE,2017:169-172. [百度学术]
SCHULZ B,ANNIGHÖFER B.Evaluation of adaptive partitioning and real-time capability for virtualization with xen hypervisor[J].IEEE Transactions on Aerospace and Electronic Systems,2022,58(1):206-217. [百度学术]
SANG F L,LACOMBE É,NICOMETTE V,et al.Exploiting an I/OMMU vulnerability[C]//2010 5th International Conference on Malicious and Unwanted Software.Nancy,France.IEEE,2010:7-14. [百度学术]
CASALE G,KRAFT S,KRISHNAMURTHY D.A model of storage I/O performance interference in virtualized systems[C]//2011 31st International Conference on Distributed Computing Systems Workshops.Minneapolis,MN,USA.IEEE,2011:34-39. [百度学术]
BABU S A,HAREESH M J,MARTIN J P,et al.System performance evaluation of Para virtualization,container virtualization,and full virtualization using Xen,OpenVZ,and XenServer[C]//2014 Fourth International Conference on Advances in Computing and Communications.Cochin,India.IEEE,2014:247-250. [百度学术]
ARMSTRONG D,DJEMAME K.Performance issues in clouds:an evaluation of virtual image propagation and I/O paravirtualization[J].The Computer Journal,2011,54(6):836-849. [百度学术]
PITAEV N,FALKNER M,LEIVADEASY A,et al.Multi-VNF performance characterization for virtualized network functions[C]//2017 IEEE Conference on Network Softwarization (NetSoft).Bologna,Italy.IEEE,2017:1-5. [百度学术]
MUENCH D,ISFORT O,MUELLER K,et al.Hardware-based I/O virtualization for mixed criticality real-time systems using PCIe SR-IOV[C]//2013 IEEE 16th International Conference on Computational Science and Engineering.Sydney,NSW,Australia.IEEE,2013:706-713. [百度学术]
ĐORĐEVIĆ B,TIMČENKO V,KRALJEVIĆ N,et al.File system performance comparison in full hardware virtualization with ESXi and Xen hypervisors[C]//2019 18th International Symposium INFOTEH-JAHORINA (INFOTEH).East Sarajevo,Bosnia and Herzegovina.IEEE,2019:1-5. [百度学术]
ERULANOVA A,YESSENBEKOVA G,ZHANYSBAYEVA K,et al.Hardware and software support of technological processes virtualization[C]//2020 7th International Conference on Electrical and Electronics Engineering (ICEEE).Antalya,Turkey.IEEE,2020:333-337. [百度学术]