掌桥专利:专业的专利平台
掌桥专利
首页

云计算系统、命令处理方法及虚拟化仿真装置

文献发布时间:2023-06-19 12:22:51


云计算系统、命令处理方法及虚拟化仿真装置

技术领域

本申请涉及计算机技术领域,具体而言,涉及一种云计算系统、命令处理方法及虚拟化仿真装置。

背景技术

当前类NVMe(Non-Volatile Memory express,非易失性内存主机控制器接口协议)计算设备受到了广泛关注,这类设备的bar(base address register,基地址寄存器)空间的定义与NVMe标准类似,使用与NVMe标准类似的SQ/CQ(Submission/Completion Queue,请求/响应队列)队列的形式来提交命令和接收响应,将SQ/CQ队列划分为Admin SQ/CQ和IOSQ/CQ,其工作方式与NVMe盘类似,通过Admin命令执行设备的操作和控制,获取相应的设备状态,将相应的加速操作封装在IO命令中,甚至可以使用标准的NVMe驱动,从而简化了该类设备的使用和部署。

目前,这类NVMe设备在虚拟化和管控方面的支持较少,很多类NVMe设备在没有SR-IOV(Single Root IO Virtualization,单根虚拟化)支持的情况下,需要采用mdev(自动创建设备节点)驱动来提供虚拟化能力,但存在消耗CPU资源、延迟较大和运维困难的问题,在云上部署时面临不少的困难。

针对上述的问题,目前尚未提出有效的解决方案。

发明内容

本申请实施例提供了一种云计算系统、命令处理方法及虚拟化仿真装置,以至少解决相关技术中类NVMe设备在进行虚拟化管控过程时存在消耗CPU资源、延迟较大和运维困难的技术问题。

根据本申请实施例的一个方面,提供了一种云计算系统,包括:主设备,运行有至少一个虚拟机,该虚拟机与源设备中的仿真设备通过物理功能PF通道或虚拟功能VF通道连接;所述源设备,运行有仿真器,该仿真器用于为每个所述PF通道或VF通道设备仿真一个设备,得到所述仿真设备;所述仿真设备通过远程直接存储器访问RDMA模块与目标侧设备进行数据交互;所述目标侧设备,通过PCIe接口与资源池中的至少一个物理设备连接,并确定所述仿真设备与所述至少一个物理设备的映射关系;所述至少一个物理设备,与所述目标侧设备连接,用于执行所述目标侧设备经由所述源设备转发的目标任务请求,并通过所述仿真设备将所述目标任务请求的执行结果发送至所述主设备。

根据本申请实施例的另一方面,提供了一种命令处理方法,包括:仿真器接收主设备发送的通知消息,所述通知消息携带至少一个待执行命令,其中,所述待执行命令指示所述主设备中存在需要执行的待执行命令;所述仿真器在本地缓冲区存在空闲的情况下,从所述主设备的内存中读取至少一个所述待执行命令;所述仿真器响应目标侧设备发出的提取所述待执行命令的提取请求,向所述目标侧设备发送所述待执行命令,其中,所述目标侧设备将所述待执行命令发送到网络资源池中的物理设备;所述仿真器接收所述物理设备反馈的执行结果,其中,所述物理设备通过直接存储器访问方式访问所述主设备的内存,执行所述待执行命令。

根据本申请实施例的另一方面,还提供了另一种命令处理方法,包括:仿真器接收主设备发送的通知消息,所述通知消息携带至少一个待执行命令,其中,所述待执行命令指示所述主设备中存在需要执行的待执行命令;所述仿真器从主设备的内存中读取至少一个所述待执行命令,并向物理设备返回所述待执行命令;所述仿真器接收所述物理设备反馈的执行结果,其中,所述物理设备通过直接存储器访问方式访问所述主设备的内存,执行所述待执行命令。

根据本申请实施例的另一方面,还提供了一种虚拟化仿真装置,包括:第一接收模块,用于接收主设备发送的通知消息,所述通知消息携带至少一个待执行命令,其中,所述待执行命令指示所述主设备中存在需要执行的待执行命令;读取模块,用于在本地缓冲区存在空闲的情况下,从所述主设备的内存中读取至少一个所述待执行命令;发送模块,用于响应目标侧设备发出的提取所述待执行命令的提取请求,向所述目标侧设备发送所述待执行命令,其中,所述目标侧设备将所述待执行命令发送到网络资源池中的物理设备;第二接收模块,用于接收所述物理设备反馈的执行结果,其中,所述物理设备通过直接存储器访问方式访问所述主设备的内存,执行所述待执行命令。

根据本申请实施例的另一方面,还提供了一种非易失性存储介质,所述非易失性存储介质包括存储的程序,其中,在所述程序运行时控制所述非易失性存储介质所在设备执行上述的命令处理方法。

根据本申请实施例的另一方面,还提供了一种电子设备,包括:处理器;以及与所述处理器连接的存储器,所述存储器用于为所述处理器提供处理以下处理步骤的命令:仿真器接收主设备发送的通知消息,所述通知消息携带至少一个待执行命令,其中,所述待执行命令指示所述主设备中存在需要执行的待执行命令;所述仿真器在本地缓冲区存在空闲的情况下,从所述主设备的内存中读取至少一个所述待执行命令;所述仿真器响应目标侧设备发出的提取所述待执行命令的提取请求,向所述目标侧设备发送所述待执行命令,其中,所述目标侧设备将所述待执行命令发送到网络资源池中的物理设备;所述仿真器接收所述物理设备反馈的执行结果,其中,所述物理设备通过直接存储器访问方式访问所述主设备的内存,执行所述待执行命令。

在本申请实施例中,由于可以通过源设备中仿真设备与目标侧设备进行数据交互,并通过目标侧设备将主设备中的目标任务请求发送至物理设备,从而通过物理设备执行主设备中的相应目标任务请求,并在物理设备执行待处理命令后,将执行结果反馈至主设备,从而实现了虚拟化功能的卸载。另外,由于目标侧设备在确定执行待处理命令对应的物理设备时,是依据仿真设备与物理设备的映射关系确定的,即将物理设备作为执行目标任务请求的资源进行调度,因此,实现了物理设备的池化。基于上述分析可知,本申请实施例解决了相关技术中类NVMe设备在进行虚拟化管控过程时存在消耗CPU资源、延迟较大和运维困难的技术问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据相关技术的一种通过mdev对NVMe加速设备进行虚拟化的方案的示意图;

图2是根据相关技术的另一种通过Virtio对NVMe加速设备进行虚拟化的方案的示意图;

图3是根据本申请实施例的一种虚拟化卸载和池化的方案的示意图;

图4是根据本申请实施例的一种计算机终端的硬件结构框图;

图5是根据本申请实施例的一种命令处理方法的流程示意图;

图6是根据本申请实施例的一种一个物理设备被分配给多个仿真设备的示意图;

图7是根据本申请实施例的一种一个仿真设备映射到多个物理设备的示意图;

图8是根据本申请实施例的一种物理设备通过DMA访问主设备内存时地址映射的示意图;

图9是根据本申请实施例的一种虚拟化过程中IO命令转发流程的示意图;

图10是根据本申请实施例的另一种虚拟化卸载和池化的方案的示意图;

图11是根据本申请实施例的一种云计算系统的结构示意图;

图12是根据本申请实施例的一种虚拟化仿真装置的结构示意图;

图13是根据本申请实施例的另一种命令处理方法的流程示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:

Mdev:是busybox提供的一个工具,用在嵌入式系统中,相当于简化版的udev,作用是在系统启动和热插拔或动态加载驱动程序时,自动创建设备节点。文件系统中的/dev目录下的设备节点都是由mdev创建的,其在加载驱动过程中,根据驱动程序,在/dev目录下自动创建设备节点。

非易失性存储器标准(Non-Volatile Memory Express,NVMe),是运行在PCIE接口上的标准协议,是一种Host与SSD之间通信的协议。

Virtio:是对半虚拟化hypervisor中的一组通用模拟设备的抽象。该设置允许hypervisor导出一组通用的模拟设备,并通过一个通用的应用编程接口(API)让它们变得可用。半虚拟化hypervisor使来宾操作系统能够实现一组通用的接口,在一组后端驱动程序之后采用特定的设备模拟。后端驱动程序不需要是通用的,因为它们只实现前端所需的行为。除了前端驱动程序(在来宾操作系统中实现)和后端驱动程序(在hypervisor中实现)之外,virtio还定义了两个层来支持来宾操作系统到hypervisor的通信。在顶层(称为virtio)的是虚拟队列接口,它在概念上将前端驱动程序附加到后端驱动程序。驱动程序可以使用0个或多个队列,具体数量取决于需求。

PCIe(Peripheral Component Interconnect express,总线和接口标准):是一种高速串行计算机扩展总线标准。PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及QoS等功能。PCIe是一种分层协议,由事务层,数据链路层和物理层组成,数据链路层被细分为包括媒体访问控制(MAC)子层,其中,物理层被细分为逻辑和电子子层,PCIe链路是围绕称为通道的串行(1位)点对点连接的专用单向耦合的。;物理逻辑子层包含物理编码子层(PCS)。

SR-IOV(单根虚拟化):是PCIe规范的扩展,SR-IOV允许设备(如网络适配器)在各种PCIe硬件功能之间分离对其资源的访问,这些函数包含PCIe物理功能(PF)及一个或多个PCIe虚拟功能(VFs),每个VF与设备的PF关联。SR-IOV为每个PF和VF分配一个唯一的PCIe请求者ID(RID),该ID允许IO内存管理单元(IO Memory Management Unit简称为IOMMU)区分不同的流量流,并在PF与VFs之间应用内存和中断转换,这允许流量流直接传递到适当的Hyper-v父分区或子分区,因此,非特权数据流量将从PF流向VF,而不会影响其他VFs。SR-IOV使网络流量能够绕过Hyper-v虚拟化堆栈的软件交换机层,由于VF分配给子分区,因此网络流量直接在VF和子分区之间流动,软件仿真层中的IO开销会降低,并实现与无虚拟化环境中几乎相同的性能。

PF/VF(物理/虚拟功能):PF是支持SR-IOV接口的PCIe函数,其在PCIe配置空间中包括SR-IOV扩展功能,此功能用于配置和管理网络适配器的SR-IOV功能,例如启用虚拟化并公开PCIe虚拟功能VFs。PF微型端口驱动程序使用传统的NDIS微型端口驱动程序功能,提供对管理操作系统的网络IO资源的访问权限,以及用于管理为VFs在适配器上分配的资源。因此,在为VF分配任何资源之前,会在管理操作系统中加载PF微型端口驱动程序,释放为VFs分配的所有资源后,将停止PF微型端口驱动程序。

VF是网络适配器上的轻量PCIe功能,支持SR-IOV,VF与PF关联,表示网络适配器的虚拟化实例,每个VF都有其自己的PCI配置空间,并将网络适配器上的一个或多个物理资源(例如外部网络端口)与PF和其他VFs共享。VF不是完备的PCIe设备,但是,它提供了在Hyper-v子分区和基础SR-IOV网络适配器之间直接传输数据的基本机制,与数据传输关联的软件资源直接可用于VF,并独立于其他VFs或PF使用,通常,大多数这些资源的配置是通过在Hyper-v父分区的管理操作系统中运行PF微型端口驱动程序来执行的。VF作为虚拟网络适配器在hyper-v子分区中运行来宾操作系统,VF与SR-IOV网络适配器的NIC交换机上的虚拟端口(VPort)相关联后,在VM中运行的虚拟PCI(VPCI)驱动程序将公开VF网络适配器,公开后,来宾操作系统中的PnP管理器会加载VF微型端口驱动程序。

IOMMU(内存管理单元):IOMMU用于将物理内存地址重新映射到子分区所使用的地址。IOMMU独立于处理器使用的内存管理硬件进行操作。

DMA(Direct Memory Access,直接存储器访问):允许不同速度的硬件装置来沟通,而不需要依赖于CPU的大量中断负载。DMA传输将数据从一个地址空间复制到另外一个地址空间,当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成,这样的操作不仅没有让处理器工作拖延,反而可以被重新排程去处理其他的工作,DMA传输对于高效能嵌入式系统算法和网络是很重要的。在实现DMA传输时,由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题,即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程通常包括DMA请求、DMA响应、DMA传输、DMA结束4个步骤。

实施例1

相关技术中,对于没有SR-IOV功能的NVMe加速设备,主要是由QEMU(开源模拟器)通过软件虚拟化的方式,采用mdev(自动创建设备节点)驱动或者Virtio(半虚拟化)等方式来实现设备的虚拟化。

如图1所示,为一种通过QEMU mdev进行虚拟化的方法。设备厂商在mdev驱动中仿真VM对虚拟PCIe配置空间和bar空间的访问,并将对bar空间的访问转换为对虚拟Adminqueue、IO queue的管理和操作,同时mdev驱动还需要实现对IO中断的仿真,以便VM能使用标准的驱动程序对mdev仿真的虚拟设备进行操作。具体地,mdev驱动对Admin queue的仿真如下:首先,通过物理NVMe设备的驱动获取物理NVMe盘相关属性;对于识别等命令,根据物理NVMe盘的属性以及当前mdev的配置来构造相应的响应,并发送虚拟的中断请求;对于创建IO queue、删除IO queue等操作,创建相应的虚拟IO queue,并调用物理NVMe盘的驱动构造相应的物理IO queue,并将虚拟的IO queue、虚拟中断分别与物理IO queue和物理中断关联起来;对于获取日志信息等请求,返回相应的日志信息。同时,mdev驱动对IO queue的仿真如下:调用IOMMU的驱动将IO命令中的DMA请求的地址修改为相应VM中的内存空间地址,并pin住相应的空间和设置IOMMU转换表;完成LBA(Logical Block Address,逻辑区块地址)的转换;物理NVMe通过DMA方式直接访问VM内存空间。

如图2所示,为另一种通过QEMU Virtio进行虚拟化的方法。其中,VM与QEMU之间通过标准的Virtio标准进行交互,QEMU在Virtio Driver(backend)调用NVMe Driver来实现最终的功能。

可以看出,上述的虚拟化方式存在以下诸多缺点:需要CPU核资源参与虚拟化,会带来额外的开销;IO命令中的DMA地址需要在mdev驱动中经过两次转换,不能利用IOMMU自身提供的IO虚拟化能力,同时增加了延迟开销;QoS(Quality of Service,服务质量)和分片切分需要host驱动参与,给软件带来额外的开销;中断虚拟化需要频繁VM exit/VMentry切换,带来相应的性能损失;缺少物理隔离;管控对用户使用情况不感知。

为解决上述问题,本申请实施例提供了一种新的虚拟化卸载和池化的方案,如图3所示,在本地端采用仿真器来为每个PF/VF仿真一个设备,在PCIe SR-IOV的支持下,VM通过直通的方式来访问仿真设备,仿真器在本地响应Admin队列中的命令,根据命令内容执行对后端物理设备的Admin操作,对于IO队列中的命令,仿真器执行到后端物理设备IO命令的映射,并根据物理设备执行IO命令的结果,构造对VM中仿真设备的响应,如果在IO命令执行过程中,物理设备需要访问VM内存,那么通过DMA的方式发起对VM内存的访问。其中,TLPproxy中的TLP指的是PCIe协议传输层包,其作用是通过对原始TLP中的包进行处理,实现TLP的路由或者分发等能力,就类似于网络中的网络代理一样。管控的作用是配置所有的模块参数,检测系统中各模块的工作状态。与基于mdev的虚拟化方式相比,本方案将虚拟化的负载卸载到了本地卡上,由于采用了SR-IOV的虚拟化机制,避免了mdev虚拟化过程中对DMA地址重复转换和映射时卸载虚拟化所需要的CPU和内存开销,发挥了管控运营的优势,同时QoS的实现和细粒度资源切分组合更加高效。

在上述方案的基础上,本申请实施例提供了一种命令处理方法,图4示出了一种用于实现上述方法的计算机终端(或移动设备)的硬件结构框图。如图4所示,计算机终端40(或移动设备40)可以包括一个或多个(图中采用402a、402b,……,402n来示出)处理器402(处理器402可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器404、以及用于通信功能的传输模块406。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端40还可包括比图4中所示更多或者更少的组件,或者具有与图4所示不同的配置。

应当注意到的是,上述一个或多个处理器402和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端40(或移动设备)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。

存储器404可用于存储应用软件的软件程序以及模块,如本申请实施例中的方法对应的程序命令/数据存储装置,处理器402通过运行存储在存储器404内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的漏洞检测方法。存储器404可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器404可进一步包括相对于处理器402远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端40。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输模块406用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端40的通信供应商提供的无线网络。在一个实例中,传输装置406包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置406可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。

显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端40(或移动设备)的用户界面进行交互。

在上述运行环境下,本申请实施例提供的一种命令处理方法如图5所示,该方法流程至少包括步骤S502-S508,其中:

步骤S502,仿真器接收主设备发送的通知消息,通知消息携带至少一个待执行命令,其中,待执行命令指示主设备中存在需要执行的待执行命令。

在本申请一些可选的实施例中,主设备在生成待执行命令后,将待执行命令加载到通知消息中,然后发送至仿真器。具体地,发送方式包括:主设备每生成一个待执行命令就发送一次;或将预定时间段内产生的至少一个待执行命令加载到通知消息上发送一次,即将一段时间内产生的多个待执行命令全部加载到一条通知消息中发送至仿真器。

步骤S504,仿真器在本地缓冲区存在空闲的情况下,从主设备的内存中读取至少一个待执行命令。

在本申请一些可选的实施例中,仿真器在接收到主设备的通知消息后,需要判断本地缓冲区空间是否已满,若本地缓冲区存在空闲,则从主设备的内存中读取至少一个待执行命令;若本地缓冲区已满,则先处理已存在的虚拟命令,在本地缓冲区具有空闲后,再从主设备的内存中读取至少一个待执行命令。

仿真器在从主设备的内存中读取至少一个待执行命令后,将该待执行命令缓冲在本地,同时更新本地缓冲的指针,该指针用于指示各虚拟命令的缓冲地址。

步骤S506,仿真器响应目标侧设备发出的提取待执行命令的提取请求,向目标侧设备发送待执行命令,其中,目标侧设备将待执行命令发送到网络资源池中的物理设备。

在本申请一些可选的实施例中,仿真器在从主设备的内存中读取至少一个待执行命令后,通知目标侧设备存在需要执行的待执行命令,目标侧设备会向仿真器发送提取该待执行命令的提取请求,仿真器接收到提取请求后响应该提取请求向目标侧设备返回待执行命令;之后,目标侧设备将该待执行命令发送到网络资源池中的物理设备,由物理设备执行该待执行命令。

仿真器在向目标侧设备返回待执行命令后,同时更新本地缓冲的指针,该指针用于指示各虚拟命令的缓冲地址。

在本申请一些可选的实施例中,仿真器仿真得到至少一个仿真设备,而一个物理设备可以分配给多个仿真设备,即任一个物理设备都可以将自己的能力分配给多个仿真设备,为每个仿真设备分配一部分能力,这种分配主要通过QoS机制来进行实现。

具体地,QoS机制在本申请实施例中表现为:在仿真器仿真多个仿真设备的情况下,目标侧设备在接收到仿真器中任意一个仿真设备发送的待执行命令后,会将每个仿真设备已经执行的待执行命令的执行结果与分配的配额限额进行比较,如果执行结果的消耗资源量小于或等于配额限额,且该仿真设备有待处理的待执行命令,则通过仲裁器来选择任意一个仿真设备的待执行命令进行转发。

上述过程如图6所示,其中,Quota表示每个仿真设备的限额,Target为目标侧设备,在目标侧设备接收到多个仿真设备发送的待执行命令后,依据QoS机制从多个仿真设备中选择其中一个执行其IO命令。

步骤S508,仿真器接收物理设备反馈的执行结果,其中,物理设备通过直接存储器访问方式访问主设备的内存,执行待执行命令。

在本申请一些可选的实施例中,物理设备接收目标侧设备发送的待执行命令后,通过直接存储器访问方式访问主设备的内存,执行该待执行命令,并将得到的执行结果反馈给目标侧设备;目标侧设备得到执行结果后将其放入仿真器的响应缓冲区,同时进行本地缓冲;仿真器从响应缓冲区中提取执行结果并将该执行结果反馈给主设备。

在本申请一些可选的实施例中,仿真器仿真得到至少一个仿真设备,并将仿真设备映射到多个物理设备。仿真设备为每个物理设备维护第一通信队列,第一通信队列与主设备的第二通信队列之间存在一一对应或一对多的关系,其中,第一通信队列保存至少一个待执行命令、执行待执行命令所产生的执行结果,以及待执行命令与对应的执行结果之间的对应关系,其中,通信队列主要包括IO请求/响应队列对缓冲。

具体地,为了进行细粒度的划分,可以将一个仿真设备映射到多个物理设备上,仿真设备的能力由多个后端物理设备的部分能力聚合,但是,由于后端物理设备之间是独立的,因此需要确保发送到每个物理设备的命令之间没有因果关联,这个可以通过应用层调度来实现,例如在NVMe加速设备中,可以使用nsid(namespace id,命名空间)来区分无关的任务流。

如图7所示,为一种可选的仿真设备到多个物理设备映射的实现方式,为了实现简单,仿真设备为每个后端物理设备维护其中一个IO请求/响应队列对缓冲,该IO请求/响应队列对缓冲保存至少一个待执行命令、执行待执行命令所产生的执行结果,以及待执行命令与对应的执行结果之间的对应关系。需要说明的是,IO请求/响应队列对缓冲与主设备的IO请求/响应队列对的关系并非一一对应,例如,在NVMe加速设备中,可以将主设备内存中不同nsid的请求派发到与物理设备关联的缓冲中。

在本申请一些可选的实施例中,目标侧设备在接收到来自物理设备的执行结果时,需要确定该执行结果对应的仿真器以及主设备,具体为确定initiator(启动器)源以及PF/VF,因此,在该执行结果的IO命令转发之前,目标侧设备需要保存和构建如下的映射表:

{uuid,pf/vf,command_id_old}:{command_id_new}

其中:uuid是initiator在整个系统中的唯一标识符号;pf/vf是IO命令所对应的PF/VF的请求ID号;command_id_old是该IO命令在initiator侧IO命令/响应缓冲队列对中的标识号;command_id_new用来在目标侧设备的IO命令/响应队列对中确定唯一标识IO命令,并将物理设备反馈的执行结果与该IO命令相关联。

在本申请一些可选的实施例中,为了实现物理设备在执行IO命令时能直接对主设备上的内存空间进行DMA操作,需要将相应的initiator侧的信息,包括uuid和pf/vf的相关信息在相应的IO命令中携带传递给物理设备,其中一种可选的实现方法如图8所示。目标侧设备维护{uuid,pf/vf}和{uuid_local}的映射表,其中uuid_local是本地唯一标识符,在将Initiator侧的IO命令转发给物理设备的IO命令队列时,采用uuid_local替换IO命令地址的高位,地址低位保持不变,地址高位保存在本地;当物理设备利用该地址发出内存DMA请求时,PCIe Proxy(代理)模块截获该地址,并利用保存在地址高位的uuid_local信息找到{uuid,pf/vf}信息,并将地址高位替换回原来保存的高位,利用恢复的地址和{uuid,pf/vf}信息来执行对initiator侧内存的DMA请求。

图9为依据本实施例的命令处理方法对类NVMe设备进行虚拟化卸载和池化时,整个IO命令的转发流程,该过程包括步骤a)-步骤m),其中:

a)主设备通知仿真器有新的命令,该通知可以在每生成一个命令时发送一次,也可以将一段时间内产生的多个命令一次性全部发送;

b)仿真器判断后端的IO SQ/CQ缓冲是否已满,如果未满,那么从主设备中获取命令,仿真器可以一次获取一个命令,也可以一次获取多个命令;

其中,SQ为写入的命令,CQ中为命令执行的结果。SQ和CQ有两种,一种是Admin,用来放Admin命令,用以主机管理控制SSD;一种是IO,用来放IO命令,用以主机与SSD之间传输数据;SQ和CQ可以是一对一的关系,也可以是多对一的关系,它们是成对的。

c)仿真器将从主设备获取的IO命令放入本地的IO命令缓冲;

d)仿真器通知远端的目标侧设备本地有新的IO命令;

e)目标侧设备根据配额和QoS机制向仿真器发出IO命令提取请求;

f)仿真器根据目标侧设备的请求将对应的IO命令返回给目标侧设备,同时更新本地IO命令缓冲的指针;

g)目标侧设备对IO命令进行映射后派发到后端物理设备;

h)物理设备通过DMA方式访问主设备的内存,执行IO命令;

i)物理设备返回IO命令的执行结果;

j)目标侧设备根据物理设备返回的IO命令,进行重映射,将IO命令执行结果发送到正确的仿真器的IO响应缓冲的本地缓冲中去;

k)仿真器从本地缓冲中提取IO响应,得到执行结果;

l)仿真器向主设备返回IO执行结果;

m)仿真器更新本地IO响应缓冲的指针,并通知目标侧设备。

在本申请一些可选的实施例中,还提出了另一种虚拟化卸载和池化的方案,如图10所示,在该方案中,initiator采用支持SR-IOV功能的网卡,为每个PF/VF提供一个虚拟的网卡,VM中的App采用标准的NVMEoF驱动来访问虚拟的设备,Emulator的功能从Initiator侧移动到Target侧,其他的功能与图3的方案相类似。

在本申请实施例中,通过仿真器接收主设备发送的通知消息,通知消息携带至少一个待执行命令,其中,待执行命令指示主设备中存在需要执行的待执行命令;仿真器在本地缓冲区存在空闲的情况下,从主设备的内存中读取至少一个待执行命令;仿真器响应目标侧设备发出的提取待执行命令的提取请求,向目标侧设备返回待执行命令,其中,目标侧设备将待执行命令发送到网络资源池中的物理设备;仿真器接收物理设备反馈的执行结果,其中,物理设备通过直接存储器访问方式访问主设备的内存,执行待执行命令。采用上述方案,有效解决了相关技术中类NVMe设备在进行虚拟化管控过程时存在消耗CPU资源、延迟较大和运维困难的技术问题。

需要说明的是,在图5所示步骤的实施例中,仿真设备在执行相应的功能时,尤其是与其他设备(例如主机和目标侧设备)进行数据交互时,可以通过其仿真得到的仿真设备实现。

具体地,通过在initiator侧采用SR-IOV的机制进行虚拟化卸载,仿真器可以通过IOMMU实现对VM虚拟内存的访问,避免了多次地址转换所需要的CPU开销,以及虚拟化所需要的CPU开销;在SR-IOV虚拟化支持下,中断虚拟化可以尽量利用硬件的中断虚拟化能力,减少了mdev虚拟化下VM-Exit带来的开销;对VM用户透明,运维管理简单,可以支持裸金属服务器(bare Metal Server);对于不同的VM用户可以实现物理隔离,保证了安全性;通过池化和将一个emulator设备绑定到多个物理设备,并聚合多个物理设备的配额能力,实现了资源的细粒度划分。

本方案除了适用于NVMe协议外,也适用于与NVMe类似的其他协议(例如SATA协议等),能够应用于存储、GPU、加解密卡、AI专用加速卡、FPGA卡等场景。

以加解密卡为例,在本申请的一些实施例中,主设备可以为任意一个服务器或计算机设备,主设备的虚拟机在进行加密操作时,与加解密卡对应的仿真设备可以从主设备的内存中读取加密命令;仿真器响应目标侧设备发出的提取加密命令的提取请求,向目标侧设备发送加密命令,目标侧设备将加密命令发送到网络资源池中的物理设备;然后仿真器接收物理设备反馈的执行结果,其中,物理设备通过直接存储器访问方式访问主设备的内存,执行加密命令。

实施例2

根据本申请实施例,还提供了一种云计算系统,如图11所示,该系统中至少包括主设备110,源设备112,目标侧设备114、至少一个物理设备116,其中:

主设备110,运行有至少一个虚拟机,该虚拟机与源设备中的仿真设备通过物理功能PF通道或虚拟功能VF通道连接;在本申请一些可选的实施例中,主设备112每生成一个待执行命令就发送一次,或将预定时间段内产生的至少一个待执行命令加载到通知消息上发送一次。主设备110可以为主机。

源设备112,运行有仿真器1120,该仿真器1120用于为每个PF通道或VF通道设备仿真一个设备,得到仿真设备;仿真设备通过远程直接存储器访问RDMA模块与目标侧设备114进行数据交互。源设备和主机可以是两个独立的硬件设备。

目标侧设备114,通过PCIe接口与资源池中的至少一个物理设备116连接,并确定仿真设备与至少一个物理设备116的映射关系;该物理设备116包括但不限于NVMe设备或类NVMe设备。

至少一个物理设备116,与目标侧设备114连接,用于执行目标侧设备114经由源设备112转发的目标任务请求,并通过仿真设备将目标任务请求的执行结果发送至主设备110。

在本申请一些可选的实施例中,仿真设备,还用于接收主设备110发送的通知消息,通知消息携带有至少一个与目标任务请求对应的待执行命令。仿真设备在本地缓冲区存在空闲的情况下,从主设备110的内存中读取至少一个待执行命令;响应目标侧设备114发出的提取待执行命令的提取请求,向目标侧设备发送待执行命令;并接收物理设备116反馈的执行结果。该通知消息用于指示存在需要执行的待执行命令的通知消息,例如,主设备(例如主机)在检测到新的命令时,则通知仿真器,即通知给仿真器仿真得到的至少一个仿真设备

目标侧设备114,用于接收仿真设备用于指示存在需要执行的待执行命令的通知消息并向仿真设备发出提取待执行命令的提取请求;接收仿真设备返回的待执行命令,并将待执行命令发送到网络资源池中的物理设备;将物理设备116反馈的执行结果放入响应缓冲区,并进行本地缓冲。

其中,物理设备116,用于在执行待执行命令时,通过直接存储器访问方式访问主设备的内存,执行待执行命令。

在本申请一些可选的实施例中,目标侧设备114,用于在接收到仿真器中任意一个仿真设备发送的待执行命令的情况下,将每个仿真设备已经执行的待执行命令的执行结果与分配的配额限额进行比较,如果执行结果的消耗资源量小于或等于配额限额,且仿真设备有待处理的待执行命令,则通过仲裁器来选择任意一个仿真设备的待执行命令进行转发。

目标侧设备114,还用于维护源设备和目标侧设备的映射关系,并在将源设备112转发的待执行命令转发至物理设备的命令队列时,将目标侧设备的地址替换待执行命令中的源设备的地址。

在本申请一些可选的实施例中,仿真设备在接收到主设备的通知消息后,需要判断本地缓冲区空间是否已满,若本地缓冲区存在空闲,则从主设备的内存中读取至少一个待执行命令;若本地缓冲区已满,则先处理已存在的虚拟命令,在本地缓冲区具有空闲后,再从主设备的内存中读取至少一个待执行命令;仿真设备从主设备的内存中读取至少一个待执行命令后,将该待执行命令缓冲在本地,更新本地缓冲的指针,同时,通知目标侧设备存在需要执行的待执行命令,目标侧设备会向仿真设备发送提取该待执行命令的提取请求,仿真设备接收到提取请求后响应该提取请求向目标侧设备返回待执行命令;之后,目标侧设备将该待执行命令发送到网络资源池中的物理设备,由物理设备通过直接存储器访问方式访问主设备的内存,执行待执行命令,并将执行结果反馈给目标侧设备,目标侧设备将物理设备反馈的执行结果放入响应缓冲区;仿真设备从响应缓冲区中提取执行结果并反馈给主设备。

实施例3

根据本申请实施例,还提供了一种虚拟化仿真装置,如图12所示,该装置至少包括:第一接收模块120,读取模块122和发送模块124和第二接收模块126,其中:

第一接收模块120,用于接收主设备发送的通知消息,通知消息携带至少一个待执行命令,其中,待执行命令指示主设备中存在需要执行的待执行命令。

读取模块122,用于在本地缓冲区存在空闲的情况下,从主设备的内存中读取至少一个待执行命令。

可选地,该虚拟化仿真装置中还包括缓冲模块126和判断模块128,其中:

缓冲模块126,用于将待执行命令缓冲在本地,并更新本地缓冲的指针。

判断模块128,用于判断本地缓冲区是否存在空闲。

在本申请一些可选的实施例中,仿真装置在接收到主设备的通知消息后,需要判断本地缓冲区空间是否已满,若本地缓冲区存在空闲,则从主设备的内存中读取至少一个待执行命令;若本地缓冲区已满,则先处理已存在的虚拟命令,在本地缓冲区具有空闲后,再从主设备的内存中读取至少一个待执行命令。仿真装置在从主设备的内存中读取至少一个待执行命令后,将该待执行命令缓冲在本地,同时更新本地缓冲的指针,该指针用于指示各虚拟命令的缓冲地址。

发送模块124,用于响应目标侧设备发出的提取待执行命令的提取请求,向目标侧设备发送待执行命令,其中,目标侧设备将待执行命令发送到网络资源池中的物理设备。

第二接收模块126,用于接收物理设备反馈的执行结果,其中,物理设备通过直接存储器访问方式访问主设备的内存,执行待执行命令

在本申请一些可选的实施例中,主设备在生成待执行命令后,将待执行命令加载到通知消息中,然后发送至仿真装置。具体地,发送方式包括:主设备每生成一个待执行命令就发送一次;或将一段时间内产生的多个待执行命令全部加载到一条通知消息中发送至仿真装置。

仿真设备在从主设备的内存中读取至少待执行命令后,通知目标侧设备存在需要执行的待执行命令,目标侧设备会向仿真装置发送提取该待执行命令的提取请求,仿真装置接收到提取请求后响应该提取请求向目标侧设备返回待执行命令;之后,由目标侧设备将该待执行命令发送到网络资源池中的物理设备,物理设备执行该待执行命令,仿真装置接收物理设备反馈的执行结果。

需要说明的是,本申请实施例中的虚拟化仿真装置中各模块功能与实施例1中的命令处理方法相互对应,具体实施过程可以参考实施例1中的内容。

实施例4

根据本申请实施例,还提供了一种电子设备,该电子设备的具体结构可以参见图4所示的计算机终端的结构,但不限于此,例如,电子设备还可以包括比图4所示的计算机终端更多的结构。在本申请实施例中,该电子设备包括处理器和存储器,其中:

存储器与处理器连接,用于为处理器提供处理以下处理步骤的命令:

仿真器接收主设备发送的通知消息,通知消息携带至少一个待执行命令,其中,待执行命令指示主设备中存在需要执行的待执行命令;仿真器在本地缓冲区存在空闲的情况下,从主设备的内存中读取至少一个待执行命令;仿真器响应目标侧设备发出的提取待执行命令的提取请求,向目标侧设备返回待执行命令,其中,目标侧设备将待执行命令发送到网络资源池中的物理设备;仿真器接收物理设备反馈的执行结果,其中,物理设备通过直接存储器访问方式访问主设备的内存,执行待执行命令。

需要说明的是,本申请实施例中的优选实施方式可以参见实施例1-3中的相关描述,此处不再赘述。

实施例5

本申请实施例还提供另外一种命令处理方法,如图13所示,该方法包括:

步骤S132,仿真器接收主设备发送的通知消息,通知消息携带至少一个待执行命令,其中,待执行命令指示主设备中存在需要执行的待执行命令;

步骤S134,仿真器从主设备的内存中读取至少一个待执行命令,并向网络资源池中的物理设备返回待执行命令;

需要说明的是,物理设备的数量可以为多个,即一个仿真器可以对应资源池中的多个物理设备。在本申请一些可选的实施例中,仿真器仿真得到至少一个仿真设备,而一个物理设备也可以分配给多个仿真设备,即任一个物理设备都可以将自己的能力分配给多个仿真设备,为每个仿真设备分配一部分能力,这种分配主要通过QoS机制来进行实现。

步骤S136,仿真器接收物理设备反馈的执行结果,其中,物理设备通过直接存储器访问方式访问主设备的内存,执行待执行命令。

在本申请一些可选的实施例中,物理设备接收目标侧设备发送的待执行命令后,通过直接存储器访问方式访问主设备的内存,执行该待执行命令,并将得到的执行结果反馈给目标侧设备;目标侧设备得到执行结果后将其放入仿真器的响应缓冲区,同时进行本地缓冲;仿真器从响应缓冲区中提取执行结果并将该执行结果反馈给主设备。

需要说明的是,本申请实施例中的优选实施方式可以参见实施例1-3中的相关描述,此处不再赘述。

实施例6

根据本申请实施例,还提供了一种非易失性存储介质,该非易失性存储介质包括存储的程序,其中,在程序运行时控制非易失性存储介质所在设备执行上述的命令处理方法。

可选地,在程序运行时控制非易失性存储介质所在设备执行实现以下步骤:仿真器接收主设备发送的通知消息,通知消息携带至少一个待执行命令,其中,待执行命令指示主设备中存在需要执行的待执行命令;仿真器在本地缓冲区存在空闲的情况下,从主设备的内存中读取至少一个待执行命令;仿真器响应目标侧设备发出的提取待执行命令的提取请求,向目标侧设备返回待执行命令,其中,目标侧设备将待执行命令发送到网络资源池中的物理设备;仿真器接收物理设备反馈的执行结果,其中,物理设备通过直接存储器访问方式访问主设备的内存,执行待执行命令。

可选地,在程序运行时控制非易失性存储介质所在设备执行实现以下步骤:仿真器接收主设备发送的通知消息,通知消息携带至少一个待执行命令,其中,待执行命令指示主设备中存在需要执行的待执行命令;仿真器从主设备的内存中读取至少一个待执行命令,并向物理设备返回待执行命令;仿真器接收物理设备反馈的执行结果,其中,物理设备通过直接存储器访问方式访问主设备的内存,执行待执行命令。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干命令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

相关技术
  • 云计算系统、命令处理方法及虚拟化仿真装置
  • 命令处理方法、命令发送方法、装置及系统
技术分类

06120113270458