首页 / 专利库 / 软件 / 虚拟机迁移 / 在可扩展I/O虚拟化(S-IOV)架构中的虚拟设备的实时迁移

在可扩展I/O虚拟化(S-IOV)架构中的虚拟设备的实时迁移

阅读:784发布:2020-05-12

专利汇可以提供在可扩展I/O虚拟化(S-IOV)架构中的虚拟设备的实时迁移专利检索,专利查询,专利分析的服务。并且示例包括一种通过以下操作完成实时迁移虚拟设备的方法:在 虚拟机 中创建虚拟设备;为虚拟设备创建第一 接口 和第二接口;通过第一接口传输数据;检测虚拟设备与虚拟机的断连;将针对虚拟设备的数据传输从第一接口切换到第二接口;检测虚拟设备与虚拟机的重新连接;以及将针对虚拟设备的数据传输从第二接口切换到第一接口。,下面是在可扩展I/O虚拟化(S-IOV)架构中的虚拟设备的实时迁移专利的具体信息内容。

1.一种方法,包括:
虚拟机中创建虚拟设备;
为所述虚拟设备创建第一接口和第二接口;
通过所述第一接口传输数据;
检测所述虚拟设备与所述虚拟机的断连;
将针对所述虚拟设备的数据传输从所述第一接口切换到所述第二接口;
检测所述虚拟设备与所述虚拟机的重新连接;以及
将针对所述虚拟设备的数据传输从所述第二接口切换到所述第一接口。
2.根据权利要求1所述的方法,其中所述第一接口包括快速路径接口。
3.根据权利要求1所述的方法,其中所述第二接口包括模拟接口。
4.根据权利要求1所述的方法,包括在将针对所述虚拟设备的数据传输从所述第一接口切换到所述第二接口之后,执行所述虚拟机从第一服务器到第二服务器的实时迁移。
5.根据权利要求4所述的方法,包括在所述虚拟机从所述第一服务器到所述第二服务器的成功实时迁移之后,检测所述虚拟设备与所述虚拟机的所述重新连接。
6.根据权利要求1所述的方法,其中检测所述断连包括捕捉触发所述虚拟设备从所述虚拟机的热拔出的中断。
7.根据权利要求1所述的方法,其中检测所述重新连接包括捕捉由所述虚拟设备向所述虚拟机的热添加触发的中断。
8.根据权利要求1所述的方法,其中所述第一接口和所述第二接口在所述虚拟设备与物理I/O功能之间传输数据。
9.一种系统,包括:
虚拟机;以及
虚拟设备组成模,其与所述虚拟机耦合以用于:在所述虚拟机中创建虚拟设备,为所述虚拟设备创建第一接口和第二接口,通过所述第一接口传输数据,检测所述虚拟设备与所述虚拟机的断连,将针对所述虚拟设备的数据传输从所述第一接口切换到所述第二接口,检测所述虚拟设备与所述虚拟机的重新连接,以及将针对所述虚拟设备的数据传输从所述第二接口切换到所述第一接口。
10.根据权利要求9所述的系统,其中所述第一接口包括快速路径接口。
11.根据权利要求9所述的系统,其中所述第二接口包括模拟接口。
12.根据权利要求9所述的系统,包括所述虚拟设备组成模块用于在将针对所述虚拟设备的数据传输从所述第一接口切换到所述第二接口之后,执行所述虚拟机从第一服务器到第二服务器的实时迁移。
13.根据权利要求12所述的系统,包括所述虚拟设备组成模块用于在所述虚拟机从所述第一服务器到所述第二服务器的成功实时迁移之后,检测所述虚拟设备与所述虚拟机的所述重新连接。
14.根据权利要求9所述的系统,其中所述虚拟设备组成模块用于检测所述断连包括所述虚拟设备组成模块用于捕捉触发所述虚拟设备从所述虚拟机的“热拔出”的中断。
15.根据权利要求9所述的系统,其中所述虚拟设备组成模块用于检测所述重新连接包括所述虚拟设备组成模块用于捕捉由所述虚拟设备向所述虚拟机的“热添加”触发的中断。
16.根据权利要求9所述的系统,包括物理I/O功能,并且其中所述第一接口和所述第二接口在所述虚拟设备与所述物理I/O功能之间传输数据。
17.至少一种机器可读介质,包括多个指令,所述多个指令响应于被系统执行而使得所述系统执行根据权利要求1至8中任一项所述的方法。
18.一种装置,包括用于执行权利要求1至8中任一项所述的方法的单元。

说明书全文

在可扩展I/O虚拟化(S-IOV)架构中的虚拟设备的实时迁移

[0001] 相关申请的交叉引用
[0002] 本申请要求享有于2018年8月22日提交的美国临时申请第62/721,483号的权益。

背景技术

[0003] 由外围组件互连(PCI)特别兴趣小组(PCI-SIG)于2010年1月20日发布的对单根I/O虚拟化(SR-IOV)和共享规范1.1版的介绍是针对PCI快速设备的硬件辅助的高性能I/O虚拟化和共享的显著进步。PCI快速(PCIe)是由2017年10月5日发布的PCI快速基本规范修订版4.0、版本1.0定义的。从那时起,计算领域已经发展到超过将用于计算机服务器整合的虚拟机(VM)部署到需要无缝添加资源并动态提供容器的超大规模数据中心。新的计算环境需求用于I/O虚拟化的增加的可扩展性和灵活性。
[0004] 在大数据中心中,出于分发工作负载的目的或出于维护目的对VM进行迁移是常见的用例。数据中心中的每个服务器可能正在运行数百个VM。当需要关闭服务器进行维护时,管理员希望将在服务器上运行的VM移动到不同的服务器,这样用户就不会失去连接。在服务器过载的情况下,管理员可能还希望将某些VM从服务器移动到另一服务器,以便于将服务器上的工作负载分发给其他服务器。
[0005] 理想地,VM的迁移应该对用户是无缝的,并且不应该存在任何业务中断。以这种无缝方式的VM迁移称为实时迁移。这与通过保存当前状态并在迁移后恢复状态的VM迁移形成对比。然而,由于VF依靠特定硬件设备,因此具有SR-IOV虚拟功能(VF)的VM的实时迁移在许多管理程序上是不可能的。
[0006] 用于对运行SR-IOV VF的VM进行实时迁移的一种方法涉及创建在具有SR-IOV VF的VM中的团队合作接口以及作为模拟接口的另一接口。虽然SR-IOV VF严格依靠特定硬件设备并且可以直接访问SR-IOV设备的硬件寄存器,但是模拟接口可以在任何硬件上运行,并且模拟接口是对由所有联网设备提供的I/O路径的通用模拟。通过在实时迁移期间将模拟设备用作故障转移设备,可以移除对特定硬件设备的依赖性。
[0007] 这种使用SR-IOV VF创建实时迁移解决方案的方法涉及创建具有模拟接口和VF接口的故障转移团队。在正常运行中,VF路径是活动的,并且VM正在以高效的方式运行业务。然后在实时迁移期间,VF被弹出并且将团队故障转移到模拟接口。当业务在模拟接口上运行时,发生硬件设备迁移,并且在迁移到另一服务器之后,VF可以再次添加到VM上,并且团队合作接口将数据路径切换回VF接口。
[0008] 该方法要求管理员进行明确的动作以在VM中设置附加的模拟接口。该方法还要求由VM中的用户进行的附加动作以利用模拟接口和VF接口创建团队接口。这种开销阻碍了将团队合作用作对数据中心中的VM进行实时迁移的解决方案。附图说明
[0009] 图1示出了示例计算系统。
[0010] 图2示出了在SR-IOV与可扩展I/O虚拟化(IOV)架构之间的一些高级别差异的示例图。
[0011] 图3示出了在支持SR-IOV的端点设备与支持可扩展IOV的端点设备之间的一些差异的示例图。
[0012] 图4示出了用于可扩展IOV的高级别软件架构的示例图。
[0013] 图5示出了具有不同数量的设备后端资源的可指派设备接口(ADI)以及利用一个或多个ADI组成虚拟设备(VDEV)实例的虚拟化软件的逻辑视图的示例图。
[0014] 图6示出了示例可扩展IOV指定供应商特定扩展能(DVSEC)结构的图。
[0015] 图7示出了用于可扩展模式地址转换的示例高级别转换结构组织。
[0016] 图8示出了VM的实时迁移的示例图。
[0017] 图9示出了VM的实时迁移的示例流程图
[0018] 图10示出了存储介质的示例。
[0019] 图11示出了另一示例计算平台。

具体实施方式

[0020] 本发明实施例公开了可扩展I/O虚拟化(可扩展IOV)架构以及相关联的主机计算平台和端点设备能力。可扩展IOV定义了用于针对超大规模使用的硬件辅助的I/O虚拟化的可扩展且灵活的方法。可扩展IOV依赖于已经存在的PCI快速能力集,使得可扩展IOV架构能够由符合的PCI快速端点设备设计和现有软件生态系统容易地支持。
[0021] 虚拟化允许称为虚拟机监视器(VMM)(也称为管理程序)的系统软件创建称为虚拟机(VM)的多个隔离执行环境,在多个隔离执行环境中可以运行操作系统(OS)和应用。虚拟化在现代企业和数据中心中被广泛用作将多个工作负载整合到单个物理机器上同时仍然使得工作负载彼此隔离的机制。除了VM之外,容器还提供了另一种类型的隔离环境,这种隔离环境用于封装并部署应用并在隔离的处理环境中运行应用。容器被构造为裸机容器(其被实例化为OS进程组)或者被构造为机器容器(其利用硬件支持的增加的隔离属性来进行虚拟化)。与VM相比,容器重量更轻并且可以以更高的密度部署,这潜在地使计算平台上的容器实例的数量增加一个数量级。
[0022] 现代处理器提供用于减少虚拟化开销的特征,VMM可以利用这些特征以允许VM直接访问硬件资源。用于IA-32 架构的 虚拟化技术( VT)( VT-x)定义了 处理器硬件能力,以降低处理器和存储器虚拟化的开销。用于定向I/O的
虚拟化技术( VT)( VT-d)定义了直接存储器访问(DMA)以及中断重新映射和
隔离的计算平台硬件特征,可以利用这些特征使得I/O虚拟化的开销最小化。I/O虚拟化指代跨多个VM或容器实例对I/O设备的虚拟化和共享。存在用于I/O虚拟化的多种方法,I/O虚拟化可以宽泛地分为基于软件的I/O虚拟化或硬件辅助的I/O虚拟化。
[0023] 在基于软件的I/O虚拟化的情况下,VMM将虚拟设备(例如,网络接口控制器(NIC)功能)暴露给VM。VMM或主机OS中的软件设备模型对虚拟设备的行为进行模拟。在将虚拟设备命令转发到物理设备之前,软件设备模型将命令转换为物理设备命令。这种对设备的软件模拟可以提供与在VM内运行的软件的兼容性,但是会引发显著的性能开销,尤其是对于高性能设备。除了性能限制之外,对软件中的虚拟设备访问进行模拟对于可编程设备(例如,图形处理单元(GPU)和现场可编程阵列(FPGA))来说可能过于复杂,因为这些设备执行各种功能而不仅仅执行功能的固定集。基于软件的I/O虚拟化的变型(例如,“设备半虚拟化”和“间接传递”)允许计算平台利用设备模拟减轻性能缺点和复杂性缺点中的一些。
[0024] 为了避免基于软件的I/O虚拟化的开销,VMM可以利用对DMA和中断重新映射能力的平台支持(例如, VT-d)来支持“直接设备指派”,从而允许客体软件直接访问已指派的设备。这种直接设备指派提供最佳的I/O虚拟化性能,因为VMM不再妨碍对设备的大多数客体软件访问。然而,这种方法要求将设备排他性地指派给VM,并且不支持跨多个VM共享设备。
[0025] 单根I/O虚拟化(SR-IOV)是用于硬件辅助的I/O虚拟化的PCI-SIG定义规范,SR-IOV定义了用于对端点设备进行划分以跨多个VM或容器直接共享的标准方式。支持SR-IOV的端点设备可以支持一个或多个物理功能(PF),物理功能中的每一个可以支持多个虚拟功能(VF)。PF用作设备的资源管理实体,并且由主机OS中的PF驱动程序管理。可以将每个VF指派给VM或容器用于直接访问。SR-IOV由多个高性能I/O设备支持,例如,网络和存储控制器设备以及诸如GPU、FPGA和其他新兴加速器之类的可编程或可重新配置设备。
[0026] 在一些实施例中,使用PCIe来实现SR-IOV。在其他实施例中,可以使用除PCIe之外的互连。
[0027] 随着超大规模计算模型随现代处理器上的处理元件(例如,处理核心)的数量增加而扩散,高容量计算平台(例如,计算机服务器)用于托管比传统VM更高数量级的数量的裸机容器或机器容器。这些使用中的许多使用(例如,网络功能虚拟化(NFV)或利用加速器的异构计算)都要求高性能硬件辅助的I/O虚拟化。这些动态提供的高密度使用(即,在1000个域的量级上)需要比由支持SR-IOV的设备支持的传统虚拟化使用所提供的更加可扩展的且细粒度的I/O虚拟化解决方案。
[0028] 如本文中在本发明的实施例中所描述的可扩展IOV是用于硬件辅助的I/O虚拟化的新方法,该方法实现跨隔离域的I/O设备的高度可扩展和高性能共享,同时包含用于端点设备硬件支持这种可扩展共享的成本和复杂性。取决于使用模型,隔离域可以是传统VM、机器容器、裸机容器或应用进程。本发明的实施例主要将隔离域称为VM,但是一般原理广泛地适用于其他域抽象,例如,容器。
[0029] 图1示出了支持可扩展IOV架构的示例计算系统100。如图1所示,计算系统100包括与网络170(例如,其可以是互联网,或者数据中心内的网络)耦合的计算平台101。在一些示例中,如图1中所示,计算平台101经由网络通信信道175并且通过至少一个网络I/O设备110(例如,网络接口控制器(NIC))与网络170耦合,该网络I/O设备110具有与网络通信信道175连接或耦合的一个或多个端口。在实施例中,网络I/O设备110是以太网NIC。网络I/O设备110通过网络170将数据分组从计算平台101发送到其他目的地,并且从其他目的地接收数据分组以供转发到计算平台101。
[0030] 根据一些示例,如图1所示的计算平台101包括电路120、主存储器130、网络(NW)I/O设备驱动程序140、操作系统(OS)150、虚拟机管理器(VMM)180(也称为管理程序)、至少一个应用160以及一个或多个存储设备165。在一个实施例中,OS 150是LinuxTM。在另一实施例中,OS150是 服务器。在实施例中,应用160表示由一个或多个客体VM(未示出)执行的一个或多个应用程序。网络I/O设备驱动程序140操作以初始化并管理由网络I/O设备110执行的I/O请求。在实施例中,被发送到网络I/O设备110和/或从网络I/O设备110接收到的分组和/或分组元数据存储在主存储器130和/或存储设备165中的一个或多个中。在至少一个实施例中,存储设备165可以是硬盘驱动器(HDD)和/或固态驱动器(SSD)中的一个或多个。在实施例中,存储设备165可以是非易失性存储器(NVM)。在一些示例中,如图1所示,电路120可以经由通信链路155与网络I/O设备110通信地耦合。在一个实施例中,通信链路155是符合外围组件接口快速(PCIe)标准的修订版4.0或其他版本的PCIe总线。在一些示例中,操作系统150、NW I/O设备驱动程序140以及应用160至少部分地经由在主存储器130(例如,易失性或非易失性存储器设备)、存储设备165中包括的一个或多个存储器设备与电路120的元件(例如,处理核心122-1至122-m,其中“m”是大于2的任何正整数)之间的协作来实现。
在实施例中,OS 150、NW I/O设备驱动程序140以及应用160由一个或多个处理核心122-1至
122-m执行。在其他实施例中,存在与支持可扩展IOV能力的通信链路155(例如,PCIe互连)耦合的其他端点设备。
[0031] 在一些示例中,计算平台101包括但不限于计算机服务器、服务器阵列或服务器群、web服务器、网络服务器、互联网服务器、工作站、小型计算机、大型计算机、超级计算机、网络装置、web装置、分布式计算系统、多处理器系统、基于处理器的系统、膝上型计算机、平板计算机、智能电话或其组合。在一个示例中,计算平台101是分解式服务器。分解式服务器是将组件和资源分解为子系统的服务器。分解式服务器可以根据需要适配以更改存储或计算负载,而不用在延长的时间段内替换或中断整个服务器。例如,服务器可以被分解为可以在其他附近服务器之间共享的模化计算模块、I/O模块、功率模块和存储模块。
[0032] 具有处理核心122-1至122-m的电路120可以包括各种商用处理器,包括但不限于Core(2) Core  i3、Core  i5、Core  i7、或 处理器、ARM处理器和类似处理器。电路120
可以包括至少一个高速缓存135以存储数据。
[0033] 根据一些示例,主存储器130可以由一个或多个存储器设备或管芯组成,其可以包括各种类型的易失性和/或非易失性存储器。易失性类型的存储器可以包括但不限于动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、晶闸管RAM(TRAM)或零电容器RAM(ZRAM)。非易失性类型的存储器可以包括具有三维(3-D)交叉点存储器结构的字节或块可寻址类型的非易失性存储器,其包括硫化物相变材料(例如,硫化物玻璃),下文中称为“3-D交叉点存储器”。非易失性类型的存储器还可以包括其他类型的字节或块可寻址的非易失性存储器,例如但不限于,多阈值级别NAND闪速存储器、NOR闪速存储器、单级或多级相变存储器(PCM)、电阻式存储器、纳米线存储器、电晶体管随机存取存储器(FeTRAM)、结合忆阻器技术的磁阻随机存取存储器(MRAM)、自旋移矩MRAM(STT-MRAM),或上述存储器中的任何存储器的组合。在另一实施例中,主存储器130可以包括在计算平台101内和/或可由计算平台101访问的一个或多个硬盘驱动器。
[0034] 图2示出了在SR-IOV 202与可扩展IOV 222架构之间的一些高级别差异的示例图200。与由SR-IOV采用以在PF 212上创建多个VF 214的粗粒度设备划分和指派方法208不同,可扩展IOV架构222使得软件能够利用硬件辅助灵活地组成虚拟设备,以用于以更细的粒度进行设备共享。组成的虚拟设备上的频繁的(即,性能关键的)操作被直接映射到底层设备硬件(例如,可扩展IOV设备230),而不频繁的操作通过VMM/主机OS 228中的设备特定的组成软件226来模拟。这与针对SR-IOV设备202的现有架构不同,其中仅虚拟设备的设备不可知的PCI快速架构资源(例如,配置空间寄存器和消息信令中断扩展(MSI-X)能力寄存器)在软件中虚拟化,并且其余的虚拟设备资源(包括所有其他存储器映射的I/O(MMIO))被直接映射到底层VF 214硬件资源(例如,SR-IOV设备216)。
[0035] 在使用硬件复制的SR-IOV架构202中,多个VM和容器204在VMM和/或主机OS 206之上运行。设备划分和指派逻辑208将I/O请求指派给PF驱动程序210,该PF驱动程序210与SR-IOV设备216中的物理功能(PF)212耦合,或者与SR-IOV设备216中的虚拟功能(VF)214耦合。与此相反,在使用复制和组成的本发明的实施例的可扩展IOV架构222中,支持更多的VM和容器224。VM和/或容器224调用VMM/主机OS 228中的设备组成逻辑226以实现I/O请求。设备组成逻辑226将I/O请求指派给PF驱动程序210,该PF驱动程序210与可扩展IOV设备230中的细粒度提供的设备资源(其还包括物理功能)耦合,或者与可扩展IOV设备230中的细粒度提供的设备资源232直接耦合。
[0036] 可扩展IOV架构提供优于SR-IOV的益处。向VM 224细粒度提供设备资源以及对不频繁设备访问进行软件模拟使得设备能够以较低的硬件成本和复杂性来增加共享可扩展性。可扩展IOV架构为诸如VMM/主机OS 228之类的系统软件提供了使用不同抽象来共享具有不同地址域的设备资源的灵活性(例如,应用160处理以通过系统调用来访问,以及VM/容器224通过虚拟设备接口来访问)。通过虚拟设备(VDEV)到设备资源的软件控制的动态映射,本发明的实施例的可扩展IOV架构还使得VMM能够将设备资源过度提供给VM 224。
[0037] 本方法还使得VMM 228能够容易地维持数据中心中的代兼容性。例如,在具有包含相同I/O设备的不同代(例如,版本)的物理机器的数据中心中,VMM可以使用软件模拟来虚拟化VDEV的基于MMIO的能力寄存器以呈现相同的VDEV能力,而不考虑不同代的物理I/O设备。这是为了确保可以将具有VDEV驱动程序的相同的客体OS映像部署或迁移到物理机器中的任一个。
[0038] 可扩展IOV架构由以下元件组成。该架构支持PCI快速端点设备要求和能力。该架构支持主机平台(例如,根联合体)要求,主机平台要求包括对直接存储器访问(DMA)重新映射硬件的增强。在实施例中,这些要求在基于Intel处理器的计算平台上实现,作为用于定向I/O的 虚拟化技术(修订版3.0或更高版本)的一部分。该架构还支持设想用于实现可扩展IOV的参考软件架构,包括主机系统软件(OS和/或VMM 228),其实现基础设施和端点设备特定的软件组件,例如,主机驱动程序、客体驱动程序和虚拟设备组成模块(VDCM)。
[0039] PCI快速端点设备可以支持用于利用可扩展IOV操作的要求,而与PCI快速端点设备对SR-IOV的支持无关。这使得已经支持SR-IOV的设备实现方式能够维持这种向后兼容的能力,同时添加附加能力以支持可扩展IOV。
[0040] 在本发明的实施例中,端点物理功能能够实现SR-IOV和Intel可扩展IOV两者以便以一种模式或另一模式操作,但不能同时以两种模式操作。
[0041] PCI快速SR-IOV架构遵循物理功能(PF)212硬件的近乎完整的功能硬件复制以用于其虚拟功能(VF)214。这由大多数SR-IOV设备实现方式通过针对SR-IOV的VF中的每一个复制PF的硬件/软件接口中的大多数来实现,包括诸如存储器映射资源之类的资源、诸如功能级别重置(FLR)之类的MSI-X存储和能力。这种功能复制方法可能增加设备复杂性并对扩展到大量VF施加限制。
[0042] 用于I/O控制器实现方式的硬件-软件接口可以被分类为:(a)慢速路径控制/配置操作,其不那么频繁并且对整体设备性能具有最小的影响;以及(b)快速路径命令/完成操作,其为频繁的并且对整体设备性能具有较大影响。由许多支持直接用户模式访问的高性能I/O设备实践慢速路径操作相对快速路径操作的这种区分。可扩展IOV架构扩展了这种设备设计,以定义用于I/O虚拟化和共享的软件可组成方法。
[0043] 可扩展IOV架构要求端点设备(即,可扩展IOV设备230)将其硬件/软件接口组织成快速路径(频繁)和慢速路径(不频繁)访问。哪些操作和访问被区分为慢速路径相对快速路径是由设备实现方式控制的。慢速路径访问典型地包括初始化、控制、配置、管理、错误处理和重置操作。快速路径访问典型地包括涉及工作提交和工作完成处理的数据路径操作。在这种组织的情况下,来自客体VM的对虚拟设备的慢速路径访问由设备特定的主机软件捕获并模拟,而快速路径访问被直接映射到物理设备上。这种方法实现简化设备设计(与SR-IOV全功能复制相比),而不会影响I/O虚拟化可扩展性或性能。此外,混合方法通过对设备资源的细粒度提供,为软件提供了增加的灵活性以组成虚拟设备。
[0044] 高性能I/O设备支持大量命令/完成接口,用于I/O请求的高效复用/解复用,并且在一些使用中用于支持用户模式I/O请求。这些设备的一些示例为:a)高带宽网络控制器,其支持跨大量虚拟交换机接口(VSI)的数千个发送/接收(TX/RX)队列;b)存储控制器,例如,支持许多命令和完成队列对构造的NVM快速(如在非易失性存储器(NVM)快速规范(版本1.3c,在nvmexpress.org处可获得)中所描述的)设备;c)加速器设备,例如,支持大量图形和/或计算上下文的GPU;d)具有支持大量执行上下文的加速器功能单元(AFU)的可重新配置FPGA设备;以及e)支持数千个队列对(QP)接口的支持远程直接存储器访问(RDMA)的设备。
[0045] 可扩展IOV架构利用了支持多队列/多上下文的高性能I/O设备设计,并且定义了用于以比SR-IOV VF粒度更细的粒度(队列、队列束、上下文等)共享这些设备的方法。为了实现这种更细粒度的共享,本发明的实施例的可扩展IOV架构将设备共享的粒度定义为设备上的“可指派设备接口”(ADI)。根据实施例,ADI是针对支持可扩展IOV设备的指派单元。设备上的每个ADI实例都包含设备上的资源集,这些资源集由软件分配以支持针对虚拟设备(VDEV)的快速路径操作。
[0046] 从概念上讲,ADI类似于SR-IOV虚拟功能(VF),除了ADI是更细粒度的并且映射到针对虚拟设备的快速路径操作。与VF不同,物理功能(PF)上的所有ADI共享PF的请求者ID(例如,总线/设备/功能号)、没有PCI配置空间寄存器、共享PF的相同的基址寄存器(BAR)资源(即,没有虚拟功能基址寄存器(VFBAR))并且不要求复制的MSI-X存储。与针对每个ADI的MSI-X表存储相反,PF实现设备特定的中断消息存储装置(IMS)。IMS在用途上类似于MSI-X表存储,但是在架构上不类似于MSI-X表存储,而是以特定于设备的方式实现以使得灵活性最大化。此外,与在设备上实现 通信通道和“资源重新映射逻辑”的某些SRIOV设备不同,ADI使用慢速路径模拟来提供这样的功能。ADI的存储器映射寄存器空间被布局为使得快速路径寄存器位于与慢速路径寄存器分离的系统页面大小区域中。用于支持可扩展IOV的设备的主机驱动程序定义了被分组以形成ADI的设备后端资源的集合。
[0047] 图3示出了在支持SR-IOV的端点设备与支持可扩展IOV的端点设备之间的一些差异的示例图300。SR-IOV设备216包括物理功能(PF)基址寄存器(PF BAR)302、PF配置(PF config)电路304和PF消息信令中断扩展(MSI-X)电路306。PF MSI-X 306提供如由PCI快速基本规范定义的MSI-X能力。SR-IOV设备216还包括多组虚拟功能(VF)VF BAR 312、VF配置314和MSI-X 316。PF BAR 302和VF BAR 312与调用设备后端资源310的设备资源重新映射逻辑和 邮箱逻辑308耦合。在实施例中,设备后端资源310包括用于存储分组的多个队列。设备后端资源310可以包括命令/状态寄存器、设备上队列、对存储器内队列的引用、设备上的本地存储器或任何其他设备特定的内部构造。
[0048] 可扩展IOV设备230包括PF BAR 320,该PF BAR 320还包括多个ADI MMIO组件322。PF BAR 320与PF配置324、PF MSI-X 326和针对ADI的中断消息存储装置(IMS)328耦合。PF MSI-X 326提供如由PCI快速基本规范定义的MSI-X能力。IMS 328使得设备能够以设备特定的优化方式存储针对ADI的中断消息,而没有PCI快速定义的MSI-X能力的可扩展性约束。PF BAR 320和ADI MMIO组件322与设备后端资源330耦合。设备后端资源330可以包括命令/状态寄存器、设备上队列、对存储器内队列的引用、设备上的本地存储器或任何其他设备特定的内部构造。
[0049] ADI的设备特定的和轻重量的本质以及在设备特定的主机软件中对虚拟设备功能的部分进行模拟的灵活性使得设备硬件实现方式能够组成大量虚拟设备,以用于以与SR-IOV VF的等效扩展相比更低的设备成本和复杂性进行可扩展共享。
[0050] 在SR-IOV架构的情况下,SR-IOV设备216中的每个VF 214由PCI快速请求者标识符(ID)(RID)标识,从而允许在根联合体(例如, VT-d)中的DMA重新映射硬件支持对来自VF的上游请求应用唯一地址转换功能。RID是针对PCI快速PF或VF的总线、设备和功能编号身份。RID还用于路由事务,例如,PCI快速设备层级的读取完成,因此RID在具有大I/O扇出设计的某些平台拓扑上可能是稀缺资源。这可能会对SR-IOV设备可以支持的隔离域的数量施加可扩展性限制。
[0051] 本发明的实施例的可扩展IOV架构通过这样的方式来解决平台可扩展性问题:将物理功能(PF)232的RID与PF 232的所有ADI共享,并且相反为ADI指派进程地址空间标识符(PASID),该PASID使用PCI快速PASID事务层分组(TLP)前缀在上游事务中传达。有关PASID TLP前缀的详细信息,请参考PCI快速规范。对可扩展IOV架构的计算平台101支持以PASID粒度实现针对上游请求的唯一的地址转换功能。与RID不同,PASID不用于I/O结构上的事务路由,而是仅用于传达存储器事务所针对的地址空间。此外,与16位RID相比,PASID是20位ID,这给出16倍多的标识符。可扩展IOV架构对PASID的这种使用使得可扩展IOV设备能够支持显著更多的域。
[0052] 图4示出了用于可扩展IOV的高级别软件架构400的示例图。图4示出了用于描述可扩展IOV架构的组件,而并非旨在示出所有虚拟化软件或具体的实现方式选择。为了支持广泛类型的设备类别和实现方式,软件职责在系统软件(OS 150/VMM 180)与设备特定的驱动程序软件组件之间被抽象。
[0053] 因此,图4是对用于组成硬件辅助的虚拟设备的系统软件(主机OS 150和VMM 180)和设备特定的软件色和交互连同如何管理设备操作的描述。所描述的软件架构集中于针对虚拟机和机器容器的I/O虚拟化。然而,这些原则可以与适当的软件支持一起应用于其他域,例如,跨裸机容器或应用进程的I/O共享。
[0054] 本发明的实施例的可扩展IOV架构引入被称为虚拟设备组成模块(VDCM)402的设备特定的软件组件,该VDCM 402负责利用一个或多个可指派设备接口(ADI)406、ADI 408组成一个或多个虚拟设备(VDEV)404实例,VDCM通过对VDEV慢速路径操作/访问进行模拟并且将VDEV快速路径访问映射到在物理设备上分配并配置的ADI实例来完成该操作。因此,VDCM 402是VDEV的控制器。与SRIOV VF 214不同,VDCM 402允许可扩展IOV设备230避免在硬件中实现慢速路径操作,而是将设备硬件集中于高效地对ADI进行扩展。
[0055] 另外地,虚拟化管理软件(例如,VMM 180)利用VDCM 402软件接口进行增强的虚拟设备资源和状态管理,从而实现诸如虚拟设备的暂停、重新开始、重置和迁移之类的能力。取决于特定的VMM实现方式,VDCM 402被实例化为单独的用户或内核模块,或者可以被封装为主机驱动程序的一部分。
[0056] 用于支持可扩展IOV的设备230的主机驱动程序412在概念上等同于SR-IOV PF驱动程序210。主机驱动程序412作为主机OS 150或VMM(管理程序)软件180的一部分被加载并执行。除了普通设备驱动程序的角色,主机驱动程序412实现如由主机OS 150或VMM 180基础设施定义的软件接口,以支持对多个ADI 428、ADI 430、ADI 432、ADI 434的枚举、配置、实例化和管理。主机驱动程序412负责配置每个ADI,例如,每个ADI的PASID身份、用于存储ADI的中断消息的设备特定的中断消息存储装置(IMS)328、用于对ADI的快速路径访问的MMIO寄存器资源322以及任何设备特定的资源。
[0057] 表1示出了主机驱动程序412支持以用于管理ADI的示例高级别操作集。通过由特定系统软件(例如,主机OS 150或VMM 180)实现方式定义的软件接口来调用这些操作。
[0058] 表1-用于可扩展IOV的主机驱动程序接口
[0059]描述
针对PF的可扩展IOV能力报告。
ADI/VDEV的枚举类型和最大数量。
对每种ADI类型的资源要求的枚举。
对ADI的部署兼容性的枚举和设置。
对ADI及其组成资源的分配、配置、重置、排空、中止、释放。
设置并管理ADI的PASID身份。
管理针对ADI的设备特定的中断消息存储装置(IMS)。
使得客体能够托管通信通道(如果支持)。
配置ADI的设备特定的QoS属性。
枚举并管理ADI的迁移兼容性。
暂停/保存ADI状态,以及恢复/重新开始ADI状态。
[0060] 虚拟设备组成模块(VDCM)402是设备特定的组件,该VDCM 402负责使用由主机驱动程序412分配的一个或多个ADI 406、ADI 408来组成一个或多个虚拟设备(VDEV)404实例。VDCM 402实现对VDEV 404慢速路径操作的基于软件的虚拟化并且布置使得快速路径操作直接提交给支持ADI 428、ADI 430、ADI 432、ADI 434。支持这种硬件辅助的虚拟设备组成的主机OS 150或VMM 180实现方式可能要求设备供应商以不同方式实现并封装VDCM。例如,在一些OS或VMM实现方式中,VDCM 402被封装为用户空间模块或库,该用户空间模块或库作为设备的主机驱动程序412的一部分被安装。在其他实现方式中,VDCM 402是内核模块。如果VDCM 402被实现为库,则VDCM 402可以与负责创建并管理VM资源的VMM特定的虚拟机资源管理器(VMRM)静态或动态链接。如果VDCM 402在主机OS内核中实现,则VDCM 402可以是主机驱动程序412的一部分。
[0061] 用于支持可扩展IOV的设备230的客体驱动程序424在概念上等同于SR-IOV设备VF驱动程序。在实施例中,驻留在客体VM 422中的客体驱动程序424管理由VDCM 402组成的VDEV实例404。客体驱动程序424进行的快速路径访问426直接向VDEV 404后面的ADI 432、ADI 434发出,而慢速路径访问420被VM资源管理器(VMRM)416和VDCM 402拦截并虚拟化。类似于可用于SR-IOV PF 212和VF 214驱动程序的实现方式选择,对于目标OS 150,客体驱动程序424被部署为单独的驱动程序或支持主机OS 150和客体VM 422功能两者的统一驱动程序。对于现有的SR-IOV设备216,如果VDEV 404被组成以表现得像现有的VF 214,则可扩展IOV客体驱动程序424甚至可以与SR-IOV VF 214驱动程序相同以用于向后兼容。
[0062] 在本发明的实施例中,虚拟设备(VDEV)404是抽象,通过该抽象将共享的物理设备(例如,可扩展IOV设备230)暴露给客体VM 422中的软件。VDEV 404被暴露给客体VM 422作为具有虚拟资源(例如,虚拟请求者ID、虚拟配置空间寄存器、虚拟存储器BAR、虚拟MSI-X表等)的虚拟PCI快速枚举设备。每个VDEV 404可以由一个或多个ADI 428、ADI 430、ADI 432、ADI 434支持。支持VDEV 404的ADI典型地属于相同的PF 232,但是在跨多个PF分配ADI的情况下的实现方式是可能的(例如,以支持设备容错或负载平衡)。
[0063] PF 232可以关于设备后端资源330的数量以及关于功能两者支持多种类型的ADI。类似地,在可扩展IOV设备230上可能有多种类型的VDEV组成(关于支持ADI的数量、ADI的功能等)。VDCM 402可以发布对组成多种“VDEV类型”的支持,从而使得虚拟机资源管理器(VMRM)416能够请求用于指派给虚拟机(VM)的不同类型的VDEV实例。VDCM 402使用主机OS 
150和VMM 180定义的接口来分配并配置组成多个VDEV 404实例所需要的资源。可以以与SR-IOV VF 214相同的方式将VDEV实例指派给VM 422。
[0064] VDEV 404可以由在VDEV实例化时预分配的静态数量的ADI组成,或者由VDCM 402响应于客体驱动程序424请求分配/释放资源而动态组成。静态分配的ADI的示例是具有固定数量的RX/TX队列的虚拟NIC(vNIC)。动态分配的ADI的示例是虚拟加速器设备,其中上下文分配请求由VDCM 402虚拟化以动态地创建加速器上下文作为ADI。
[0065] 对于VDEV MMIO空间的任何系统页面大小区域,VDEV的MMIO寄存器322可以利用以下方法中的任一种组成。
[0066] 1)直接映射到ADI MMIO。作为组成VDEV实例404的一部分,VDCM 402在客体物理地址(GPA)空间中定义VDEV虚拟BAR中的系统页面大小范围,该系统页面大小范围需要被映射到主机物理地址(HPA)空间中的支持ADI的MMIO页面范围。VDCM 402可以请求VMM 180以在主机处理器122-1……122-M虚拟化页表中建立GPA到HPA映射,从而使得客体驱动程序424能够直接访问ADI。这些直接映射的MMIO范围支持对ADI 432、ADI 434的快速路径操作426。
[0067] 2)由VDCM拦截并模拟VDEV MMIO。由VDCM 402通过请求VMM 180不在主机处理器虚拟化页表中映射这些MMIO区域322来虚拟化VDEV的慢速路径寄存器,因此在客体驱动程序424访问这些寄存器时强制进行主机拦截。这些拦截被提供给组成VDEV实例404的VDCM模块
402,使得VDCM 402可以通过自身或通过与主机驱动程序412的交互来虚拟化这种被拦截的访问。为了使得在慢速路径访问模拟上的软件复杂性最小化,主机OS 150或虚拟化提供者可以限制客体驱动程序424使用八个字节或更少字节的简单存储器移动操作来访问VDEV的慢速路径MMIO资源。被频繁读取且没有读取副作用但在写入访问时要求VDCM拦截和模拟的VDEV寄存器可以作为只读被映射到VCDM提供的支持存储器页面。这支持对这些寄存器的高性能读取访问,以及通过拦截客体写入访问来虚拟化这些寄存器的写入副作用。“只写拦截”寄存器必须托管于与在VDEV MMIO布局上的“读取-写入拦截”寄存器分离的系统页面大小区域中。
[0068] 3)将VDEV MMIO 322映射到存储器130。没有读取或写入副作用的VDEV寄存器可以利用读取访问和写入访问映射到主存储器130。这些寄存器可以包含通过写入被拦截的寄存器来执行的后续操作的参数或数据。设备实现方式还可以使用该方法来定义用于在客体驱动程序424与VDCM 402之间的VDEV特定的通信信道的虚拟寄存器。客体驱动程序424在没有主机拦截的情况下将数据写入存储器支持的虚拟寄存器,随后是被VDCM拦截的邮箱寄存器访问。这种优化减少了在客体与主机之间传递数据的主机拦截和指令模拟成本。这种方法使得客体驱动程序424能够比基于硬件的通信门铃(如通常在SR-IOV VF 214与PF 212之间实现的)更通用地实现具有VDCM的这种信道,或者在不依赖于客体OS或VMM特定的半虚拟化软件接口的情况下实现具有VDCM的这种信道。
[0069] VDEV 404暴露由VDCM 402模拟的虚拟MSI或虚拟MSI-X能力。客体驱动程序424通常通过客体VM 422接口请求VDEV中断资源,并且客体VM可以通过以下操作来为此服务:通过VDEV 404的虚拟MSI或虚拟MSI-X能力对一个或多个中断消息进行编程。
[0070] 对于典型的虚拟设备组成,两个中断源作为VDEV中断被递送给客体驱动程序424。一个源是VDCM软件402本身,其可以代表VDEV生成虚拟中断以供递送给客体驱动程序。这些是由VDCM模拟的VDEV的慢速路径操作生成的软件中断。另一中断源是设备上的ADI实例
432、ADI实例434,其用于支持VDEV 404的快速路径操作。ADI生成的中断使用存储在中断消息存储装置(IMS)328中的中断消息。
[0071] 当客体VM 422对虚拟MSI或MSI-X寄存器进行编程时,操作被VDCM 402拦截并虚拟化。对于慢速路径虚拟中断,VDCM通过VMM 180软件接口请求对客体的虚拟中断注入。对于来自ADI的快速路径中断,VDCM调用主机驱动程序412以在IMS中分配并配置所要求的中断消息地址和数据。这在概念上类似于如何通过某些虚拟化软件对SR-IOV VF的MSI-X中断进行虚拟化,除了中断消息由主机驱动程序412在IMS中编程而不是由PCI驱动程序在MSI-X表中编程。
[0072] 对于设备特定的使用和原因,支持可扩展IOV的设备230可以选择在客体驱动程序424与VDCM 402之间建立通信信道。可以利用以下方法中的任一种以客体和主机系统软件不可知的方式建立这些通信信道。
[0073] 1)软件模拟的通信信道。这样的信道由VDCM 402使用在设置为完全存储器支持以实现在客体VM 422与主机OS 150之间的数据共享的VDEV MMIO空间中的一个或多个系统页面大小区域组成。在VDEV MMIO空间中的主机拦截的系统页面大小区域也被设置以向主机用信号通知客体动作。可选地,还可以由VDCM设置虚拟中断,以向客体用信号通知有关异步通信信道动作的完成。
[0074] 2)基于硬件邮箱的通信信道。如果在客体驱动程序424与主机驱动程序412之间的通信是频繁的,并且基于软件模拟的通信信道开销是显著的,则可扩展IOV设备230可以基于硬件邮箱实现通信信道。这类似于在一些现有设计中的SR-IOV VF 214与PF 212之间的通信信道。
[0075] 共享虚拟存储器(SVM)指代其中设备在共享设备的应用的CPU虚拟地址空间中操作的使用。利用系统软件对DMA重新映射硬件进行编程来启用SVM使用,以参考CPU页表获取具有表示目标应用虚拟地址空间的PASID的请求。支持这种SVM能力的设备不要求固定由设备访问的页面,而是支持PCI快速地址转换服务(ATS)和页面请求服务(PRS)能力,以支持可恢复的设备页面错误。有关ATS和PRS能力的详细信息,请参考PCI快速规范。
[0076] 支持可扩展IOV架构的设备可以独立地支持在分配给主机应用的ADI上的SVM使用,或者独立地支持用于通过指派给客体VM 422的VDEV实例被分配给客体应用的ADI。主机SVM使用和客体SVM使用两者对ADI操作都是透明的。一个区别在于根联合体DMA重新映射硬件的地址转换功能编程。表示主机SVM使用的针对PASID编程的地址转换功能指代相应的CPU虚拟地址到物理地址转换,而表示客体SVM使用的针对PASID编程的地址转换功能指代相应的嵌套地址(客体虚拟地址到客体物理地址,并且进一步到主机物理地址)转换。
[0077] 现在将描述针对端点设备支持可扩展IOV架构的一组要求和能力。这些要求适用于根联合体集成端点(RCIEP)设备和PCI快速端点(PCIEP)设备两者。在实施例中,端点设备可以是NIC、存储控制器、GPU、FPGA、专用集成电路(ASIC)或其他电路。
[0078] 如先前所描述的,可扩展IOV架构将用于端点设备(即,可扩展IOV设备230)上的细粒度共享的构造定义为可指派设备接口(ADI)428、ADI 430、ADI 432、ADI 434。ADI形成用于支持可扩展IOV的设备230的指派和隔离的单元,并且由软件组成以形成虚拟设备。针对端点设备用于对ADI的枚举、分配、配置、管理和隔离的要求如下。
[0079] 与快速路径工作提交、执行和完成操作相关联的端点设备上的资源被称为设备后端资源。
[0080] 可指派设备接口(ADI)428、ADI 430、ADI 432、ADI 434指代一组设备后端资源330,该设备后端资源330被分配、配置并组织为隔离单元,从而形成设备共享的单元。被分组以组成ADI的后端资源的类型和数量是设备特定的。例如,对于网络控制器设备(例如,以太网NIC),ADI可以由与虚拟交换机接口(VSI)相关联的一组TX/RX队列和资源组成。存储控制器上的ADI可以是与存储命名空间相关联的一组命令队列和完成队列。类似地,GPU上的ADI可以被组织为代表虚拟GPU设备实例而创建的一组图形或计算上下文。取决于设计,FPGA设备上的ADI可以是整个加速器功能单元(AFU)或者是支持多上下文的AFU上的上下文。
[0081] SR-IOV架构通过VF构造指定对PCI快速架构资源的分配,但是将关于设备后端资源如何被分配并与特定VF 214相关联留给设备实现方式。想要灵活地将可变数量的后端资源提供给VF 214(例如,将一个队列对提供给第一VF以及将一个队列对提供给另一VF)的设备需要在端点设备内实现另一级别的“资源重新映射逻辑”(如图3中的框308所示),以用于映射哪些设备后端资源310可以通过特定VF 214访问以及哪些设备后端资源310通过其他VF与访问隔离。随着VF和后端资源的数量被扩展,端点设备中的这种资源重新映射逻辑308增加了设备复杂性。
[0082] SR-IOV软件架构提供要由单个VF组成的虚拟设备实例,然而本发明的实施例的可扩展IOV软件架构允许软件通过使用一个或多个ADI而组成虚拟设备(VDEV)实例。这使得端点设备硬件设计能够避免对端点设备内部的复杂资源重新映射逻辑的需求。
[0083] 例如,考虑使用队列对(QP)436、QP 438、QP 440、QP 442作为后端资源330的设备,以及在VDEV中需要八个QP用于其工作负载的VM 422。在SR-IOV架构中,设计将必须将VF 214映射到八个QP,其中为每个VF静态划分八个QP,或者使用端点设备中的资源重新映射逻辑308将八个QP动态划分给VF。等效的支持可扩展IOV的设备设计将每个QP视为ADI 428、ADI 430、ADI 432或ADI 434,并且使用VDCM软件402以使用八个ADI组成VDEV。在这种情况下,资源重新映射功能以VDCM 402实现。
[0084] 图5示出了具有不同数量的设备后端资源330的ADI以及利用一个或多个ADI 520、ADI 522、ADI 524、ADI 526组成虚拟设备实例508、510、512的虚拟化软件的逻辑视图的示例图。存在由计算平台101执行的一个或多个客体分区,例如,客体分区1(502)、客体分区2(504)、……客体分区J(506),其中J是自然数。存在由计算平台101执行的一个或多个虚拟设备(VDEV),例如,虚拟设备1(508)、虚拟设备2(510)、……虚拟设备K(512),其中K是自然数。每个客体分区可以针对I/O请求调用一个或多个虚拟设备。例如,客体分区502调用虚拟设备1(508),客体分区2(504)调用虚拟设备2(510),依此类推,客体分区J调用虚拟设备K(512)。可以存在任何数量的客体分区。可以存在任何数量的虚拟设备。由任何一个客体分区调用的虚拟设备的最大数量取决于实现方式。在端点设备硬件(即,可扩展IOV设备230)内,存在一个或多个ADI,例如,ADI 1(520)、ADI 2(522)、ADI 3(524)、……ADI M(526),其中M是自然数。在可扩展IOV设备230中可以存在任何数量的ADI(即,取决于实现方式),并且在计算平台101中存在一个或多个可扩展IOV设备(例如,网络I/O设备110)。在计算平台中所使用的可扩展IOV设备的数量取决于实现方式。每个ADI使用一个或多个设备后端资源330。例如,ADI 1(520)使用后端资源1(528),ADI 2(522)使用后端资源2(530),ADI 3(524)使用后端资源3(532)、后端资源4(534)和后端资源5(536),以及ADI M(526)使用后端资源N(538)。在可扩展IOV设备230中可以存在任何数量的后端资源。在可扩展IOV设备中的后端资源的数量取决于实现方式。
[0085] 任何虚拟设备508、虚拟设备510、虚拟设备512可以针对I/O请求采用慢速路径或快速路径。例如,虚拟设备1(508)调用慢速路径软件模拟514或者到ADI 1(520)的快速路径直接映射540。例如,虚拟设备1(508)还经由快速路径直接映射540调用ADI 2(522)。例如,虚拟设备2(510)调用慢速路径软件模拟516或经由快速路径直接映射542调用ADI 3(524)。例如,虚拟设备K(512)调用慢速路径软件模拟518或经由快速路径直接映射544调用ADI M(526)。
[0086] 与用每个VF的唯一请求者ID(RID)标记其请求的SR-IOV VF不同,在本发明的实施例中,来自PF的所有ADI的请求都被标记有PF的RID。相反,来自ADI的请求通过端到端PASID TLP前缀中的进程地址空间标识符(PASID)来进行区分。PCI快速规范定义了事务的PASID TLP前缀中的进程地址空间标识符(PASID),该PASID与RID结合来标识与请求相关联的地址空间。
[0087] 对PASID值所针对的地址空间的定义取决于根联合体DMA重新映射硬件能力以及通过软件对这些硬件的编程。具有用于定向I/O的 虚拟化技术(修订版3.0或更高版本)的计算平台通过PASID粒度地址转换能力支持可扩展IOV架构。取决于对这种DMA重新映射硬件的编程,由具有PASID的请求所针对的地址空间可以是主机物理地址(HPA)、主机虚拟地址(HVA)、主机I/O虚拟地址(HIOVA)、客体物理地址(GPA)、客体虚拟地址(GVA)、客体I/O虚拟地址(GIOVA)等。针对不同的PASID值,所有这些地址空间类型可以在计算平台101上共存,并且可以配置来自一个或多个可扩展IOV设备的ADI来使用这些PASID。
[0088] 当将ADI指派给地址域(例如,VM 422、容器或进程)时,ADI被配置有地址域的唯一PASID,并且ADI的存储器请求在PASID TLP前缀中被标记有PASID值。如果将多个ADI指派给相同的地址域,则可以为多个ADI指派相同的PASID。如果属于被指派给VM的虚拟设备(VDEV)的ADI进一步被映射到VM内的次要地址域(例如,应用进程),则为每个这样的ADI指派与次要地址域相对应的唯一PASID。这实现诸如在VM内的共享虚拟存储器(SVM)之类的使用,其中为客体应用进程指派ADI,并且类似于客体应用进行的CPU访问的嵌套地址转换(GVA到GPA到HPA),来自客体的ADI的请求也受到DMA重新映射硬件的相同嵌套转换。取决于使用模型,还可以允许ADI使用多于一个PASID值,并且在这种情况下,与哪个请求一起使用哪个PASID值的语义与可扩展IOV设备相关。例如,ADI可以被配置为利用表示受限控制域的一个PASID来访问元数据、命令和完成,而数据访问与ADI被指派给的域的PASID相关联。
[0089] 在实施例中,支持可扩展IOV架构的设备230支持由PCI快速规范定义的PASID能力并且符合所有相关联的要求。在PF 232上启用ADI之前,PF 232上的PASID能力由软件启用。在激活ADI之前,ADI被配置有PASID值。由ADI生成的所有上游存储器请求(除了地址转换服务(ATS)转换的请求之外)都使用PASID TLP前缀而标记有被指派的PASID值。在实施例中,ADI不能在没有PASID的情况下生成存储器请求(除了ATS转换的请求之外),或者ADI不能在PASID TLP前缀中的PASID值不是ADI的被指派的PASID值的情况下生成存储器请求。
[0090] 每个ADI的存储器映射的I/O(MMIO)322寄存器被托管在托管PF 232的PCI快速基址寄存器(BAR)320中的一个或多个内。每个ADI的MMIO 322寄存器都被包含在一个或多个系统页面大小和对齐的区域中,并且这些区域可以是在PF的MMIO空间322内的连续或分散的区域。在PF的MMIO内的系统页面大小区域的数量和位置与特定ADI之间的关联是设备特定的。可扩展IOV设备所支持的系统页面大小经由下面所描述的Intel可扩展IOV枚举能力进行报告。在实施例中,对于 64位计算平台,系统页面大小为4千字节(KB)。
[0091] 支持可扩展IOV架构的设备将其ADI MMIO 322寄存器划分成两个类别:(a)针对快速路径操作频繁访问的MMIO寄存器;以及(b)针对慢速路径(控制、配置、管理等)操作不频繁访问的MMIO寄存器。将哪种操作指定为慢速路径相对快速路径的定义是设备特定的。PF 232将这两个类别中的寄存器定位在不同的系统页面大小区域中。这使得诸如主机OS/VMM 
228之类的虚拟化软件能够将快速路径操作直接映射到一个或多个组成ADI,同时在软件
514、软件516、软件518中对慢速路径操作进行模拟。
[0092] 在实施例中,设备实现64位BAR 320,使得高于4千兆字节(GB)的地址空间可以用于对ADI MMIO 322资源进行扩展。另外地,在一个实施例中,由于不可预取的BAR甚至使用具有64位BAR的低于4GB的MMIO空间,设备实现可预取的64位BAR。
[0093] 能够生成中断的ADI仅生成消息信令中断(MSI)(无传统中断)。ADI不与PF或另一ADI共享中断资源/消息。ADI可以支持一个或多个中断消息。例如,由PF上的N个队列组成的ADI可以支持N个中断消息,以区分针对每个队列的工作到达或完成,其中N是自然数。
[0094] 可扩展IOV架构使得设备实现能够支持大量ADI,并且每个ADI可以使用多个中断消息。为了支持针对所有ADI的大量的中断消息存储,定义了针对ADI 328的称为中断消息存储装置(IMS)的设备特定的构造。IMS 328使得设备能够以设备特定的优化方式存储针对ADI的中断消息,而没有PCI快速定义的MSI-X能力的可扩展性约束。
[0095] 即使IMS存储组织是设备特定的,在一个实施例中,IMS条目也使用与PCI快速MSI-X表条目相同的中断消息地址和数据格式来存储并生成中断。存储在IMS 328中的中断消息由DWORD大小数据有效载荷和64位地址组成。IMS 328还可以可选地支持每消息掩蔽和待处理位状态,类似于PCI快速MSI-X能力中的每向量掩蔽和待处理位阵列。在实施例中,IMS资源由主机驱动程序412编程。
[0096] 托管ADI的PF可以支持PCI快速定义的MSI或MSI-X能力。由PF 232生成的中断可以使用由PCI快速规范指定的PF的MSI或MSI-X能力326,而由ADI生成的中断可以使用设备特定的IMS 328。根据本发明的实施例的特定主机OS 150/VMM 180实现方式支持将IMS 328用于PF的中断和/或将PF的MSI-X表用于ADI中断。
[0097] IMS 328的大小、位置和存储格式是设备特定的。例如,一些设备可以将IMS实现为设备上存储装置,而管理被保存到主存储器130并从主存储器130恢复的上下文的其他有状态设备可以将IMS实现为上下文特权状态的一部分。在任一种方法中,设备可以将IMS 328实现为一个统一存储结构或者实现为分散的每ADI存储结构。如果IMS 328在主机主存储器130中实现,则ADI可以在可扩展IOV设备上缓存IMS条目。如果可扩展IOV设备实现IMS缓存,则可扩展IOV设备还为设备特定的驱动程序实现设备特定的接口,以使得IMS高速缓存条目无效。
[0098] IMS 328由主机驱动程序软件412管理,并且不能从客体分区502、客体分区504、客体分区506中的客体或用户模式驱动程序直接访问。在可扩展IOV设备内,不能从ADI直接访问IMS存储装置,相反ADI可以仅通过PF的“中断消息生成逻辑”来请求中断生成。这确保了ADI不能修改IMS内容,并且ADI可以仅使用由主机驱动程序软件412指派给对应ADI的IMS条目来间接地生成中断。
[0099] 在基于Intel架构(IA)的64位架构计算平台上,消息信令中断在没有PASID TLP前缀的情况下作为DWORD大小未转换的存储器写入被发出以寻址范围0xFEExxxxx。由于ADI生成的所有存储器请求都包括PASID TLP前缀,而中断消息是在没有PASID TLP前缀的情况下生成的,因此通过ADI生成对中断消息地址(基于IA的64位计算平台上的0xFEExxxxx)的DMA写入并且使得平台将DMA写入解释为中断消息是不可能的。
[0100] 一个ADI的操作或运行不得影响另一ADI的运行或PF 232的运行。来自ADI的每个存储器请求(除了ATS转换的请求之外)必须具有这样的PASID TLP前缀:在PASID TLP前缀中使用ADI的指派的PASID值。ADI的PASID身份由特权软件(例如,通过主机驱动程序412)访问或修改。
[0101] 由于可扩展IOV设备230上的ADI是PF 232的一部分,所以PCI快速访问控制服务(ACS)能力不适用于ADI之间的隔离。相反,设备禁用ADI之间以及ADI与PF之间的(在设备内部或在I/O结构出口处的)对等访问。独立于可扩展IOV架构支持,PF 232可以支持ACS指南,用于根据PCI快速规范跨端点功能或设备进行隔离。
[0102] ADI的服务质量(QoS)被定义为特定于给定的可扩展IOV设备。ADI QoS属性由主机驱动程序412管理,并且由VDCM 402通过主机驱动程序412接口控制。
[0103] ADI特定的错误是可以归因于特定ADI的错误,例如,格式错误的命令或地址转换错误。这样的错误不会影响其他ADI或PF 232的运行。对ADI特定的错误的处理以设备特定的方式实现。
[0104] 在不影响其他ADI的操作的情况下,每个ADI是可独立地重置的。然而,与SR-IOV VF 214不同,ADI不支持功能级别重置(FLR)能力。相反,通过到主机驱动程序412的软件接口经由如图4所示的ADI重置配置410来执行对ADI的重置。为了支持ADI重置,可扩展IOV设备实现接口以通过特定域(或PASID)中止(例如,丢弃)对ADI的飞行中的操作和被接受的操作。在实施例中,由ADI组成的VDEV 404可以通过请求主机驱动程序412暴露可以由VDCM 402模拟的虚拟FLR能力,以针对VDEV 404的组成ADI 428、ADI 430、ADI 432或ADI 434执行ADI重置。
[0105] ADI重置确保直到满足以下条件才将重置报告为完成:a)由ADI进行的所有DMA写入操作被排空或中止;b)由ADI进行的所有DMA读取操作已经完成或中止;c)来自ADI的所有中断已经生成;d)如果ADI支持地址转换服务(ATS),则由ADI进行的所有ATS请求都已经完成或中止;以及e)如果ADI支持页面请求服务(PRS),则ADI将不再生成页面请求。此外,已经接收到针对由ADI生成的针对所有页面请求的页面响应,或者ADI将丢弃针对任何未完成页面请求的页面响应。
[0106] 在实施例中,PF 232支持功能级别重置(FLR),并且可选地支持附加的设备特定的全局重置控制。PF 232上的全局重置操作和FLR重置其所有ADI,并且将PF返回到其中ADI未被配置的状态。
[0107] 在实施例中,PF 232支持保存并恢复ADI状态以促进诸如实时迁移和暂停/重新开始由这样的ADI组成的虚拟设备之类的操作。例如,为了支持ADI暂停,可扩展IOV设备230实现接口以通过特定域(或PASID)将对ADI的飞行中的操作和被接受的操作排空(即,完成)。在实施例中,还通过主机驱动程序412接口来实现ADI暂停、ADI状态保存、ADI状态恢复和从恢复状态进行ADI重新开始。
[0108] PF 232通过主机驱动程序412接口向诸如VDCM 402之类的系统软件报告对可扩展IOV架构的支持。如果主机驱动程序412报告对可扩展IOV架构的支持,则主机驱动程序412支持接口的扩展集合以枚举、提供、实例化并管理PF上的ADI。诸如VDCM 402之类的系统软件通过主机驱动程序412在可扩展IOV设备230上执行所有可扩展IOV指定的操作。
[0109] 另外地,在一个实施例中,在没有主机驱动程序依赖性的情况下,针对诸如VDCM 402之类的系统软件和用于检测支持可扩展IOV架构的设备的软件工具定义PCI快速指定供应商特定扩展能力(DVSEC)。主机驱动程序412仍然负责通过系统软件特定接口实现可扩展IOV架构和相关操作。
[0110] 图6示出了示例可扩展IOV DVSEC结构600的图。直到偏移0xA的字段是标准DVSEC能力报头信息。有关这些字段的详细描述,请参考PCI快速DVSEC报头。其余字段在下面描述。
[0111] 功能依赖性(DEP)链接(只读(RO))字段602在偏移0xA处并且具有一个字节的大小。设备的编程模型可以在功能集之间具有供应商特定的依赖性。功能依赖性链接字段602用于描述这些依赖性。该字段描述PF 232之间的依赖性。ADI依赖性与其PF的依赖性相同。如果PF 232独立于可扩展IOV设备230的其他PF,则该字段包含PF自己的功能号。如果PF依赖于可扩展IOV设备的其他PF,则该字段包含在相同功能依赖性列表(FDL)中的下一PF的功能号。FDL中的最后一个PF包含FDL中第一个PF的功能号。
[0112] 在偏移0xB处的标志字段604描述PF之间的依赖性。标志字段604(只读)在偏移0xB处并且具有一个字节的大小。在实施例中,标志604字段包括在字节的位0中的同构(H)标志,并且位1至位7被预留。当H标志被报告为置位时,H标志指示FDL中的所有PF必须被启用(以设备特定的方式)以用于可扩展IOV操作。如果FDL中的PF中的一些但不是所有被启用以用于可扩展IOV操作,则行为是未定义的(即,如果H标志被报告为置位,则不能一个PF处于可扩展IOV操作模式并且另一PF处于SR-IOV操作模式)。如果H标志未置位,则FDL中的PF可以处于不同模式。
[0113] 所支持的页面大小(只读)字段606在偏移0xC处并且具有四个字节的大小。所支持n+12的页面大小字段606指示由PF 232支持的页面大小。如果位n被置位,则PF支持2 的页面大小。例如,如果位0被置位,则PF支持4KB页面。页面大小描述了ADI MMIO 322页面的最小对齐要求,使得可以将ADI MMIO 322页面独立指派给不同的地址域。在实施例中,PF被要求支持4KB页面大小。PF可以支持附加的系统页面大小以用于跨主机平台架构的广泛兼容性。
[0114] 系统页面大小(读取-写入(RW))字段608在偏移0x10处并且具有四个字节的大小。系统页面大小字段608定义系统用于映射ADI的MMIO 322页面的页面大小。软件将系统页面大小的值设置为在所支持的页面大小字段中设置的页面大小中的一个。与所支持的页面大小一样,如果在系统页面大小中置位了位n,则与该PF相关联的ADI支持2n+12的页面大小。例如,如果位1被置位,则设备使用8KB的页面大小。如果系统页面大小为零,多于一个位被置位,或者在所支持的页面大小中未被置位的位在系统页面大小字段中被置位,则行为未定义。
[0115] 当写入系统页面大小字段608时,PF 232在系统页面大小边界上对齐所有ADI MMIO 322资源。在对PF的PCI命令寄存器中的存储器空间使能位进行置位之前必须先配置系统页面大小。如果在存储器空间使能位被置位之后修改系统页面大小,则行为未定义。默认值为0000 0001h,这指示4KB的系统页面大小。
[0116] 能力(只读)字段610在偏移0x14处并且具有四个字节的大小。在实施例中,能力字段610包括在位0中的IMS支持标志,并且位1至位31被预留。IMS支持标志指示设备中对中断消息存储装置(IMS)的支持。当IMS支持标志为0时,设备不支持IMS。当IMS支持标志为1时,设备支持IMS。
[0117] 如果虚拟化软件(例如,VDCM 402)不支持PF本身的IMS使用(仅支持用于PF ADI的IMS使用),则当PF被直接指派给域时,为了兼容性,虚拟化软件可以将虚拟可扩展IOV能力暴露给域,其中IMS支持标志被报告为0。
[0118] 在实施例中,可扩展IOV架构依赖于以下平台级别能力:a)在支持根端口(RP)、根联合体(RC)和DMA重新映射硬件单元中支持PCI快速PASID TLP前缀(有关PASID TLP前缀支持的详细信息,请参考PCI快速修订版4.0规范);以及b)通过DMA重新映射硬件(例如,由在用于定向I/O的 虚拟化技术( VT)( VT-d)修订版3.0或更高版本中的可扩展模式地址转换定义的)进行PASID粒度地址转换。
[0119] 如由 VT-d定义的可扩展模式地址转换涉及三阶地址转换。其他实施例可以使用其他方法。首先,上游请求中的请求者ID(RID)(总线/设备/功能号)用于查询指定以RID(PF或SR-IOV VF)粒度的转换行为的根和上下文结构。上下文结构指代PASID结构。其次,如果请求包括PASID TLP前缀,则来自TLP前缀的PASID值用于查询指定以PASID(目标地址域)粒度的转换行为的PASID结构。如果请求不具有PASID TLP前缀,则相反使用上下文结构中由软件编程的PASID值。对于每个PASID,相应的PASID结构条目可以被编程以指定第一级、第二级、直通或嵌套转换功能,以及对第一级页表结构和第二级页表结构的引用。最后,请求中的地址受到第一级页表结构、第二级页表结构或这两个页表结构进行的地址转换,这取决于转换功能的类型。
[0120] PASID粒度地址转换使得来自PF上的每个ADI的上游请求能够具有唯一的地址转换。VDCM 402可以使用PF 232上的任何这样的ADI 428、ADI 430、ADI 432或ADI 434来组成虚拟设备404,该虚拟设备404可以被指派给任何类型的地址域(例如,VM或机器容器的客体物理地址空间、裸机容器的I/O虚拟地址、应用进程或在VM内操作的这种客体容器或进程的共享CPU虚拟地址)。
[0121] 对于跨设备的中断隔离,诸如主机OS 150、VMM 180和/或VDCM 402之类的主机系统软件启用中断重新映射,并且对于在设备上的MSI、MSI-X 326或者IMS 328中编程的所有中断消息使用可重新映射的中断消息格式。有关中断重新映射的细节,请参考用于定向I/O的Intel虚拟化技术规范。
[0122] 在各种实施例中,支持可扩展IOV架构的计算平台还支持已发布中断(Posted Interrupt)能力。已发布中断通过使得中断消息能够在不消耗主机处理器中断向量的情况下在客体中断向量空间中操作来实现可扩展的中断虚拟化。已发布中断另外地在没有管理程序处理开销的情况下实现将虚拟中断直接递送到活动虚拟处理器。有关已发布中断的细节,请参考用于定向I/O架构的Intel虚拟化技术规范。已发布中断操作对端点设备是透明的。
[0123] 图7示出了用于可扩展模式地址转换的示例高级别转换结构组织700。在实施例中,使用可扩展模式根表702来完成可扩展模式地址转换。可扩展模式根表702包括多个条目。在该示例中,在可扩展模式根表中的条目的数量是256,即计算平台101中可能的总线的最大数量。在可扩展模式根表702中的示例条目N(708)指向可扩展模式下层上下文表710中的条目以及指向可扩展模式上层上下文表712中的条目。在实施例中,在可扩展模式下层上下文表710中有128个条目,编号为设备(DEV)=0条目714直到设备=15条目716(16个设备中的每一个具有八个条目)。在可扩展模式下层上下文表中的每个条目指定一个功能。在一个实施例中,功能ID是0到7之间的数字。在实施例中,在可扩展模式上层上下文表712中有128个条目,编号为设备=16条目718直到设备=31条目720(16个设备中的每一个具有八个条目)。在可扩展模式上层上下文表中的每个条目指定一个功能。在可扩展模式下层上下文表710或可扩展模式上层上下文表712中的所选定的条目指向可扩展模式PASID目录722。在实施例中,在可扩展模式PASID目录722中有2^14个条目,从条目编号0(724)到条目编号2^
14-1(726)。在一个实施例中,到目录的索引由PASID的位6到位19形成。在可扩展模式PASID目录722中的所选定的条目指向在可扩展模式PASID表728中的所选定的条目。在实施例中,在可扩展模式PASID表728中有64个条目,从条目编号0(730)到条目编号63(732)。在一个实施例中,到可扩展模式PASID表728的索引由PASID的位0到位5形成。在可扩展模式PSID表
728中的所选定的条目指向第一级页表结构734以及指向第二级页表结构736。
[0124] 本发明的实施例提供了用于执行VM从一个服务器到另一服务器的实时迁移的机制。利用S-IOV,在VDCM 402中实现创建模拟接口和迁移过程的工作。因此,系统管理员具有对实时迁移的配置的完全控制权,而不是依赖于VM中的用户。
[0125] 图8示出了VM的实时迁移的示例图。如上面所描述的,S-IOV架构定义了作为主机OS 150栈的一部分的VDCM 402。VDCM 402负责配置并管理客体VM 1(802)中的VDEV 1(804)的组成。在实施例中,VDCM 402检测VM何时正在被实时迁移,并且将在客体VM 1(802)中的VDEV 1(804)的数据路径(例如,快速路径806)切换到模拟接口(例如,慢速路径SW模拟808)。在一个实施例中,这是使用桥810来完成的。在另一实施例中,这是使用MAC-VTap模块(未示出)来完成的。因此,在不需要由用户干预的情况下,对在客体VM 1(802)中的VDEV 1(804)的故障转移是无缝的,并且由在主机OS 150中的VDCM 402管理。MAC-VTap是一种基于Macvlan和TAP设备驱动程序的组合的 设备驱动程序,MAC-VTap允许创建虚拟(类似抽头的)接口。每个虚拟网络接口都被指派有自己的MAC和IP地址,然后将每个虚拟网络接口附接到物理接口(也称为下层接口)。Macvlan是 内核驱动程序,其使得创建可以附接到物理网络适配器(即,下层接口)的虚拟网络接口是可能的。TAP是一种仅软件接口,其允许用户空间程序经由TAP设备文件(/dev/tapN)进行读取和写入。
[0126] 在实施例中,客体VM 1(802)不需要知道用于故障转移路径的模拟接口(慢速路径SW模拟808)。因此,在客体VM 1(802)中的用户不需要进行用于在模拟接口808与快速路径接口806之间创建团队接口的附加动作。在实施例中,VDCM 402处理到模拟路径的故障转移。VDCM 402创建与被创建的每个VDEV接口相对应的模拟接口808。然后,当VDEV被弹出时,将数据业务故障转移到模拟接口。这使得本故障转移解决方案对在客体VM 1(802)中的用户是无缝的。
[0127] 由VDCM 402管理的故障转移解决方案的一个优点是系统管理员不必在客体VM 1(802)中进行任何附加设置来创建模拟接口808并将模拟接口与快速路径806相关联。另外地,在客体VM 1(802)中的VDEV 1(804)可以继续以其最佳性能级别运行,因为在其之上不存在由团队合作驱动程序软件模块引入的开销。
[0128] VDCM 402能够对来自客体VM的某些输入进行捕捉。为了支持实时迁移,VDCM 402陷入中断,当发生实时迁移时,该中断在客体VM 1(802)中触发VDEV 1(804)的“热拔出”。当VDCM检测到VDEV的“热拔出”时,VDCM将该VDEV的数据路径切换到主机OS 150中的模拟接口808。与利用客体VM 1内部的附加模拟设备在客体VM 1(802)中创建团队合作接口相反,本发明的实施例通过将把数据路径从VDEV 1(804)切换到模拟接口的责任推向VDCM 402来提供利用S-IOV VDEV的实时迁移。
[0129] 模拟接口接管数据路径,并且在迁移VM时对数据业务的处理保持不被中断。VDCM 402针对快速路径806移除硬件依赖性以及对可指派设备接口(ADI)的依赖性,并且允许通过模拟接口808对数据路径进行无缝迁移。当实时迁移完成时,VDCM 402将数据路径切换回快速路径806。
[0130] 可以使用主机OS 150中可用的若干方法中的一个来创建模拟接口(例如,慢速路径SW模拟808)。例如,在 Hyper-V中,可以通过设置虚拟NIC的属性使得硬件加速被禁用来创建模拟接口。这些设置是在Hyper-V虚拟管理器中的选项。在 中,可以使用桥或MAC-VTap或OS提供的其他构造来创建模拟接口。
[0131] 对于管理员创建的每个VDEV接口,VDCM 402都创建一个模拟接口。由VDCM 402使用以完成此操作的过程取决于正在使用哪个OS。
[0132] 在实施例中,为模拟接口指派和与其相关联的VDEV相同的MAC地址。将模拟接口设置为“备用”模式——即,未启用针对模拟接口的数据路径。该方法基于创建故障转移团队的概念,其中团队中仅有一个接口是随时活动的,并且团队使用团队中主适配器的MAC地址。当活动接口故障时,将数据业务故障转移到备用接口中的一个,并且由于该接口使用相同的MAC地址,因此不会存在业务中断。
[0133] 当VM被实时迁移时,依靠物理功能232的任何设备接口都是“热拔出的”(例如,断连的)。在S-IOV架构中,VDEV是热拔出的或从客体VM弹出。该动作由VDCM 402捕捉。当VDCM 402检测到VDEV 1(804)正在被弹出时,VDCM执行数据路径(例如,快速路径806)到与该VDEV相关联的模拟接口(例如,慢路径SW模拟808)的故障转移。在这种情况下,使得快速路径806是不活动的并且慢速路径SW模拟808被激活。因此,即使VDEV 1(804)已经被弹出,去往客体VM 1(802)的数据业务也将持续流动。该故障转移概念基于团队合作模型,其中某些数据路径是活动的,而某些数据路径处于备用模式。然后,当活动的数据路径故障时,将使得备用路径是活动的,并且使得VDEV路径是不活动的。
[0134] 已经存在实现该想法的团队合作驱动程序和方法。实时迁移是由各种管理程序实现的概念。例如, Hyper-V允许对VM(具有与其相关联的SR-IOV虚拟网络设备)进行实时迁移。可以利用大多数管理程序来支持实时迁移,只要这些管理程序使用模拟接口即可。
[0135] 一旦实时迁移完成,如果运行客体VM 802的新服务器具有支持S-IOV的设备,则管理员可以将VDEV 1(804)“热添加”(例如,连接)回客体VM中。可以由VDCM 402触发由于“热添加”而引起的中断来捕捉该动作。现在可以在该新的VDEV 1(804)上传输数据业务。
[0136] 图9示出了VM的实时迁移的示例流程图。在框902处,主机OS 150中的VDCM 402在客体VM 802中创建虚拟设备(VDEV)804。在框904处,VDCM 402为VDEV 804创建快速路径接口806。在框906处,VDCM 402为VDEV 804创建模拟接口808。最初,快速路径接口806是活动的,并且模拟接口808处于备用模式。在框908处,VDEV根据需要通过客体VM 802和/或物理功能232通过快速路径接口806传输数据。如果在某个时间点,客体VM要从一个服务器实时迁移到另一服务器,则在框910处VDCM 402检测VDEV 804从客体VM 802的“热拔出”。在框912处,VDCM 402将针对VDEV 804的数据传输从快速路径接口806切换到模拟接口808。在一个实施例中,这通过将快速路径接口置于备用模式并将模拟接口808设置为活动的来完成。
然后,VDEV根据需要通过客体VM 802和/或物理功能232通过模拟接口808传输数据。在框
914处,主机OS 150执行客体VM 802从一个服务器到另一服务器的实时迁移。当客体VM在新服务器上启动并运行(即,实时迁移成功完成)时,VDCM 402检测到VDEV 804向客体VM 802的“热添加”。在框918处,VDCM 402将针对VDEV 804的数据传输从模拟接口808切换回快速路径接口806。在一个实施例中,这通过将模拟接口808置回备用模式并将快速路径接口806设置为活动的来完成。针对VDEV 804的进一步数据传输通过快速路径接口806执行。
[0137] 图10示出了存储介质1000的示例。存储介质1000可以包括制品。在一些示例中,存储介质1000可以包括任何非暂时性计算机可读介质或机器可读介质,例如,光学、磁性半导体存储装置。存储介质1000可以存储各种类型的计算机可执行指令,例如,用于实现S-IOV架构组件的逻辑流的指令1002。计算机可读或机器可读存储介质的示例可以包括能够存储电子数据的任何有形介质,包括易失性存储器或非易失性存储器、可移除或不可移除存储器、可擦除或不可擦除存储器、可写或可重写存储器等等。计算机可执行指令的示例可以包括任何合适类型的代码,例如,源代码、编译代码、解释代码、可执行代码、静态代码、动态代码、面向对象的代码、可视代码等。示例不限于该上下文。
[0138] 图11示出了示例计算平台1100。在一些示例中,如图11中所示,计算平台1100可以包括处理组件1102、其他平台组件1104和/或通信接口1106。
[0139] 根据一些示例,处理组件1102可以执行针对存储在存储介质900上的指令的处理操作或逻辑。处理组件1102可以包括各种硬件元件、软件元件或两者的组合。硬件元件的示例可以包括设备、逻辑器件、组件、处理器、微处理器、电路、处理器电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、存储器单元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。软件元件的示例可以包括软件组件、程序、应用、计算机程序、应用程序、设备驱动程序、系统程序、软件开发程序、机器程序、操作系统软件、中间件固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。确定示例使用硬件元件和/或软件元件实现可以根据任何数量的因素(例如,期望的计算速率、功率平、热容差、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其他设计或性能约束,如给定示例所期望的)而变化。
[0140] 在一些示例中,其他平台组件1104可以包括常见计算元件,例如,一个或多个处理器、多核心处理器、协处理器、存储器单元、芯片组、控制器、外围设备、接口、振荡器、定时设备、视频卡、音频卡、多媒体输入/输出(I/O)组件(例如,数字显示器)、电源等。存储器单元的示例可以包括但不限于以一个或多个更高速度存储器单元形式的各种类型的计算机可读和机器可读存储介质,例如,只读存储器(ROM)、随机存取存储器(RAM)、动态RAM(DRAM)、双倍数据速率DRAM(DDRAM)、同步DRAM(SDRAM)、静态RAM(SRAM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、诸如可以是字节或块可寻址的3-D交叉点存储器之类的非易失性存储器的类型。非易失性类型的存储器还可以包括其他类型的字节或块可寻址的非易失性存储器,例如但不限于,多阈值级别NAND闪速存储器、NOR闪速存储器、单级或多级PCM、电阻式存储器、纳米线存储器、FeTRAM、结合忆阻器技术的MRAM、STT-MRAM或上述存储器中的任何存储器的组合。其他类型的计算机可读和机器可读存储介质还可以包括磁卡或光卡、诸如独立磁盘冗余阵列(RAID)驱动器之类的设备阵列、固态存储器设备(例如,USB存储器)、固态驱动器(SSD)以及适用于存储信息的任何其他类型的存储介质。
[0141] 在一些示例中,通信接口1106可以包括用于支持通信接口的逻辑和/或特征。对于这些示例,通信接口1106可以包括根据各种通信协议或标准操作以通过直接通信链路或信道或网络通信链路或信道进行通信的一个或多个通信接口。直接通信可以经由使用在一个或多个行业标准(包括后代和变体)中所描述的通信协议或标准(例如,与PCIe规范相关联的那些)来发生。网络通信可以经由使用诸如在IEEE公布的一个或多个以太网标准中所描述的那些通信协议或标准之类的通信协议或标准来发生。例如,一个这样的以太网标准可以包括IEEE 802.3。网络通信也可以根据诸如OpenFlow交换机规范之类的一个或多个OpenFlow规范来发生。
[0142] 计算平台1100的组件和特征(包括由存储在存储介质1000上的指令所表示的逻辑)可以使用分立电路、ASIC、逻辑门和/或单芯片架构的任何组合来实现。此外,计算平台1100的特征可以在适当的情况下使用微控制器、可编程逻辑阵列和/或微处理器或前述的任何组合来实现。应该注意的是,硬件、固件和/或软件元件可以在本文中统称或单独称为“逻辑”或“电路”。
[0143] 应该认识到的是,图11的框图中示出的示例性计算平台1100可以表示许多潜在实现方式中的一个功能描述性示例。因此,对附图中所描绘的块功能的划分、省略或包含并不会推断出用于实现这些功能的硬件组件、电路、软件和/或元件需要在实施例中被划分、省略或包含。
[0144] 可以使用硬件元件、软件元件或两者的组合来实现各种示例。在一些示例中,硬件元件可以包括设备、组件、处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、ASIC、可编程逻辑器件(PLD)、数字信号处理器(DSP)、FPGA、存储器单元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。在一些示例中,软件元件可以包括软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。确定示例使用硬件元件和/或软件元件实现可以根据任何数量的因素(例如,期望的计算速率、功率水平、热容差、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其他设计或性能约束,如给定实现方式所期望的)而变化。
[0145] 一些示例可以包括制品或至少一种计算机可读介质。计算机可读介质可以包括用于存储逻辑的非暂时性存储介质。在一些示例中,非暂时性存储介质可以包括能够存储电子数据的一种或多种类型的计算机可读存储介质,包括易失性存储器或非易失性存储器、可移除或不可移除存储器、可擦除或不可擦除存储器、可写或可重写存储器等。在一些示例中,逻辑可以包括各种软件元件,例如,软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、API、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。
[0146] 可以使用表述“在一个示例中”或“示例”及其衍生词来描述一些示例。这些术语表示结合该示例所描述的特定特征、结构或特性被包括在至少一个示例中。在说明书中各处出现的短语“在一个示例中”不一定都指代相同的示例。
[0147] 本文包括表示用于执行所公开的架构的新颖方面的示例方法的逻辑流程或方案。虽然出于简化解释的目的,本文所示的一种或多种方法被示出并描述为一系列动作,但是本领域技术人员将理解并认识到,这些方法不受动作次序的限制。一些动作可以与本文所示出并描述的次序一致、以与本文所示出并描述的次序不同的次序发生和/或与其他动作同时发生。例如,本领域技术人员将理解并认识到,方法可以可替代地表示为一系列相互关联的状态或事件,例如,在状态图中。此外,并非方法中所示的所有动作都可以是新颖的实现方式所要求的。
[0148] 可以以软件、固件和/或硬件来实现逻辑流程或方案。在软件和固件实施例中,逻辑流程或方案可以由存储在至少一种非暂时性计算机可读介质或机器可读介质(例如,光学、磁性或半导体存储装置)上的计算机可执行指令来实现。实施例不限于该上下文。
[0149] 使用表述“耦合”和“连接”及其衍生词来描述一些示例。这些术语不一定旨在是彼此的同义词。例如,使用术语“连接”和/或“耦合”的描述可以指示两个或更多个元件彼此直接物理接触或电接触。然而,术语“耦合”还可以表示两个或更多个元件彼此不直接接触,但仍然彼此协作或交互。
[0150] 应该强调的是,提供了本公开的摘要以符合37C.F.R.第1.72(b)节,要求允许读者快速确定技术公开的本质的摘要。提交时理解的是,摘要不会用于解释或限制权利要求书的范围或含义。另外,在前面的具体实施方式中,可以看出,出于简化本公开的目的,各种特征在单个示例中被组合在一起。本公开的方法不应被解释为反映所要求保护的示例要求比每项权利要求中所明确引述的更多特征的意图。而是,如所附权利要求书所反映的,发明主题在于少于单个公开示例的所有特征。因此,所附权利要求书在此并入具体实施方式中,其中每项权利要求自身作为单独的示例。在所附权利要求书中,术语“包括(including)”和“其中(in which)”分别用作相应术语“包含(comprising)”和“其中(wherein)”的简明英语等同词。此外,术语“第一”、“第二”、“第三”等仅用作标记,并不旨在对其对象施加数字要求。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈