CN105320628B - 使能单根i/o设备多根共享的适配装置、系统及方法 - Google Patents
使能单根i/o设备多根共享的适配装置、系统及方法 Download PDFInfo
- Publication number
- CN105320628B CN105320628B CN201510751898.0A CN201510751898A CN105320628B CN 105320628 B CN105320628 B CN 105320628B CN 201510751898 A CN201510751898 A CN 201510751898A CN 105320628 B CN105320628 B CN 105320628B
- Authority
- CN
- China
- Prior art keywords
- root node
- equipment
- virtual
- entity
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/387—Information transfer, e.g. on bus using universal interface adapter for adaptation of different data processing systems to different peripheral devices, e.g. protocol converters for incompatible systems, open system
Abstract
本发明提供一种使能单根I/O设备多根共享的适配装置,包括:主机接口,用于耦合实体单根I/O设备到一个主控制根节点PCIe域,将实体单根I/O设备逻辑虚拟化为多个虚拟I/O功能镜像;动态重映射模块,用于建立和维护虚拟I/O功能镜像和实体单根I/O设备间的映射关系;根据所述映射关系,将下行事务包和上行事务包进行重定向;以及I/O接口。本发明还提供了相应的使能单根I/O设备多根共享系统和适配方法。本发明能够使能单根I/O设备被多个根节点共享;对现有的根节点和单根I/O设备是透明的,兼容性好,易于推广;支持虚拟PCIe设备热插拔,便于在I/O设备共享系统中按需分配和回收I/O资源。
Description
技术领域
本发明涉及I/O虚拟化技术,具体地说,本发明涉及一种单根I/O设备多根共享的方法和系统。
背景技术
在传统数据中心或云计算中心中,每个刀片服务器都拥有独立的I/O设备,如网卡、HBA适配器等。然而计算设备与I/O设备的紧密耦合,使得两类设备的扩展同时受到服务器空间的限制。另一方面,当前的网络设备带宽在快速提升:网络设备如Infiniband的HCA卡在2014年将推出最高300Gb/s带宽的产品,以太网的100Gb/s已有验证产品,400Gb/s的规范也在制定之中。如此高性能I/O设备仅依附一台服务器,无疑降低了其利用效率,提高了系统总成本。
众所周知,在传统的服务器中,各个服务器需要单独配置I/O设备。而随着虚拟机技术发展和应用,单个服务器上可以运行多个虚拟机(即VM)以及更多的应用(即APP),随之也需要更多种类和更多数量的I/O设备。在这一背景下,行业标准组织PCI特别兴趣小组(PCI-SIG)先后制定了PCI-SIG Single Root I/O Virtualization(SR-IOV:单根I/O虚拟化)和PCI-SIG Multi-Root I/O Virtualization(MR-IOV:多根I/O虚拟化)协议。目前SR-IOV协议已得到I/O设备厂商的广泛支持,如支持SR-IOV的千兆以太网卡、10G以太网卡、HBA适配器等。但这些兼容SR-IOV协议的I/O设备仅能够被运行在同一宿主机上的不同虚拟机(VM/Guest)所共享,而无法被多个宿主机上运行的若干虚拟机(VM/Guest)所共享。而另一方面,由于MR-IOV协议对原有系统的较大改动(包括对PCIe基本协议、PCIe设备结构和PCIe交换机结构的修改),难以被工业界接受。这就导致目前市场上的大部分I/O设备都是单根I/O设备,即不支持被多个根节点共享的设备,也就是说目前市场上的单根I/O设备无法被多个宿主机上运行的若干虚拟机(VM/Guest)所共享。
因此,当前迫切需要一种使单根I/O设备(不支持被多个根节点共享的设备)能够被多个根节点共享的解决方案。
发明内容
本发明的任务是提供一种使单根I/O设备(不支持被多个根节点共享的设备)能够被多个根节点共享的解决方案。
根据本发明的一个方面,提供了一种使能单根I/O设备多根共享的适配装置,包括:
主机接口,用于耦合实体单根I/O设备到一个主控制根节点PCIe域,将实体单根I/O设备逻辑虚拟化为多个虚拟I/O功能镜像;
动态重映射模块,用于建立和维护虚拟I/O功能镜像和实体单根I/O设备间的映射关系;根据所述映射关系,将用户根节点PCIe域的下行事务包重定向至对应的主控制根节点PCIe域,以及将实体单根I/O设备发送至用户根节点的主控制根节点PCIe域的上行事务包重定向至对应的用户根节点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功能镜像的虚拟配置空间寄存器。
其中,所述主机接口还用于将来自于根节点的下行事务包进行分发处理:将来自主控制根节点的下行事务包给系统控制接口进行处理,将来自于用户根节点的下行事务包分发给虚拟配置空间寄存器进行处理;将来自于系统控制接口的上行事务包向主控制根节点传输,以及将来自于虚拟配置空间寄存器的上行事务包向用户根节点传输。
其中,所述动态重映射模块包括I/O重映射模块,用于进行事务包在用户根节点PCIe域和主控制根节点PCIe域之间的重映射;以及虚拟热插拔模块,用于在不影响根节点其他工作的情况下,实现向根节点动态删除或增加I/O设备功能。
其中,所述适配装置支持PCIe协议,所述主机接口、动态重映射模块和I/O接口均在PCIe协议的事务层实现。
根据本发明的另一方面,还提供了一种使能单根I/O设备多根共享的系统,包括:主控制根节点、至少一个用户根节点、权利要求1~6中任意一项所述的适配装置,连接所述主控制根节点、至少一个用户根节点,以及所述适配装置的PCIe互连控制系统,以及与所述适配装置连接的实体单根I/O设备。
根据本发明的又一个方面,还提供了一种使能单根I/O设备多根共享的适配方法,包括下列步骤:
1)耦合实体单根I/O设备到一个主控制根节点PCIe域,虚拟化I/O设备建立多个逻辑虚拟化功能镜像;
2)建立和维护虚拟I/O功能镜像和实体单根I/O设备间的映射关系;
3)使至少一个用于连接用户根节点与所述虚拟I/O功能镜像连接,将所述虚拟I/O功能镜像的虚拟配置寄存器资源和虚拟物理寄存器资源内存映射至所述用户根节点;
4)根据所述映射关系,将用户根节点PCIe域的下行事务包重定向至对应的主控制根节点PCIe域,以及将实体单根I/O设备发送至用户根节点的主控制根节点PCIe域的上行事务包重定向至对应的用户根节点PCIe域;将重定向后的下行事务包发送给实体单根I/O设备,将重定向后的上行事务包发送给相应的用户根节点。
其中,所述步骤1)包括下列子步骤:
11)使主控制根节点与实体单根I/O设备连接,将实体单根I/O设备的配置寄存器资源和物理寄存器资源内存映射至所述主控制根节点;
12)提供至少一个用于连接用户根节点的虚拟I/O功能镜像,所述虚拟I/O功能镜像是对I/O设备功能的实体抽象,并能够进行I/O设备功能的行为模拟。
与现有技术相比,本发明具有下列技术效果:
1、本发明能够使能单根I/O设备被多个根节点共享。
2、本发明能够支持任意数目的根节点共享任意数目的单根I/O设备。
3、本发明能够最大程度地提高I/O资源的利用效率,从而降低系统成本。
4、本发明对现有的根节点(例如服务器)和单根I/O设备是透明的,不需要对现有的根节点和单根I/O设备进行改造,兼容性好,易于推广。
5、本发明能够支持虚拟PCIe设备热插拔,便于在I/O设备共享系统中按需分配和回收I/O资源。
附图说明
以下,结合附图来详细说明本发明的实施例,其中:
图1示出了根据本发明的一个实施例所提供的单根I/O设备多根共享系统的示意图;
图2示出了根据本发明的另一个实施例所提供的单根I/O设备多根共享系统的示意图;
图3示出了本实施例的I/O多根共享适配装置及其与根节点和单根I/O设备的逻辑连接关系;
图4示出了一种基于图3的I/O设备多根共享适配装置的单根I/O设备多根共享方法;
图5示出了本发明一个实施例中的虚拟I/O功能镜像vRID和实体I/O设备功能mRID的映射表,以及每个虚拟I/O功能物理资源与实体I/O功能物理资源映射表的示例;
图6示出了本发明一个实施例中虚拟I/O设备镜像与实体单根I/O设备的物理资源的映射关系;
图7示出了本发明一个实施例中多个根节点共享一个实体单根I/O设备的单一DMA缓冲区的示意图;
图8示出了本发明一个实施例中的一种具有全局标识的多根共享系统。
具体实施方式
为了使本发明的目的、技术方案更加清楚明白,以下结合附图及实施例对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1示出了根据本发明的一个实施例所提供的单根I/O设备多根共享系统的示意图。参考图1,该共享系统包括:多个根节点,PCIe互连控制器,与PCIe互连控制器通过PCIe连接的I/O多根共享适配装置,以及与I/O多根共享适配装置连接的多个单根I/O设备。其中,根节点用RN标识,它指具有单个根复合体(Root Complex,根复合体即PCIe根控制器,它通常集成在CPU中)的物理服务器,通常地,根节点也可以被称为主机。一个根节点上可以运行多个虚拟机(即VM),虚拟机上可以运行多个应用(即APP)。
单根I/O设备是指被单个根节点识别、配置和使用的I/O设备,它包括各种网络I/O设备(如以太网卡NIC)、存储I/O设备(如sata主机适配器HBA)以及加速I/O(如GPU)等。互连控制器是兼容PCIe协议的互连系统,它通过多个PCIe接口连接多个根节点和多个I/O多根共享适配装置。
I/O多根共享适配装置是为了让单根I/O设备能够被多个根节点共享的适配装置。众所周知,传统I/O设备功能在根节点PCIe域的系统路由ID号(即RID号,为便于描述,下文中将路由ID号称为RID号)由总线号/设备号/功能号(Bus/Device/Function ID,简称BDF)来表示,并且,传统I/O设备功能通过内存地址映射(即MMIO,MMIO是Memory Mapped I/O的缩写)到根节点PCIe域的内存空间。从根节点的操作系统的视角看,I/O设备就是一组可以发现、配置和访问的寄存器资源,这些寄存器资源包括通过系统RID访问的配置寄存器资源(Config.Reg)以及通过内存地址ADDR访问的物理寄存器资源(PhysicalReg)。其中,配置寄存器资源即PCIe配置空间,包括设备功能标识,BAR地址以及中断等,其中BAR地址是指写到BAR寄存器上的通过内存地址映射到根节点PCIe域的内存空间的首地址,并且,BAR地址还能够通过低位不可写的方式定义内存大小。通常,根节点先获取内存地址映射所需的内存空间的大小,然后给其分配内存空间,再把首地址写到BAR寄存器上。物理寄存器资源是一组用于实现I/O设备特定功能服务的资源集,如传递根节点指令的工作队列、中断资源以及DMA读写传输数据的数据缓冲区等,这些物理寄存器资源通过配置空间的BAR地址内存映射到根节点的内存空间,这样根节点对本地内存空间的操作就会作用于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/O资源以虚拟I/O功能为单位按需分配给共享系统的各个根节点使用。并且各根节点与分配到的I/O资源具有隔离的逻辑连接(隔离的逻辑连接是指:对于任意一个根节点,该根节点和其分配到I/O资源间的连接与其它根节点和相应分配到的I/O资源间的连接是相互独立的)。这样,多个根节点可以共享一个I/O设备;一个根节点也可动态地配置不同的I/O资源(比如同时配置网络I/O、存储适配器HBA以及加速卡等等),与不同的I/O资源都建立隔离的逻辑连接。
图2示出了根据本发明的另一个实施例所提供的单根I/O设备多根共享系统的示意图。与图1的实施例相比,它将互连控制器替换为由多个互连控制器组成的互连网络,这样能够增加PCIe接口,从而方便更多的根节点和单根I/O设备接入所述共享系统。
下面进一步介绍I/O多根共享适配装置的各项技术细节。这个作为示例的I/O多根共享适配装置既可以应用于图1所示的共享系统中,也可以应用于图2所示的共享系统中。
根据本发明的一个实施例,I/O多根共享适配装置基于PCIe协议构建。众所周知,PCIe协议包括三个层次,即物理层、数据链路层和事务层。根节点和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设备接口连接,将适配装置的主机接口同接入PCIe互连子系统(PCIe互连控制器或者PCIe互连网络)的一个主控制根节点连接。该主控制根节点可以是预先设定的接入PCIe互连子系统特定接口的根节点,也可以是第一个发现所接入单根I/O设备的根节点,还可以是其它情况,只要保证主控制根节点在共享系统中是唯一的即可。
图3示出了本实施例的I/O多根共享适配装置及其与根节点和单根I/O设备的逻辑连接关系。为使图面更加简洁,图3中省略了根节点与I/O多根共享适配装置之间的互连控制器或互联网络。参考图3,本实施例的I/O多根共享适配装置包括主机接口、动态I/O重映射模块和I/O接口三个部分,这三个部分都在PCIe协议的事务层实现。
其中,主机接口用于实现与多个根节点的逻辑连接,它包括系统控制接口以及虚拟配置空间寄存器。其中系统控制接口用于与主控制根节点连接,为主控制根节点提供控制接口并实现与主控制根节点的通信,主控制根节点通过该接口可配置和控制所述I/O多根共享适配装置,如下发I/O资源配置指令等;虚拟配置空间寄存器用于向多个用户根节点透明地呈现多个虚拟I/O功能镜像(vFun)。所述主机接口还用于将来自于主控制根节点的下行事务包分发给系统控制接口进行处理,将来自于用户根节点的下行事务包分发给虚拟配置空间寄存器进行处理;将来自于系统控制接口的上行事务包向主控制根节点传输,以及将来自于虚拟配置空间寄存器的上行事务包向用户根节点传输。
动态重映射模块包括I/O重映射模块和虚拟热插拔模块。I/O重映射模块用于进行事务包在用户根节点PCIe域和主控制根节点PCIe域之间的重映射,并为各根节点对I/O的共享提供隔离和保护,在这个重映射机制下,根节点能且仅能访问所分配到的I/O资源。虚拟热插拔模块则用于在不影响根节点其他工作的情况下,实现向根节点动态删除和增加I/O设备的功能。
I/O接口模块用于与I/O设备连接,并将多个共享根节点发来的I/O事务包按需缓存,然后有序地调度发送给I/O设备,避免I/O访问冲突而引起设备混乱甚至系统崩溃。
进一步地,图4示出了一种基于图3的I/O设备多根共享适配装置的单根I/O设备多根共享方法,它包括下列步骤:
步骤1:耦合单根I/O设备到一个主控制根节点PCIe域,虚拟化I/O设备建立多个逻辑虚拟化功能镜像。
本步骤包括下列子步骤:
步骤11:首先将实体单根I/O设备耦合至唯一的主控制根节点。即,首先将实体单根I/O设备与适配装置的I/O设备接口连接,将适配装置的主机接口同接入PCIe互连子系统(PCIe互连控制器或者PCIe互连网络)的一个主控制根节点连接。
步骤12:主控制根节点扫描发现单根I/O设备后,会为所发现的单根I/O设备配置RID,为便于描述,本文中将该主控制根节点配置的RID记为mRID。单根I/O设备接收到主控制根节点配置的mRID后,将本地的配置寄存器资源和物理寄存器资源映射(该映射为MMIO映射,下文中也称为内存映射)到主控制根节点的内存空间,主控制根节点再返回所映射的内存空间的首地址,该首地址就是BAR地址,记为mADDR。
步骤13:在主控制根节点扫描单根I/O设备过程中,共享适配装置通过监听主控制根节点和单根I/O设备间的通信,记录下mRID和mADDR,同时建立多个虚拟I/O功能镜像。虚拟I/O功能镜像是对I/O设备功能的实体抽象,并能够进行I/O设备功能的行为模拟,使得根节点和虚拟I/O功能镜像的通信与它和实体I/O功能的通信一样。
其中,对I/O设备功能的实体抽象,是指监听主控制根节点对单根I/O设备配置空间寄存器扫描过程中的访问及该单根I/O设备的响应,进而建立虚拟的配置空间,形成虚拟功能镜像。每个虚拟功能镜像都有一个虚拟路由ID号,记为vRID。在一个例子中,vRID从0开始编号。每个虚拟功能镜像都对应一份虚拟的配置空间。
I/O设备功能的行为模拟,是指对I/O设备功能中的虚拟配置寄存器的访问进行模拟响应。多根共享时,由虚拟功能镜像替代实体I/O设备功能作为用户根节点的设备占位符,通过透传或者模拟响应向用户根节点呈现一个虚拟的I/O设备。虚拟功能镜像对用户根节点完全透明。用户根节点认为自己拥有一个真实的I/O节点,使用原生的设备驱动使用I/O节点,这样就能够实现I/O设备功能被多个根节点独立发现和配置。
步骤2:虚拟化虚拟I/O功能镜像的物理资源,建立和维护虚拟I/O功能镜像和实体单根I/O设备间的映射关系。
如前文所述,I/O设备功能就是一组可以发现、配置和访问的寄存器资源,包括通过内存地址ADDR访问的物理寄存器资源,如传递根节点指令的工作队列、中断资源以及DMA读写传输数据的数据缓冲区等,这些物理寄存器资源通过配置空间的BAR地址内存映射到根节点的内存空间,实现根节点和I/O设备间通信和数据传输的I/O通道。虚拟化I/O功能镜像的物理资源,就是为各虚拟I/O功能镜像实现一组寄存器,寄存器配置的值分别指明了实体I/O功能所包含的I/O资源(如工作队列、DMA缓冲区等)的内存偏移,以及各虚拟I/O功能镜像分配到的物理I/O资源的内存偏移。
建立和维护虚拟I/O功能镜像和实体单根I/O设备间的映射关系包括:建立和维护
虚拟I/O功能镜像vRID和实体I/O设备功能mRID的映射表(vRID table)以及每个虚拟I/O功
能物理资源与实体I/O功能物理资源映射表(vPhy tables)。图5示出了这两种映射表的示
例。对于单功能实体I/O设备来说,所有虚拟I/O功能镜像都映射到实体I/O设备的同一个功
能;对于包含多个功能的实体I/O设备,各虚拟I/O功能镜像可通过配置映射到实体I/O设备
的多个不同功能上。对于物理资源的映射,可定义物理资源映射表中的索引0表示工作队列
的内存偏移、索引1表示DMA缓冲区的内存偏移、索引2表示中断资源的内存偏移等。
下面以工作队列这种物理资源为例对物理资源的映射进行详细说明。假设接入共享系统的实体单根I/O设备是一个单功能的NVMe存储设备,图6示出了虚拟I/O设备镜像与实体单根I/O设备的物理资源的映射关系。如图6所示,该NVMe存储设备包含多个工作队列,这些工作队列由Q0、Q1、Q3等表示。每个虚拟I/O功能镜像对应的虚拟工作队列寄存器(即物理资源重映射表中索引0的表项)用vQ0表示。配置虚拟I/O功能镜像vFUN1的虚拟工作队列寄存器vQ0的偏移地址为Q0的偏移地址,配置虚拟I/O功能镜像vFUN3的虚拟工作队列寄存器vQ0的偏移地址为Q3的偏移地址,这样就建立起各虚拟I/O功能镜像的虚拟工作队列与实体I/O设备的工作队列寄存器的映射关系。假设共享主机M1、M3分别将虚拟I/O功能镜像vFUN1、vFUN3分别配置给用户根节点RN1、RN3,当RN1、RN3通过内存地址访问工作队列时,下行事务包将被分别重定向到实体I/O功能的工作队列寄存器Q0和Q3,进而实现多个用户根节点共享一个实体I/O设备的物理资源。
进一步地,图7示出了一个实施例中多个根节点共享一个实体单根I/O设备的单一DMA缓冲区的示意图。由于共享单一DMA缓冲区,所以多个虚拟I/O功能镜像对应的虚拟DMA资源会映射到同一个实体I/O的同一DMA资源。
上述步骤1~2实际上也可以视为I/O设备多根共享适配装置的初始化过程。初始化后,一个实体单根I/O设备就虚拟出了多个虚拟I/O功能镜像,每个虚拟单根I/O设备都具有独立的标识ID,它们取代了实体单根I/O设备分别作为各共享根节点的设备占位符;并且,每个虚拟单根I/O设备划分有独立的虚拟物理资源,被划分的虚拟物理资源与总的实体I/O设备中的物理资源具有明确的映射关系,使得各个虚拟单根I/O设备具备了处理和用户根节点间通信事务的基础条件。其中,通信事务就是指根节点和I/O设备间往来的I/O访问和响应,它通常由事务包所承载。
步骤3:创建单根I/O资源在主控制根节点和用户根节点PCIe域中的RID映射关系和MMIO内存地址映射关系。本实施例中,I/O多根共享适配装置实现了虚拟PCIe设备热插拔控制,以便在不影响根节点其他工作的情况下,实现向根节点动态分配和回收I/O资源。
对I/O资源的动态分配实质是向用户根节点动态插入一个虚拟的I/O功能镜像vFUN,或者从一个用户根节点动态拔除一个虚拟的I/O功能镜像vFUN的过程。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功能镜像的vRID,根节点标识xRNID,以及该虚拟I/O功能镜像在所述根节点PCIe域的xRID。其中,x可能是m,也可能是u,mRNID表示主控制根节点的ID,uRNID表示用户根节点的ID。如果根节点标识xRNID代表的是用户根节点,则所述资源配置指令是一个I/O设备资源分配指令;如果根节点标识xRNID代表的是主控制根节点,则所述资源配置指令是一个I/O设备资源回收指令。
通过虚拟PCIe热插拔,虚拟I/O功能镜像替代实体I/O设备的I/O功能,作为用户根节点的设备占位符,由虚拟I/O功能镜像向用户根节点模拟一个虚拟的I/O设备配置空间,接受用户根节点的发现和初始化配置,并通过虚拟配置空间中的BAR寄存器映射到用户根节点的内存空间,从而建立起用户根节点和虚拟I/O功能镜像之间的指令、数据及中断等事务的传递通道。
然而,虚拟I/O功能镜像本身不具备指令提取和执行功能,因此,虚拟I/O功能镜像需要将携带指令的事务包传递给实体I/O设备,由实体I/O设备进行指令提取和执行。由于实体单根I/O设备能且仅能识别和响应使用主控制根节点PCIe域的mRID及mADDR的访问事务,因此在资源配置过程中还要涉及到:虚拟I/O功能镜像在用户根节点PCIe域与主控制根节点PCIe域间的映射。这样,各用户根节点通过各自PCIe域的MMIO地址访问相应的虚拟I/O功能镜像的物理资源寄存器时,都能映射到实体单根I/O设备能识别的内存地址,从而被实体单根I/O设备识别和响应。
虚拟I/O功能镜像在用户根节点PCIe域与主控制根节点PCIe域间的映射包括两种:一种是索引配置空间的系统RID映射,一种是索引物理资源寄存器的MMIO内存地址ADDR映射。在一个实施例中,系统使用标记法来实现虚拟I/O功能镜像在各用户根节点PCIe域的系统ID和MMIO内存地址ADDR的区分和映射。
图8示出了一种具有全局标识的多根共享系统,该共享系统中,每个根节点都具有一个根节点标识xRNID,每个根节点对应的内存空间都有一个全局标识前缀G_x。因此每个虚拟I/O功能镜像对应的ID由该虚拟I/O功能镜像分配到的用户根节点标识xRNID和该虚拟I/O功能镜像在其所分配到的用户根节点PCIe域的RID组成。每个根节点与虚拟I/O功能镜像通信交互的事务包中的内存地址都具有全局标识前缀G_x,各个根节点对应的G_x各不相同。这样各虚拟I/O功能镜像分配到各用户根节点,都将具有不同的系统ID和MMIO内存地址ADDR,进而为多个根节点共享单根I/O设备提供了隔离和重映射的条件。
其中,系统RID映射通过RID table和vRID table这两个映射表实现。RID table记录了vRID和所属根节点xRNID的关系,vRID table记录vRID和mRID的关系。vRID table的建立方法已在步骤2中说明。RID table建立方法如下:
步骤31:初始化RID table,RID table索引对应了虚拟I/O功能镜像的虚拟ID,即vRID,索引对应的表项存储的是主控制根节点标识mRNID和该索引对应的vRID的组合项;
步骤32:判定接收到的I/O设备资源配置指令包,如果是I/O设备资源分配指令,转向步骤3);如果是I/O设备资源回收指令,转向步骤34;
步骤33:提取指令中携带的根节点标识xRNID以及用户根节点PCIe域的xRID存储到指令中vRID索引的表项;
步骤34:提取指令中携带的vRID,存储主控制根节点mRNID和所述vRID到所述vRID对应的表项,从而删除该mRID到在先用户根节点的映射关系。
物理资源ADDR映射由uADDR table、vRID table及mADDR table实现。其中在主控制根节点扫描配置物理I/O功能过程中,mADDR table记录实体I/O功能的mRID和其在主控制根节点PCIe域mAADR的映射关系;在用户根节点扫描配置虚拟I/O功能镜像过程中,uADDRtable记录了虚拟I/O功能镜像的vRID和其在用户根节点PCIe域uADDR的映射关系。这样,通过uADDR→vRID→mRID→mADDR可以实现共享I/O物理资源在用户根节点PCIe域和主控制根节点PCIe域的映射。
步骤4:根据单根I/O资源在主控制根节点和用户根节点PCIe域中的RID映射关系和MMIO内存地址映射关系,对I/O访问事务包进行重映射,完成事务包的调度和分发。本步骤中,所述的重映射包括下行事务的调度重映射和上行事务的分发重映射,为各根节点在访问操作共享的物理I/O设备时提供直通模式,同时为各根节点的共享提供隔离和保护,实现多个根节点对I/O设备直接的隔离共享访问。
用户根节点对各个虚拟I/O功能镜像发起访问,最终将重映射到实体I/O设备功能,由实体I/O设备做出响应。根节点和I/O设备间的访问事务分为由根节点至I/O设备的下行事务,及由I/O设备至根节点的上行事务。其中,下行事务包括根节点通过RID对配置空间寄存器的请求事务、通过MMIO地址对物理资源寄存器的请求事务,以及根节点对I/O设备功能发来的请求事务的返回事务;上行事务包括I/O设备功能响应根节点下行请求事务的返回事务,I/O设备功能向根节点发起的中断事务以及对根节点发起的内存直接接入访问的DMA事务等。
在如图8所示的一个实施例中,一个实体I/O设备只包含一个I/O功能,多个虚拟I/O功能镜像将映射到同一个实体I/O功能。此时,可将下行事务调度重映射分为两类。一类是独立的一次性访问事务,包括通过RID对配置空间寄存器的请求事务(DwnStram ConfigRegreq)以及根节点对I/O设备功能发来的请求事务的返回事务(DwnStram cpl)。这类事务可直接通过RID重映射传递给物理I/O设备进行执行。另一类是非一次性访问事务,包括通过MMIO内存地址对物理资源寄存器的请求事务(DwnStram PhysicalReg req)。该类事务如DMA操作,一次DMA操作可能引发多次内存读写请求事务,如果一个用户根节点的一次DMA操作未完成,就将另一个用户根节点的DMA操作事务直接重映射给物理I/O设备功能进行执行,则会影响前序用户根节点的DMA操作。因此对于通过MMIO地址对物理资源寄存器的请求事务(DwnStram PhysicalReg req)进行地址重映射后需进行缓存排队调度再传递给物理I/O设备。图6所示的一个实施例中,对于各虚拟I/O功能镜像分配到的用户根节点(如RN1、RN3)发起的访问,如果识别出该访问事务包是DMA操作,那么将被重定向到同一实体I/O功能中的DMA缓冲区。此时需要对多个根节点的发起的访问进行隔离缓存并调度,分时复用该DMA缓冲区。
上行事务分发重映射也分为两类。一类是I/O设备功能响应根节点请求事务的返回事务(Upstream cpl),另一类是I/O设备功能向根节点发起的事务,包括I/O设备向根节点发起的中断事件包(Upstream Int req)以及对执行DMA操作向根节点发起内存直接接入访问的DMA事务(UpStream DMA req)等。在一个实施例中,使用标记法来实现虚拟I/O功能镜像在各用户根节点PCIe域的RID和MMIO内存地址的区分和映射。因此对于对上行事务的分发重映射可以根据根节点标识RNID和全局标识的地址前缀G_x进行区分重映射和分发。其中,返回事务(Upstream cpl)通过根节点标识分发给相应的根节点,中断事件包根据内存地址的全局标识G_x分发给相应的根节点。通过上述I/O访问重映射,可为各根节点在访问操作共享的物理I/O设备时提供直通模式,同时为各根节点的共享提供隔离和保护,实现多个根节点对I/O设备直接的隔离的共享访问。
以上结合附图和实施例对本发明进行详细描述。应该注意到并理解,在不脱离后附的权利要求所要求的本发明的精神和范围的情况下,能够对上述详细描述的本发明做出各种修改和改进。因此,要求保护的技术方案的范围不受所给出的任何特定示范教导的限制。
Claims (10)
1.一种使能单根I/O设备多根共享的适配装置,包括:
主机接口,用于耦合实体单根I/O设备到一个主控制根节点PCIe域,将实体单根I/O设备逻辑虚拟化为多个虚拟I/O功能镜像;
动态重映射模块,用于建立和维护虚拟I/O功能镜像和实体单根I/O设备间的映射关系;根据所述映射关系,将用户根节点PCIe域的下行事务包重定向至对应的主控制根节点PCIe域,以及将实体单根I/O设备要发送至用户根节点的上行事务包从主控制根节点PCIe域重定向至对应的用户根节点PCIe域;以及
I/O接口,用于与实体单根I/O设备连接。
2.根据权利要求1所述的适配装置,其特征在于,所述主机接口还用于提供主控制根节点控制接口,主控制根节点通过该接口可配置及控制所述适配装置;以及提供至少一个用于连接用户根节点的虚拟I/O功能镜像,所述虚拟I/O功能镜像是对I/O设备功能的实体抽象,并能够进行I/O设备功能的行为模拟。
3.根据权利要求1所述的适配装置,其特征在于,所述动态重映射模块中,在建立和维护虚拟I/O功能镜像和实体单根I/O设备间的映射关系时,允许多个虚拟I/O功能镜像复用实体单根I/O设备的同一物理资源;
所述I/O接口还用于将多个用户根节点发来的事务包按需缓存,然后有序地调度发送给实体单根I/O设备,以避免对应于实体单根I/O设备的同一物理资源的来自于不同根节点的多个事务包引发I/O访问冲突。
4.根据权利要求2所述的适配装置,其特征在于,所述主机接口包括用于连接主控制根节点的系统控制接口,用于向多个用户根节点透明地呈现多个虚拟I/O功能镜像的虚拟配置空间寄存器。
5.根据权利要求4所述的适配装置,其特征在于,所述主机接口还用于将来自于根节点的下行事务包进行分发处理:将来自主控制根节点的下行事务包给系统控制接口进行处理,将来自于用户根节点的下行事务包分发给虚拟配置空间寄存器进行处理;将来自于系统控制接口的上行事务包向主控制根节点传输,以及将来自于虚拟配置空间寄存器的上行事务包向用户根节点传输。
6.根据权利要求1所述的适配装置,其特征在于,所述动态重映射模块包括I/O重映射模块,用于进行事务包在用户根节点PCIe域和主控制根节点PCIe域之间的重映射;以及虚拟热插拔模块,用于在不影响根节点其他工作的情况下,实现向根节点动态删除或增加I/O设备功能。
7.根据权利要求6所述的适配装置,其特征在于,所述适配装置支持PCIe协议,所述主机接口、动态重映射模块和I/O接口均在PCIe协议的事务层实现。
8.一种使能单根I/O设备多根共享的系统,包括:主控制根节点、至少一个用户根节点、权利要求1~6中任意一项所述的适配装置,连接所述主控制根节点、至少一个用户根节点以及所述适配装置的PCIe互连控制系统,以及与所述适配装置连接的实体单根I/O设备。
9.一种基于权利要求8所述的使能单根I/O设备多根共享的系统的适配方法,包括下列步骤:
1)耦合实体单根I/O设备到一个主控制根节点PCIe域,虚拟化I/O设备建立多个逻辑虚拟化功能镜像;
2)建立和维护虚拟I/O功能镜像和实体单根I/O设备间的映射关系;
3)使至少一个用于连接用户根节点与所述虚拟I/O功能镜像连接,将所述虚拟I/O功能镜像的虚拟配置寄存器资源和虚拟物理寄存器资源内存映射至所述用户根节点;
4)根据所述映射关系,将用户根节点PCIe域的下行事务包重定向至对应的主控制根节点PCIe域,以及将实体单根I/O设备要发送至用户根节点的上行事务包从主控制根节点PCIe域重定向至对应的用户根节点PCIe域;将重定向后的下行事务包发送给实体单根I/O设备,将重定向后的上行事务包发送给相应的用户根节点。
10.根据权利要求9所述的适配方法,其特征在于,所述步骤1)包括下列子步骤:
11)使主控制根节点与实体单根I/O设备连接,将实体单根I/O设备的配置寄存器资源和物理寄存器资源内存映射至所述主控制根节点;
12)提供至少一个用于连接用户根节点的虚拟I/O功能镜像,所述虚拟I/O功能镜像是对I/O设备功能的实体抽象,并能够进行I/O设备功能的行为模拟。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510751898.0A CN105320628B (zh) | 2015-11-06 | 2015-11-06 | 使能单根i/o设备多根共享的适配装置、系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510751898.0A CN105320628B (zh) | 2015-11-06 | 2015-11-06 | 使能单根i/o设备多根共享的适配装置、系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105320628A CN105320628A (zh) | 2016-02-10 |
CN105320628B true CN105320628B (zh) | 2018-11-06 |
Family
ID=55248036
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510751898.0A Active CN105320628B (zh) | 2015-11-06 | 2015-11-06 | 使能单根i/o设备多根共享的适配装置、系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105320628B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112347012A (zh) * | 2016-06-20 | 2021-02-09 | 北京忆芯科技有限公司 | 支持SR-IOV的NVMe控制器及方法 |
CN107229590B (zh) * | 2017-06-26 | 2021-06-18 | 郑州云海信息技术有限公司 | 一种插拔物理网卡时实现系统稳定性的方法及系统 |
CN109240841B (zh) * | 2018-07-02 | 2021-12-14 | 广东睿江云计算股份有限公司 | 一种联合文件系统故障发现与隔离方法及装置 |
CN110865960B (zh) * | 2018-08-28 | 2022-07-22 | 上海忆芯实业有限公司 | 在网络上模拟PCIe总线 |
CN109144672A (zh) * | 2018-09-07 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种分配PCIe设备的方法、系统及相关组件 |
CN111158849A (zh) * | 2019-12-09 | 2020-05-15 | 中国船舶重工集团公司第七一六研究所 | 支持虚拟机共享io设备的多机计算装置及其io设备共享方法 |
CN113296884B (zh) * | 2021-02-26 | 2022-04-22 | 阿里巴巴集团控股有限公司 | 虚拟化方法、装置、电子设备、介质及资源虚拟化系统 |
CN112988272A (zh) * | 2021-03-22 | 2021-06-18 | 成都申威科技有限责任公司 | 一种在uboot中支持多路pcie rc的方法、装置及存储介质 |
CN113111025B (zh) * | 2021-06-10 | 2021-09-24 | 深圳市科力锐科技有限公司 | Pci设备映射方法、装置、设备及存储介质 |
CN113986802A (zh) * | 2021-09-30 | 2022-01-28 | 山东云海国创云计算装备产业创新中心有限公司 | 一种PCIe互联设备及系统 |
CN114185650B (zh) * | 2021-12-14 | 2023-07-25 | 平安壹账通云科技(深圳)有限公司 | Linux系统下识别SCSI设备的方法、系统、设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW495672B (en) * | 2000-08-01 | 2002-07-21 | Shiu Han | USB wireless signal adapter and the control method thereof |
CN102707991B (zh) * | 2012-05-17 | 2016-03-30 | 中国科学院计算技术研究所 | 多根i/o虚拟化共享方法和系统 |
CN203911951U (zh) * | 2014-06-16 | 2014-10-29 | 上海永峻信息科技有限公司 | 一种设备自动标识系统 |
-
2015
- 2015-11-06 CN CN201510751898.0A patent/CN105320628B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN105320628A (zh) | 2016-02-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105320628B (zh) | 使能单根i/o设备多根共享的适配装置、系统及方法 | |
Kim et al. | {FreeFlow}: Software-based Virtual {RDMA} Networking for Containerized Clouds | |
US10152441B2 (en) | Host bus access by add-on devices via a network interface controller | |
CN104142849B (zh) | 多主机单根输入/输出虚拟化虚拟功能共享的方法及系统 | |
Egi et al. | Towards high performance virtual routers on commodity hardware | |
US9742671B2 (en) | Switching method | |
JP5362980B2 (ja) | データ処理システム内で第1のホスト・システムと第2のホスト・システムとの間で通信するための方法、プログラム、およびシステム(ソケット接続および共用メモリを使用するホスト・システム間の通信のためのシステムおよび方法) | |
CN102650976B (zh) | 一种支持单根io虚拟化用户级接口控制装置及其方法 | |
JP5763873B2 (ja) | データ処理システムの複数のルート複合体間の通信のために共用メモリを初期設定するための方法、コンピュータ・プログラム、およびデータ処理システム | |
US9875208B2 (en) | Method to use PCIe device resources by using unmodified PCIe device drivers on CPUs in a PCIe fabric with commodity PCI switches | |
US8537706B2 (en) | Preserving traffic class priority QoS with self-virtualizing input/output device | |
US8316377B2 (en) | Sharing legacy devices in a multi-host environment | |
US9996484B1 (en) | Hardware acceleration for software emulation of PCI express compliant devices | |
CN102722458B (zh) | 一种用于多根共享系统的i/o重映射方法和装置 | |
WO2017066944A1 (zh) | 一种存储设备访问方法、装置和系统 | |
US8972611B2 (en) | Multi-server consolidated input/output (IO) device | |
CN102790777B (zh) | 网络接口适配器注册方法及驱动设备、服务器 | |
CN102707991A (zh) | 多根i/o 虚拟化共享方法和系统 | |
EP4053706A1 (en) | Cross address-space bridging | |
CN110636139B (zh) | 一种云负载均衡的优化方法及系统 | |
Tu et al. | Secure I/O device sharing among virtual machines on multiple hosts | |
US11086801B1 (en) | Dynamic resource management of network device | |
CN113312143A (zh) | 云计算系统、命令处理方法及虚拟化仿真装置 | |
US10261935B1 (en) | Monitoring excessive use of a peripheral device | |
KR20210000268A (ko) | 경량 브릿지, 이를 포함하는 물품 및 이를 이용한 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |