一种用于多根共享系统的直接i/o虚拟化方法和装置的制作方法

文档序号:6370453阅读:379来源:国知局
专利名称:一种用于多根共享系统的直接i/o 虚拟化方法和装置的制作方法
技术领域
本发明涉及i/o虚拟化技术,特别是涉及多个根节点上的不同虚拟机对i/o设备虚拟化的共享技术。
背景技术
在传统数据中心或云计算中心中,每个刀片服务器都拥有独立的I/O资源,如网卡、HBA适配器等。然而计算与I/O资源的紧密耦合,使得两类资源的扩展同时受到服务器空间的限制。此外,高性能I/O设备(如IOGigE网卡)仅依附一台服务器,无疑降低了其利用效率,提高了系统总成本。为解决上述问题,就要解除计算与I/O资源的紧密耦合,其关键就是实现I/O设备在多个服务器之间的共享。近年来,I/O设备的共享技术得到了变革性的发展,行业标准组织PCI特别兴趣小 组 PCI-SIG 先后制定了 PCI-SIG Single Root I/O Virtualization (SR-IOV :单根 IO 虚拟化)和 PCI-SIG Multi-Root 1/0 Virtualization (MR-I0V :多根 10 虚拟化)规范。具备SR-IOV能力的PCI Express设备能够被运行在同一宿主机上的不同虚拟机(VM/Guest)所共享,并为虚拟机提供接近本机的1/0性能。目前SR-IOV已得到1/0设备厂商的广泛支持,如支持SR-IOV的千兆以太网卡、10G以太网卡、HBA适配器等。具备MR-IOV能力的PCI Express设备能够被多个宿主机上运行的若干虚拟机(VM/Guest)所共享,MR-IOV技术可以完全解除计算与1/0间的紧密耦合。但由于PCI-SIG的MR-IOV协议对原有系统的较大改动(包括对PCIe基本协议、PCIe设备结构和PCIe交换机结构的修改),难以被工业界接受。因此亟需一种仅对已有系统进行少量修改,就可实现MR-IOV所定义系统功能的方法,并基于该方法构建多根I/o虚拟化共享系统。本发明给出了一种用于多根I/O虚拟化共享系统的直接I/o虚拟化方法和装置,实现本身具备多虚拟机共享能力的1/0设备功能被多个根节点独立发现、直接使用和动态共享,同时为各根节点对I/o设备资源的共享操作提供隔离和保护。

发明内容
为解决上述问题,本发明提供了一种用于多根I/o虚拟化共享系统的直接1/0虚拟化方法,包括步骤1,通过对物理1/0设备功能的逻辑抽象,建立逻辑虚拟化功能镜像,替代I/O设备功能作为从属根节点的设备占位符,实现I/o设备中各功能被多个根节点独立发现和配置;步骤2,通过硬件重映射方式,实现设备功能在从属根节点PCIe域和主控制根节点之间的映射,为各根节点在访问操作共享的物理I/o设备时提供直通模式,同时为各根节点的共享提供隔离和保护;步骤3,通过虚拟PCIe设备热插拔控制操作,能够在不影响根节点其他工作的情况下,完成向根节点动态删除和增加I/O设备功能,实现I/O设备中各功能被多个根节点动
态共享。所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化方法,所述步骤I逻辑抽象包括I/O设备功能的实体抽象,所述I/O设备功能的实体抽象,是指对I/O设备中功能的配置空间头的备份,包括对配置空间头中基址类配置寄存器的定义备份和非基址类只读配置寄存器的数据备份;I/O设备功能的行为模拟,所述I/O设备功能的行为模拟,是指对I/O设备中功能的配置响应的模拟。所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化方法,包括
所述基址类配置寄存器,包括通用基址寄存器和扩展ROM基址寄存器;所述非基址类只读配置寄存器,是指配置空间头中除了基址类寄存器之外的其他只读寄存器。所述基址类配置寄存器定义备份,指为设备中每个功能存储一份基址类配置寄存器定义,以备从属根节点循环读写配置;所述非基址类配置只读寄存器数据备份,指存储一份非基址类只读配置寄存器的数据,为设备中所有功能共享,以备从属根节点循环读识别。所述的多根I/O虚拟化共享系统的直接I/O虚拟化方法,所述I/O设备功能的实体抽象还包括步骤41,系统上电启动、初始化,复位指向基址类寄存器偏移指针为10h,复位指向扩展PCIe配置空间偏移指针为IOOh ;转向步骤42 ;步骤42,直接I/O虚拟化装置接收主控制根节点发来的配置事务包,接收事务包后转向步骤43 ;步骤43,提取并记录配置事务包中指示目标设备ID号和寄存器号,然后转向步骤44 ;步骤44,配置事务包判定,如果配置事务包是读取配置空间头中非基址类寄存器读请求包,设置等待完成包的标识符指示为非基址类只读寄存器读返回;如果是向BAR偏移指针指定的基址类寄存器写全I的写请求包,设置等待完成包的标识符指示为基址类寄存器读返回;如果是读取扩展PCIe配置空间偏移指针指定的寄存器读请求包,设置等待完成包的标识符指示为扩展PCIe配置空间读返回;否则,保持设置等待完成包的标识符为默认初始值。操作完成后转向步骤45;步骤45,接收I/O设备发来的带数据的完成包,接收到事务包后转向步骤46 ;步骤46,等待完成包的标识符判定,如果当前等待完成包的标识符判定指示为扩展PCIe配置空间读返回,转向步骤47 ;如果指示为基址类寄存器读返回,转向步骤410 ;如果指示为非基址类只读寄存器读返回,转向步骤411 ;否则,复位等待完成包的标识符,转向步骤42 ;步骤47,解析完成包数据中的扩展功能ID以及下一个功能指针,如果扩展功能ID指示为SR-IOV扩展功能,转向步骤48 ;否则转向步骤49 ;步骤48,修改基址类寄存器偏移指针的起始地址,使用扩展PCIe配置空间偏移指针加上第一个VF BAR在SR-IOV扩展功能寄存器组中的固定偏移,修改基址类寄存器偏移指针的起始地址;指示一个SR-IOV设备,并记录完成包中的完成者ID为SR-IOV设备中PF的ID号;操作完成后,转向步骤49 ;步骤49,使用步骤47提取的下一个功能指针更新扩展PCIe配置空间偏移指针;操作完成后,复位等待完成包的标识符,转向步骤42 ;步骤410,解析完成包中数据,备份基址类寄存器定义,并更新基址类寄存器偏移指针指向下一个基址寄存器;如果指示SR-IOV设备的标识符为假,则将该基址类寄存器定义备份到目标设备ID号和基址类寄存器偏移指针对应的寄存器中;如果指示SR-IOV设备的标识符为真,且完成者ID等于SR-IOV中PF的ID,则将该基址类寄存器定义备份到每个设备的基址类寄存器偏移指针对应的寄存器中;否则,不备份该基址类寄存器定义。操作完 成后,复位等待完成包的标识符,转向步骤42 ;步骤411,解析完成包中数据,并存储到由目标寄存器号指示的寄存器中;操作完成后,复位等待完成包的标识符,转向步骤42。所述的多根I/O虚拟化共享系统的直接I/O虚拟化方法,所述I/O设备功能的行为模拟还包括步骤51,直接I/O虚拟化装置接收从属根节点发来的循环配置事务包,接收事务包后转向步骤52 ;步骤52,提取并记录配置事务包中指示的寄存器号,然后转向步骤53 ;步骤53,配置寄存器类型判定。如果步骤52中的寄存器号指示为基址类配置寄存器,转向步骤54 ;如果指示为非基址类只读配置寄存器,转向步骤55 ;否则,转向步骤56 ;步骤54,基址类配置寄存器访问本地处理。如果是配置读请求包,则提取目标设备ID号和寄存器号对应的数据,组成完成包返回给相应的从属根节点;否则,如果是配置写请求包,提取请求包中的数据写存储到目标设备ID号和寄存器号对应的寄存器。操作完成后转向步骤51 ;步骤55,非基址类配置寄存器访问本地处理。如果是配置读请求包,则提取寄存器号对应的数据,组成完成包返回给相应的从属根节点;否则,如果是配置写请求包,提取请求包中的数据写存储到寄存器号对应的寄存器;操作完成后转向步骤51 ;步骤56,将事务包透传给物理I/O设备,由物理I/O设备相关功能进行配置响应。如果是配置读请求包,则接收I/o设备发来的完成包返回给相应的从属根节点;否则,如果是配置写请求包,I/o设备不返回任何响应;然后转向步骤51 ;本发明公开一种用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,包括下行事务包发送模块,所述下行事务包发送模块用于接收从根节点发来的事务包,通过对事务包的解析和重映射,将事务包分发给I/O虚拟化模块和物理I/O设备;上行事务包接收模块,所述上行事务包接收模块用于接收从I/O设备、I/O虚拟化模块和虚拟热插拔控制模块传来的事务包,通过对事务包的解析和重映射,将事务包发送给根节点;I/O虚拟化模块,所述I/O虚拟化模块通过对物理I/O设备功能的逻辑抽象,建立逻辑虚拟化功能镜像来替代I/o设备功能作为从属根节点的设备占位符,实现I/O设备中各功能被多个根节点独立发现和配置;
直接I/O重映射模块,所述直接I/O重映射模块通过硬件重映射的方式,实现设备功能在从属根节点PCIe域和主控制根节点PCIe域之间的ID转换和地址窗口转换,实现I/O设备中各功能被多个根节点直接使用;虚拟热插拔控制模块,所述虚拟热插拔控制模块通过摸拟PCIe热插拔控制操作,完成向根节点动态删除和增加I/O设备功能,实现I/O设备中各功能被多个根节点动态共
享。 所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,所述下行事务包发送模块包括下行事务包子解析模块,所述下行事务包解析子模块用于接收根节点发来的事务包,并对事务包的根节点和类型进行解析判定,如果是配置包,还要对其配置操作的寄存器进行解析判定;下行事务包重映射子模块,所述下行事务包重映射子模块用于对从属根节点发来的事务包进行ID号转换或者地址转换;下行事务包分发子模块,所述下行事务包分发子模块用于对事务包进行分发处理,如果是主控制根节点发来的配置包同时传递给I/o虚拟化模块和物理I/O设备,如果是从属根节点发来的对配置基址类和非基址类只读寄存器的配置事务包只传递给I/o虚拟化模块,其他事务包只传递给物理I/o设备。所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,所述上行事务包接收模块包括上行事务包解析子模块,所述上行事务包解析子模块用于接收物理I/O设备发来的事务包,对事务包的类型进行解析判定,如果是完成包,将其复制传递给I/o虚拟化模块;上行事务包重映射子模块,所述上行事务包重映射子模块用于对事务包的进行ID号转换;上行事务包调度子模块,所述上行事务包调度子模块用于将从I/O设备、I/O虚拟化模块和虚拟热插拔控制模块传来的事务包调度传给根节点。所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,所述I/O虚拟化模块包括配置事务解析子模块,所述配置事务解析子模块用于接收并解析根节点发来的配置事务包和I/o设备发来的完成包;配置寄存器备份子模块,所述配置寄存器模块实现基址类和非基址类只读配置寄存器的备份,实现对I/o设备功能的实体抽象;配置事务模拟响应子模块,所述配置事务模拟响应子模块用于替代I/O设备向根节点发送完成事务包,实现对I/o设备功能的行为模拟。本发明的有益效果为所述直接I/O虚拟化方法和装置,能够在不对操作系统以及设备驱动或者应用程序进行修改,完全兼容现有软件的标准执行模式的情况下,实现I/o设备各功能被被多个根节点独立发现和配置,并为各根节点在访问操作共享的物理I/o设备时提供直通模式,获得近乎本机的I/o性能,同时为各根节点对I/O设备的共享操作提供隔离和保护,以及支持I/o设备各功能在多个根节点之间动态共享。



图I是多根I/O虚拟化共享系统的结构示意图;图2是PCIe设备的配置空间示意图;图3是SR-IOV扩展功能寄存器组示意图;图4是设备功能的实体抽象方法的流程图;图5是设备功能的行为模拟方法的流程图;图6是直接I/O虚拟化装置的结构示意图;图7是本发明多根I/O虚拟化共享系统的直接I/O虚拟化方法。
具体实施例方式下面给出本发明的具体实施方式
,结合附图对本发明做出了详细描述。为了实现I/O设备中各功能被多个根节点独立发现和直接使用,并获得近乎本机的I/o性能,本发明提供了一种用于多根I/o虚拟化共享系统的直接I/O虚拟化方法和装置。所述直接I/o虚拟化方法,包括通过对物理I/O设备功能的逻辑抽象,建立逻辑虚拟化功能镜像,替代I/o设备功能作为从属根节点的设备占位符,实现I/O设备中各功能被多个根节点独立发现和配置;通过硬件重映射方式,实现设备功能在从属根节点PCIe域和主控制根节点之间的映射,为各根节点在访问操作共享的物理I/O设备时提供直通模式,同时还为各根节点的共享提供隔离和保护;通过虚拟PCIe设备热插拔控制操作,能够在不影响根节点其他工作的情况下,实现从根节点动态删除和增加I/O设备功能。图I描绘了多根I/O虚拟化共享系统的结构示意图。多根I/O虚拟化共享系统主要包括三个部分根节点子系统、I/o设备子系统和多根I/O虚拟化共享控制器。多根IO虚拟化共享控制器通过PCIe接口协议将根节点子系统和I/O设备子系统耦合在一起,实现一个I/O设备资源被多个根节点直接共享。多根I/O虚拟化共享系统中的根节点子系统包含多个根节点,每个根节点由根联合体(Root Complex, RC)及其连接的CPU组(CPU set)和内存(Mem)组成。其中,运行有PCIe管理相关软件的根节点称之为主控制根节点(Master Root Node, mRN),主控制根节点只有一个(下文使用mRNO标识),管理和分配系统中的所有1/0设备资源;其他根节点称为从属根节点(Slave Root Node, sRN),从属根节点可以有多个(下文使用sRNl,sRN2,…,sRNn标识),并根据主控制根节点的分配,拥有一定1/0资源的独立使用权。根节点上可以运行多个同构或者异构虚拟机(Virtual Machine, VM),虚拟机管理程序(Virtual MachineManager, VMM)负责调度主控制根节点分配的1/0资源为各VM所用。多根1/0虚拟化共享系统中的1/0设备子系统包含多个1/0设备,各1/0设备具备同时为多个虚拟机提供服务的能力,可以是包含一个物理功能(Physical Function, PF)及其对应的多个虚拟功能(Virtual Function, VF)的SR-IOV设备或者包含多个PF及其对应的多个VF的SR-IOV设备,也可以是多功能1/0设备等。多根1/0虚拟化共享系统中的多根1/0虚拟化共享控制器包由若干个PCIe上游端口(PCIe Upstream Port)、PCIe 多根交换机和若干个 PCIe 下游端口(PCIe DownstreamPort)三个部分组成。其中,PCIe上游端口包含符合PCI-Express基本规范中的PCIe端口类型定义的PCIe控制器,它负责与根节点子系统的互连,以及PCIe单根环境和PCIe多根环境之间的事务包转换;PCIe多根交换机,实质是由多个PCI桥建立的N+M个端口的交换机,通过为每个根节点建立一个1+M端口的虚拟PCIe交换机,实现各根节点与M个I/O设备的逻辑连接;PCIe下游端口,包含符合PCI-Express基本规范中的PCIe端口类型定义的PCIe控制器和直接I/O虚拟化装置两个功能部分,负责与I/O设备子系统的互连,以及PCIe单根环境和PCIe多根环境之间的事务包转换,实现各根节点直接访问物理I/O设备功倉泛。 图2描述了一个PCIe设备的配置空间。每个功能都提供了一个配置空间,仅限初始化软件和错误处理软件用来进行设备识别、初始化配置和故障性错误处理。PCIe设备的配置空间分为三部分=PCI兼容的配置空间头、PCI兼容标准功能配置空间和PCIe扩展功能配置空间。PCI兼容的配置空间头定义了用于识别驱动程序的设备标识寄存器(如厂商ID,设备ID,修订ID,子系统ID,子系统厂商ID等),以及其他操作软件访问设备寄存器时必须使用的定义I/O和Memory空间的基址寄存器BAR(Base Address Register)等。PCI兼容标准功能配置空间和PCIe扩展功能配置空间中有许多可选的功能寄存器组用来定义设备的功能特性。PCI兼容标准功能配置空间定义了包括PCIe功能寄存器组(PCI ExpressCapability Structure),消息信号中断功能寄存器组(MSI/MSI-X Cap Structure)以及电源管理功能寄存器组(Power Management Capability Structure)等,其中PCI e功能寄存器组和电源管理功能寄存器组是所有PCIe设备功能必需实现的标准功能寄存器组。PCIe扩展功能配置空间定义了包括SR-IOV功能寄存器组(SR-IOV Capability Structure)、高级错误报告功能寄存器组(Advanced Error Reporting Capability Structure)、虚通道功能寄存器组(Virtual Channel Capability Structure)等。其中,SR-IOV功能寄存器组是SR-IOV设备中PF功能必需实现的。图3描述了 SR-IOV扩展功能寄存器组。SR-IOV设备是包含物理功能PF及其对应的多个虚拟功能VF的PCIe设备。其中,PF是标准的PCIe功能,具有丰富的物理资源和完备的配置空间,能被系统软件及驱动程序等发现和访问。VF是”轻量级”的PCIe功能,也有自己独立的配置空间,所谓“轻量级”体现在两个方面一是VF只需具备数据迁移所必需的物理资源,如收发队列等;二是VF的配置空间是经过“谨慎精简”过的PCIe配置空间。VF通过自被“精简”的配置空间不能被系统软件发现和初始化的。VF被“精简”的部分域值,如用于识别驱动程序的设备标识寄存器厂商ID,设备ID等,没有被定义,使用时共享PF的配置空间对应域的值。而访问VF的1/0和Memory地址空间的BAR地址寄存器由SR-IOV扩展功能寄存器组定义。如图4所示,所述的SR-IOV扩展功能寄存器,位于PF配置空间中。其中,字段“第一个VF偏移”和“VF步进”定义了与PF相关联的VF的ID号;字段“VFBAR0”至“VF BAR5”定义了 VF所需的BAR地址。每个VF BARb (b=0, I,……,5)定义了所有VF相应BARb的相同需求,并记录了第一个VF的BARb的起始地址,其他VF相应BARb的起始地址由公式VF BARb+(v-1)*(VF BARb范围大小)计算获得。SR-IOV设备在单根虚拟化环境中使用时,VF需通过VMM或者Hypervisor模拟向虚拟机呈现完整的配置空间,才能实现在多个虚拟机之间共享。本发明使用硬件模拟的方式,通过对物理1/0设备功能的逻辑抽象,建立对应的逻辑虚拟化功能镜像,实现了 1/0设备功能被多个根节点独立发现和配置。所述的逻辑抽象方法,包括对I/o设备功能的实体抽象方法和行为模拟方法。其中,I/o设备功能的实体抽象,是指对I/O设备中功能的配置空间头的备份,包括对配置空间头中基址类配置寄存器的定义备份和非基址类只读配置寄存器的数据备份。所述基址类配置寄存器,包括通用基址寄存器(BAR)和扩展ROM基址寄存器。直接I/O虚拟化装置为设备中每个功能存储一份基址类配置寄存器定义,以备从属根节点循环读写配置。所述非基址类只读配置寄存器,是指配置空间头中除了基址类寄存器之外的其他只读寄存器。直接I/O虚拟化装置只存储一份非基址类只读配置寄存器的数据,为设备中所有功能共享,以备从属根节点循环读识别。所述I/O设备功能的行为模拟方法,是指对I/O设备中功能的配置响应的模拟。如图7所示,本发明公开一种用于多根I/O虚拟化共享系统的直接I/O虚拟化方法,包括步骤1,通过对物理I/O设备功能的逻辑抽象,建立逻辑虚拟化功能镜像,替代I/O设备功能作为从属根节点的设备占位符,实现I/o设备中各功能被多个根节点独立发现和 配置;步骤2,通过硬件重映射方式,实现设备功能在从属根节点PCIe域和主控制根节点之间的映射,为各根节点在访问操作共享的物理I/o设备时提供直通模式,同时为各根节点的共享提供隔离和保护;步骤3,通过虚拟PCIe设备热插拔控制操作,能够在不影响根节点其他工作的情况下,完成向根节点动态删除和增加I/o设备功能,实现I/O设备中各功能被多个根节点动
态共享。所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化方法,所述步骤I逻辑抽象包括I/O设备功能的实体抽象,所述I/O设备功能的实体抽象,是指对I/O设备中功能的配置空间头的备份,包括对配置空间头中基址类配置寄存器的定义备份和非基址类只读配置寄存器的数据备份;I/O设备功能的行为模拟,所述I/O设备功能的行为模拟,是指对I/O设备中功能的配置响应的模拟。所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化方法,包括所述基址类配置寄存器,包括通用基址寄存器和扩展ROM基址寄存器;所述非基址类只读配置寄存器,是指配置空间头中除了基址类寄存器之外的其他只读寄存器。所述基址类配置寄存器定义备份,指为设备中每个功能存储一份基址类配置寄存器定义,以备从属根节点循环读写配置;所述非基址类配置只读寄存器数据备份,指存储一份非基址类只读配置寄存器的数据,为设备中所有功能共享,以备从属根节点循环读识别。图4描述了 I/O设备功能的实体抽象方法的流程图,包括以下步骤a)上电启动,初始化,复位指向基址类寄存器偏移指针为10h,复位指向扩展PCIe配置空间偏移指针为100h。转向步骤b)。b)直接I/O虚拟化装置接收主控制根节点发来的配置事务包,接收事务包后转向步骤c )。
c)提取并记录配置事务包中指示目标设备ID号和寄存器号,然后转向步骤d)。d)配置事务包判定,如果配置事务包是读取配置空间头中非基址类寄存器读请求包,设置等待完成包的标识符指示为非基址类只读寄存器读返回;如果是向BAR偏移指针指定的基址类寄存器写全I的写请求包,设置等待完成包的标识符指示为基址类寄存器读返回;如果是读取扩展PCIe配置空间偏移指针指定的寄存器读请求包,设置等待完成包的标识符指示为扩展PCIe配置空间读返回;否则,保持设置等待完成包的标识符为默认初始值。操作完成后转向步骤e)。e)接收I/O设备发来的带数据的完成包,接收到事务包后转向步骤f)。f)等待完成包的标识符判定,如果当前等待完成包的标识符判定指示为扩展PCIe配置空间读返回,转向步骤g);如果指示为基址类寄存器读返回,转向步骤j);如果指示为非基址类只读寄存器读返回,转向步骤k);否则,复位等待完成包的标识符,转向步骤b)。
g)解析完成包数据中的扩展功能ID以及下一个功能指针,如果扩展功能ID指示为SR-IOV扩展功能,转向步骤h);否则转向i)。h)修改基址类寄存器偏移指针的起始地址,使用扩展PCIe配置空间偏移指针加上第一个VF BAR在SR-IOV扩展功能寄存器组中的固定偏移,修改基址类寄存器偏移指针的起始地址;指示一个SR-IOV设备,并记录完成包中的完成者ID为SR-IOV设备中PF的ID号。操作完成后,转向步骤i)。i)使用步骤g)提取的下一个功能指针更新扩展PCIe配置空间偏移指针。操作完成后,复位等待完成包的标识符,转向步骤b )。j)解析完成包中数据,备份基址类寄存器定义,并更新基址类寄存器偏移指针指向下一个基址寄存器。如果指示SR-IOV设备的标识符为假,则将该基址类寄存器定义备份到目标设备ID号和基址类寄存器偏移指针对应的寄存器中;如果指示SR-IOV设备的标识符为真,且完成者ID等于SR-IOV中PF的ID,则将该基址类寄存器定义备份到每个设备的基址类寄存器偏移指针对应的寄存器中;否则,不备份该基址类寄存器定义。操作完成后,复位等待完成包的标识符,转向步骤b )。k)解析完成包中数据,并存储到由目标寄存器号指示的寄存器中。操作完成后,复位等待完成包的标识符,转向步骤b )。图5描述了 I/O设备功能的行为模拟方法的流程图,包括以下步骤a)直接I/O虚拟化装置接收从属根节点发来的循环配置事务包,接收事务包后转向步骤b )。b)提取并记录配置事务包中指示的寄存器号,然后转向步骤c)c)配置寄存器类型判定。如果步骤b)中的寄存器号指示为基址类配置寄存器,转向步骤d);如果指示为非基址类只读配置寄存器,转向步骤e);否则,转向步骤f);d)基址类配置寄存器访问本地处理。如果是配置读请求包,则提取目标设备ID号和寄存器号对应的数据,组成完成包返回给相应的从属根节点;否则,如果是配置写请求包,提取请求包中的数据写存储到目标设备ID号和寄存器号对应的寄存器。操作完成后转向步骤a)。e)非基址类配置寄存器访问本地处理。如果是配置读请求包,则提取寄存器号对应的数据,组成完成包返回给相应的从属根节点;否则,如果是配置写请求包,提取请求包中的数据写存储到寄存器号对应的寄存器。操作完成后转向步骤a)。f)将事务包透传给物理I/O设备,由物理I/O设备相关功能进行配置响应。如果是配置读请求包,则接收I/o设备发来的完成包返回给相应的从属根节点;否则,如果是配置写请求包,I/o设备不返回任何响应;然后转向步骤i)。图6描述了多根I/O虚拟化共享系统中直接I/O虚拟化装置结构示意图。直接I/o虚拟化装置位于多根I/O虚拟化共享控制器中的PCIe下游端口,由下行事务包发送模块、上行事务包接收模块,I/O虚拟化模块、直接I/O重映射模块和虚拟热插拔控制模块组成。其中,下行事务包发送模块主要负责接收根节点发来的事务包,对事务包的根节点、类型以及配置包操作的寄存器进行解析判定;并对从属根节点发来的事务包进行ID号转换或者地址转换;最后对事务包进行分发处理,如果是主控制根节点发来的配置包同时传递给I/O虚拟化模块和物理I/O设备,如果是从属根节点发来的对配置基址类和非基址类只读寄存器的配置事务包只传递给I/O虚拟化模块,其他事务包 只传递给物理I/O设备。上行事务包接收模块主要负责接收物理I/O设备发来的事务包,对事务包的类型进行解析判定,将其中的完成包复制传递给I/O虚拟化模块;并对事务包的进行ID号转换;最后将从物理I/O设备、I/O虚拟化模块和虚拟热插拔控制模块传来的事务包调度传送给根节点。I/O虚拟化模块包含了描述PCIe设备配置空间的基址类寄存器和非基址类只读寄存器;它通过接收并解析根节点发来的配置事务包和I/O设备发来的完成包,并对其中的基址类和非基址类只读配置寄存器进行备份,描述了 N个对应的逻辑虚拟功能映像LVF (Logic Virtual Function, LVF),进而实现了对I/O设备功能的实体抽象;当接收到从属根节点发来的对所述基址类和非基址类只读寄存器的操作时,I/O虚拟化模块提取备份的值替代I/O设备向根节点发送完成事务包,实现对I/O设备功能的行为模拟。这样,通过截取和模拟响应从属根节点对I/O设备中功能单元的枚举发现和初始化配置,使用逻辑虚拟功能映像LVF替代I/O设备中的各功能作为从属根节点的设备占位符,向从属根节点呈现一个个透明的设备功能,不仅改变了 SR-IOV设备中VF不能被系统初始化软件独立发现的境遇,使得SR-IOV设备中各功能被多个根节点独立发现和配置,同时也防止了从属根节点覆盖主控制根节点对物理I/O设备功能的关键配置,保护了主控制节点对I/O设备资源的控制权。PCIe设备中的功能通常都用一个由总线号BUS/设备号DEVICE/功能号FUNCI0N组成的ID(B/D/F)来标识,并被映射到系统的内存地址空间中。在多根I/O虚拟化共享系统上电后,主控制根节点首先将对I/O子系统中的所有I/O设备进行枚举发现和初始化配置,同时也为设备功能分配了其在主控制根节点PCIe域中的ID(B/D/F)号和所占据的内存地址窗口。当I/O设备功能被分配给从属根节点使用时,从属根节点也会分配其在所属的从属根节点PCIe域中的ID(B/D/F)号和所占据的内存地址窗口。这两组初始化的配置信息分别存在物理设备功能中和逻辑虚拟功能映像LVF中。直接I/O虚拟化装置中的直接I/O重映射,通过硬件重映射的方式,实现设备功能的ID号和内存地址在从属根节点PCIe域和主控制根节点PCIe域之间的转换,为各根节点在访问操作共享的物理I/O设备时提供直通模式,同时还为各根节点的共享提供隔离和保护,根节点不能访问操作所分配到的I/O资源之外的其他I/O资源。在多根I/O虚拟化共享系统运行过程中,由于各根节点的负载不均衡,需要对I/O资源进行合理的再分配。对I/O资源的再分配实质是向从属根节点动态插入一个设备功能,或者从一个根节点动态拔除一个设备功能,再将该设备功能插入到另一个根节点的过程。直接I/O虚拟化装置中的虚拟热插拔控制模块,通过模拟PCIe设备热插拔控制操作,能够在不影响其他根节点工作的情况下,实现从根节点动态删除和增加I/O设备功能,即实现I/O设备功能在根节点之间的动态共享。当接收到从某个从属根节点回收设备功能的指令时,虚拟热插拔控制向该从属根节点发起一个指示设备功能拔除的虚拟热插拔事件,对应的根节点接收到该事件,并作出热插拔允许响应,则完成设备功能的回收操作。当接收到向某个根节点分配设备功能的指令时,虚拟热插拔控制向该根节点发起一个指示设备功能插入的虚拟热插拔事件,对应的根节点接收到该事件,并作出热插拔允许响应,则完成设备功能再分配的操作。本发明公开一种用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,包括 下行事务包发送模块,所述下行事务包发送模块用于接收从根节点发来的事务包,通过对事务包的解析和重映射,将事务包分发给I/o虚拟化模块和物理I/O设备;上行事务包接收模块,所述上行事务包接收模块用于接收从I/O设备、I/O虚拟化模块和虚拟热插拔控制模块传来的事务包,通过对事务包的解析和重映射,将事务包发送给根节点;I/O虚拟化模块,所述I/O虚拟化模块通过对物理I/O设备功能的逻辑抽象,建立逻辑虚拟化功能镜像来替代I/o设备功能作为从属根节点的设备占位符,实现I/O设备中各功能被多个根节点独立发现和配置;直接I/O重映射模块,所述直接I/O重映射模块通过硬件重映射的方式,实现设备功能在从属根节点PCIe域和主控制根节点PCIe域之间的ID转换和地址窗口转换,实现I/0设备中各功能被多个根节点直接使用;虚拟热插拔控制模块,所述虚拟热插拔控制模块通过摸拟PCIe热插拔控制操作,完成向根节点动态删除和增加I/O设备功能,实现I/O设备中各功能被多个根节点动态共享。所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,所述下行事务包发送模块包括下行事务包子解析模块,所述下行事务包解析子模块用于接收根节点发来的事务包,并对事务包的根节点和类型进行解析判定,如果是配置包,还要对其配置操作的寄存器进行解析判定;下行事务包重映射子模块,所述下行事务包重映射子模块用于对从属根节点发来的事务包进行ID号转换或者地址转换;下行事务包分发子模块,所述下行事务包分发子模块用于对事务包进行分发处理,如果是主控制根节点发来的配置包同时传递给I/O虚拟化模块和物理I/O设备,如果是从属根节点发来的对配置基址类和非基址类只读寄存器的配置事务包只传递给I/O虚拟化模块,其他事务包只传递给物理I/O设备。所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,所述上行事务包接收模块包括上行事务包解析子模块,所述上行事务包解析子模块用于接收物理I/O设备发来的事务包,对事务包的类型进行解析判定,如果是完成包,将其复制传递给I/o虚拟化模块;上行事务包重映射子模块,所述上行事务包重映射子模块用于对事务包的进行ID号转换;上行事务包调度子模块,所述上行事务包调度子模块用于将从I/O设备、I/O虚拟化模块和虚拟热插拔控制模块传来的事务包调度传给根节点。所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,所述I/O虚拟化模块包括配置事务解析子模块,所述配置事务解析子模块用于接收并解析根节点发来的配置事务包和I/O设备发来的完成包;
配置寄存器备份子模块,所述配置寄存器模块实现基址类和非基址类只读配置寄存器的备份,实现对I/O设备功能的实体抽象;配置事务模拟响应子模块,所述配置事务模拟响应子模块用于替代I/O设备向根节点发送完成事务包,实现对I/O设备功能的行为模拟。本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。
权利要求
1.一种用于多根I/o虚拟化共享系统的直接I/O虚拟化方法,其特征在于,包括 步骤1,通过对物理I/o设备功能的逻辑抽象,建立逻辑虚拟化功能镜像,替代I/O设备功能作为从属根节点的设备占位符,实现I/o设备中各功能被多个根节点独立发现和配置; 步骤2,通过硬件重映射方式,实现设备功能在从属根节点PCIe域和主控制根节点之间的映射,为各根节点在访问操作共享的物理I/O设备时提供直通模式,同时为各根节点的共享提供隔离和保护; 步骤3,通过虚拟PCIe设备热插拔控制操作,能够在不影响根节点其他工作的情况下,完成向根节点动态删除和增加I/O设备功能,实现I/O设备中各功能被多个根节点动态共享。
2.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化方法,其特征在于,所述步骤I逻辑抽象包括 I/O设备功能的实体抽象,所述I/O设备功能的实体抽象,是指对I/O设备中功能的配置空间头的备份,包括对配置空间头中基址类配置寄存器的定义备份和非基址类只读配置寄存器的数据备份; I/o设备功能的行为模拟,所述I/O设备功能的行为模拟,是指对I/O设备中功能的配置响应的模拟。
3.如权利要求2所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化方法,其特征在于,包括 所述基址类配置寄存器,包括通用基址寄存器和扩展ROM基址寄存器; 所述非基址类只读配置寄存器,是指配置空间头中除了基址类寄存器之外的其他只读寄存器。
所述基址类配置寄存器定义备份,指为设备中每个功能存储一份基址类配置寄存器定义,以备从属根节点循环读写配置; 所述非基址类配置只读寄存器数据备份,指存储一份非基址类只读配置寄存器的数据,为设备中所有功能共享,以备从属根节点循环读识别。
4.如权利要求2所述的多根I/O虚拟化共享系统的直接I/O虚拟化方法,其特征在于,所述I/O设备功能的实体抽象还包括 步骤41,系统上电启动、初始化,复位指向基址类寄存器偏移指针为10h,复位指向扩展PCIe配置空间偏移指针为IOOh ;转向步骤42 ; 步骤42,直接I/O虚拟化装置接收主控制根节点发来的配置事务包,接收事务包后转向步骤43 ; 步骤43,提取并记录配置事务包中指示目标设备ID号和寄存器号,然后转向步骤44 ; 步骤44,配置事务包判定,如果配置事务包是读取配置空间头中非基址类寄存器读请求包,设置等待完成包的标识符指示为非基址类只读寄存器读返回;如果是向BAR偏移指针指定的基址类寄存器写全I的写请求包,设置等待完成包的标识符指示为基址类寄存器读返回;如果是读取扩展PCIe配置空间偏移指针指定的寄存器读请求包,设置等待完成包的标识符指示为扩展PCIe配置空间读返回;否则,保持设置等待完成包的标识符为默认初始值。操作完成后转向步骤45;步骤45,接收I/O设备发来的带数据的完成包,接收到事务包后转向步骤46 ; 步骤46,等待完成包的标识符判定,如果当前等待完成包的标识符判定指示为扩展PCIe配置空间读返回,转向步骤47 ;如果指示为基址类寄存器读返回,转向步骤410;如果指示为非基址类只读寄存器读返回,转向步骤411 ;否则,复位等待完成包的标识符,转向步骤42 ; 步骤47,解析完成包数据中的扩展功能ID以及下一个功能指针,如果扩展功能ID指示为SR-IOV扩展功能,转向步骤48 ;否则转向步骤49 ; 步骤48,修改基址类寄存器偏移指针的起始地址,使用扩展PCIe配置空间偏移指针加上第一个VF BAR在SR-IOV扩展功能寄存器组中的固定偏移,修改基址类寄存器偏移指针的起始地址;指示一个SR-IOV设备,并记录完成包中的完成者ID为SR-IOV设备中PF的ID号;操作完成后,转向步骤49; 步骤49,使用步骤47提取的下一个功能指针更新扩展PCIe配置空间偏移指针;操作完成后,复位等待完成包的标识符,转向步骤42 ; 步骤410,解析完成包中数据,备份基址类寄存器定义,并更新基址类寄存器偏移指针指向下一个基址寄存器;如果指示SR-IOV设备的标识符为假,则将该基址类寄存器定义备份到目标设备ID号和基址类寄存器偏移指针对应的寄存器中;如果指示SR-IOV设备的标识符为真,且完成者ID等于SR-IOV中PF的ID,则将该基址类寄存器定义备份到每个设备的基址类寄存器偏移指针对应的寄存器中;否则,不备份该基址类寄存器定义。操作完成后,复位等待完成包的标识符,转向步骤42 ; 步骤411,解析完成包中数据,并存储到由目标寄存器号指示的寄存器中;操作完成后,复位等待完成包的标识符,转向步骤42。
5.如权利要求2所述的多根I/O虚拟化共享系统的直接I/O虚拟化方法,其特征在于,所述I/o设备功能的行为模拟还包括 步骤51,直接I/O虚拟化装置接收从属根节点发来的循环配置事务包,接收事务包后转向步骤52 ; 步骤52,提取并记录配置事务包中指示的寄存器号,然后转向步骤53 ;步骤53,配置寄存器类型判定。如果步骤52中的寄存器号指示为基址类配置寄存器,转向步骤54 ;如果指示为非基址类只读配置寄存器,转向步骤55 ;否则,转向步骤56 ; 步骤54,基址类配置寄存器访问本地处理。如果是配置读请求包,则提取目标设备ID号和寄存器号对应的数据,组成完成包返回给相应的从属根节点;否则,如果是配置写请求包,提取请求包中的数据写存储到目标设备ID号和寄存器号对应的寄存器。操作完成后转向步骤51 ; 步骤55,非基址类配置寄存器访问本地处理。如果是配置读请求包,则提取寄存器号对应的数据,组成完成包返回给相应的从属根节点;否则,如果是配置写请求包,提取请求包中的数据写存储到寄存器号对应的寄存器;操作完成后转向步骤51 ; 步骤56,将事务包透传给物理I/O设备,由物理I/O设备相关功能进行配置响应。如果是配置读请求包,则接收I/O设备发来的完成包返回给相应的从属根节点;否则,如果是配置写请求包,I/O设备不返回任何响应;然后转向步骤51。
6.一种用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,其特征在于,包括下行事务包发送模块,所述下行事务包发送模块用于接收从根节点发来的事务包,通过对事务包的解析和重映射,将事务包分发给I/o虚拟化模块和物理I/O设备; 上行事务包接收模块,所述上行事务包接收模块用于接收从I/o设备、I/O虚拟化模块和虚拟热插拔控制模块传来的事务包,通过对事务包的解析和重映射,将事务包发送给根节点; I/O虚拟化模块,所述I/O虚拟化模块通过对物理I/O设备功能的逻辑抽象,建立逻辑虚拟化功能镜像来替代I/o设备功能作为从属根节点的设备占位符,实现I/O设备中各功能被多个根节点独立发现和配置; 直接I/o重映射模块,所述直接I/O重映射模块通过硬件重映射的方式,实现设备功能在从属根节点PCIe域和主控制根节点PCIe域之间的ID转换和地址窗口转换,实现I/O设备中各功能被多个根节点直接使用; 虚拟热插拔控制模块,所述虚拟热插拔控制模块通过摸拟PCIe热插拔控制操作,完成向根节点动态删除和增加I/O设备功能,实现I/O设备中各功能被多个根节点动态共享。
7.如权利要求6所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,其特征在于,所述下行事务包发送模块包括 下行事务包子解析模块,所述下行事务包解析子模块用于接收根节点发来的事务包,并对事务包的根节点和类型进行解析判定,如果是配置包,还要对其配置操作的寄存器进行解析判定; 下行事务包重映射子模块,所述下行事务包重映射子模块用于对从属根节点发来的事务包进行ID号转换或者地址转换; 下行事务包分发子模块,所述下行事务包分发子模块用于对事务包进行分发处理,如果是主控制根节点发来的配置包同时传递给I/O虚拟化模块和物理I/O设备,如果是从属根节点发来的对配置基址类和非基址类只读寄存器的配置事务包只传递给I/O虚拟化模块,其他事务包只传递给物理I/O设备。
8.如权利要求6所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,其特征在于,所述上行事务包接收模块包括 上行事务包解析子模块,所述上行事务包解析子模块用于接收物理I/O设备发来的事务包,对事务包的类型进行解析判定,如果是完成包,将其复制传递给I/O虚拟化模块;上行事务包重映射子模块,所述上行事务包重映射子模块用于对事务包的进行ID号转换; 上行事务包调度子模块,所述上行事务包调度子模块用于将从I/O设备、I/O虚拟化模块和虚拟热插拔控制模块传来的事务包调度传给根节点。
9.如权利要求6所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化装置,其特征在于,所述I/o虚拟化模块包括 配置事务解析子模块,所述配置事务解析子模块用于接收并解析根节点发来的配置事务包和I/O设备发来的完成包; 配置寄存器备份子模块,所述配置寄存器模块实现基址类和非基址类只读配置寄存器的备份,实现对I/O设备功能的实体抽象; 配置事务模拟响应子模块,所述配置事务模拟响应子模块用于替代I/o设备向根节点发送完成事务包,实现对I/o设备功能的行为 模拟。
全文摘要
本发明公开一种用于多根I/O虚拟化共享系统的直接I/O虚拟化方法和装置,该方法包括步骤1,通过对物理I/O设备功能的逻辑抽象,建立逻辑虚拟化功能镜像,替代I/O设备功能作为从属根节点的设备占位符,实现I/O设备中各功能被多个根节点独立发现和配置;步骤2,通过硬件重映射方式,实现设备功能在从属根节点PCIe域和主控制根节点之间的映射,为各根节点在访问操作共享的物理I/O设备时提供直通模式,同时为各根节点的共享提供隔离和保护;步骤3,通过虚拟PCIe设备热插拔控制操作,能够在不影响根节点其他工作的情况下,完成向根节点动态删除和增加I/O设备功能,实现I/O设备中各功能被多个根节点动态共享。
文档编号G06F9/455GK102819447SQ201210171920
公开日2012年12月12日 申请日期2012年5月29日 优先权日2012年5月29日
发明者曹政, 刘小丽, 张佩珩, 安学军, 孙凝晖, 王展, 苏勇, 刘飞龙 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1