1.一种用于多根I/O虚拟化共享系统的直接I/O虚拟化方法,其特征在于,包括:步骤1,通过对物理I/O设备功能的逻辑抽象,建立逻辑虚拟化功能镜像,替代I/O设备功能作为从属根节点的设备占位符,实现I/O设备中各功能被多个根节点独立发现和配置;步骤2,通过硬件重映射方式,实现设备功能在从属根节点PCIe域和主控制根节点之间的映射,为各根节点在访问操作共享的物理I/O设备时提供直通模式,同时为各根节点的共享提供隔离和保护;步骤3,通过虚拟PCIe设备热插拔控制操作,能够在不影响根节点其他工作的情况下,完成向根节点动态删除和增加I/O设备功能,实现I/O设备中各功能被多个根节点动态共享。
2.如权利要求1所述的用于多根I/O虚拟化共享系统的直接I/O虚拟化方法,其特征在于,所述步骤1逻辑抽象包括: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配置空间偏移指针为100h;转向步骤42;步骤42,直接I/O虚拟化装置接收主控制根节点发来的配置事务包,接收事务包后转向步骤43;步骤43,提取并记录配置事务包中指示目标设备ID号和寄存器号,然后转向步骤44;步骤44,配置事务包判定,如果配置事务包是读取配置空间头中非基址类寄存器读请求包,设置等待完成包的标识符指示为非基址类只读寄存器读返回;如果是向BAR偏移指针指定的基址类寄存器写全1的写请求包,设置等待完成包的标识符指示为基址类寄存器读返回;如果是读取扩展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设备功能的行为模拟。
展开