Processing

Please wait...

Settings

Settings

Goto Application

1. WO2020135504 - VIRTUALIZATION METHOD AND APPARATUS

Document

说明书

发明名称 0001   0002   0003   0004   0005   0006   0007   0008   0009   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085  

权利要求书

1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18  

附图

1   2   3   4   5   6  

说明书

发明名称 : 一种虚拟化方法和装置

[0001]
本申请要求在2018年12月27日提交中国专利局、申请号为201811612722.7的中国专利申请的优先权,该申请的全部内容通过引用结合在本申请中。

技术领域

[0002]
本申请实施例涉及但不限于计算机领域,例如一种虚拟化方法和装置。

背景技术

[0003]
固态盘(Solid State Drives,SSD)是用固态电子存储芯片阵列而制成的硬盘,目前大部分基于Flash芯片作为存储介质。与常规机械硬盘相比,SSD读写快速、质量轻、能耗低、防震抗摔且体积小。已经在服务器、个人计算等领域得到了越来越多的应用。
[0004]
非易失内存主机控制器接口规范(Non-Volatile Memory express,NVMe)是一种存储设备接口规范,可以充分利用外部设备高速互连标准(Peripheral Component Interconnect express,PCI-E)通道的低延时以及并行性的特点,简化了固态盘的输入输出(Input Output,IO)访问路径。相比串行连接小型计算机系统接口(Small Computer System Interface,SCSI)(Serial Attached SCSI,SAS)或串行高级连接技术(Serial Advanced Technology Attachment,SATA)接口规范,NVMe可以提供更低的延时,更高的传输性能,以及更低的功耗控制。NVMe适配了SSD的高速IO特点,极大提升了固态盘的读写性能,在高端SSD设备中得到广泛应用。
[0005]
目前许多云主机都基于NVMe SSD提供虚拟机存储支持,NVMe SSD的普通虚拟化方法如图1所示。虚拟机通过前端驱动,与在快速模拟器(Quick Emulator,Qemu)中的后端驱动进行读写请求,后端驱动运行在主机上下文环境中,并通过虚拟文件系统(Virtual File System,VFS)接口,向主机中的NVMe驱动进行读写请求。在NVMe接口规范中,NVMe设备提供管理和IO两类队列,管理队列只有一组,IO队列有多组。每组队列由提交和回应两个循环列表组成,用于NVMe设备接收命令和放置执行信息。
[0006]
如图1所示,在虚拟机进行IO读写时,前端驱动会将读写请求发送到后端驱 动;后端驱动接收到读写请求后,将读写请求转换为主机(Host)(也称为物理机)的VFS读写操作;Host的操作系统(Operating System,OS)内核根据VFS读写操作调用NVMe SSD驱动的读写命令,使得NVMe驱动产生IO读写指令放入NVMe设备的IO队列的提交队列中;NVMe设备执行IO读写指令后,将结果放入IO队列的回应队列,并产生消息中断(Message Signaled Interrupts,MSI)通知主机;主机再通过NVMe驱动处理,通过VFS的封装,将结果返回给后端驱动,在通过虚拟化机制,返回前端去的,完成虚拟机或客户机(Guest)的IO读写操作。
[0007]
可以看出,普通的NVMe虚拟化方法中,一次IO操作需要涉及到两次前后端交互,并涉及到数据在前后端中的多次拷贝,以及Host中的VFS到NVMe的长IO栈,效率较低,不利于Guest充分利用NVMe SSD设备的高IO特性。
[0008]
发明内容
[0009]
本申请实施例提供了一种虚拟化方法和装置,能够提升IO效率。
[0010]
本申请实施例提供了一种虚拟化方法,包括:在虚拟机的应用发出预定请求的情况下,虚拟机的非易失内存主机控制器接口规范—块NVMe-Blk驱动从虚拟NVMe直接内存存取DMA内存管理区中分配第一DMA内存;其中,第一DMA内存包括输入输出IO队列的提交队列的第二DMA内存和完成队列的第三DMA内存;所述NVMe-Blk驱动根据所述第二DMA内存的物理机物理地址HPA构建提交队列项,通知主机的NVMe设备处理所述预定请求;所述NVMe-Blk驱动读取完成队列中的回应信息。
[0011]
本申请实施例还提供了一种虚拟化方法,包括:主机的非易失内存主机控制器接口规范NVMe设备获知有预定请求需要处理时,进行与所述预定请求对应的操作,将回应信息放入完成队列中。
[0012]
本申请实施例提供了一种虚拟化装置,包括:非易失内存主机控制器接口规范—块NVMe-Blk驱动,设置为在虚拟机的应用发出预定请求的情况下,从虚拟NVMe直接内存存取DMA内存管理区中分配第一DMA内存;其中,所述第一DMA内存包括输入输出IO队列的提交队列的第二DMA内存和完成队列的第三DMA内存;根据所述第二DMA内存的物理机物理地址HPA构建提交队列项,通知NVMe设备处理所述预定请求;读取完成队列中的回应信息。
[0013]
本申请实施例提供了一种虚拟化装置,包括:非易失内存主机控制器接口 规范NVMe设备,设置为获知有预定请求需要处理时,进行与所述预定请求对应的操作,将回应信息放入完成队列中。
[0014]
本申请实施例还提供了一种虚拟化装置,包括处理器和计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令被所述处理器执行时,实现上述任一种虚拟化方法。
[0015]
本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现上述任一种虚拟化方法。

附图说明

[0016]
图1为相关技术NVMe SSD的普通虚拟化方法的示意图;
[0017]
图2为本申请一个实施例提出的虚拟化方法的流程图;
[0018]
图3为本申请一实施例中门铃(DoorBell)区域与IO队列映射示意图;
[0019]
图4为本申请一实施例中虚拟化方法的示意图;
[0020]
图5为本申请另一个实施例提出的虚拟化方法的流程图;
[0021]
图6为本申请实施例虚拟化装置的结构组成示意图。

具体实施方式

[0022]
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0023]
参见图2,本申请一个实施例提出了一种虚拟化方法,包括步骤200至步骤202。
[0024]
在步骤200中,在虚拟机的应用发出预定请求的情况下,虚拟机的NVMe-块(Block,Blk)驱动从虚拟NVMe直接内存存取(Direct Memory Access,DMA,)内存管理区中分配第一DMA内存;其中,第一DMA内存包括IO队列的提交队列(Summit Queue,SQ)的第二DMA内存和完成队列(Complete Queue,CQ)的第三DMA内存。
[0025]
在步骤201中,NVMe-Blk驱动根据第二DMA内存的物理机物理地址(Host Physical Address,HPA)构建SQ项,通知主机的NVMe设备处理所述预定请求。
[0026]
在本申请实施例中,SQ项还包括:NVMe设备的扇区号和优先级等信息。
[0027]
其中,第二DMA内存为源地址,扇区号为目的地址,也就是说,通过SQ 项告知NVMe设备将数据从第二DMA内存写入到扇区号内。
[0028]
在本申请实施例中,NVMe设备可以是SSD。
[0029]
在本申请实施例中可以采用以下任一种方法通知主机的NVMe设备处理预定请求。
[0030]
方法一、NVMe-Blk驱动向所述主机发送写门铃(DoorBell)请求;其中,所述写DoorBell请求包括提交队列项信息,即提交队列项下标;所述主机将所述提交队列项信息写入所述NVMe设备的寄存器的DoorBell区域中所述IO队列标识对应的字段中。
[0031]
该方法中,NVMe-Blk驱动可以基于通用的虚拟化的内存地址陷入机制,或者中央处理器(Central Processing Unit,CPU)的HyperCall指令向主机的管理程序(Hypervisor)发送写DoorBell请求。
[0032]
该方法中,DoorBell区域是按照IO队列标识进行排列的,主机基于IO队列标识和DoorBell区域的起始地址,即可获知IO队列标识对应的字段。
[0033]
方法二、NVMe-Blk驱动预先保存所述IO队列标识和所述NVMe设备的寄存器中的门铃DoorBell区域的字段之间的第二对应关系;NVMe-Blk驱动将提交队列项信息写入所述NVMe设备的寄存器的门铃DoorBell区域中,所述IO队列标识对应的字段中。
[0034]
该方法中,如图3所示,NVMe设备的DoorBell区域是连续区域,可以映射到虚拟机中,每个IO队列对应其中的一个16比特(bit)的字段,可以通过在NVMe-Blk驱动初始化时完成对DoorBell区域的映射操作,即保存第二对应关系。
[0035]
采用第二种方式通过NVMe-Blk驱动直接将提交队列项信息写入NVMe设备的寄存器的DoorBell区域中IO队列标识对应的字段中,而不需要通过主机来写入,提高了IO效率。
[0036]
在步骤202中,NVMe-Blk驱动读取完成队列中的回应信息。
[0037]
在本申请实施例中,NVMe-Blk驱动可以采用以下任一种方法读取CQ中的回应信息。
[0038]
方法一、NVMe-Blk驱动轮询所述完成队列得到回应信息。
[0039]
方法二、主机将IO队列标识和所述第一物理虚拟机内存的HPA之间的第一对应关系发送给NVMe-Blk驱动之前,主机为所述IO队列分配消息中断(Message Signal Interrupts,MSI)中断号,将所述MSI中断号设置成所述虚拟 机直接处理;主机将IO队列标识和所述第一物理虚拟机内存的HPA之间的第一对应关系发送给NVMe-Blk驱动时,还将所述MSI中断号发送给所述NVMe-Blk驱动;主机进行与预定请求对应的操作后,主机根据所述MSI中断号触发中断;NVMe-Blk驱动在MSI中断号对应中断触发时读取所述完成队列中的回应信息。
[0040]
该方法中,NVMe-Blk驱动可以在虚拟机中设置对应的中断处理程序,在中断触发时,中断顶部处理程序读取完成队列信息,并释放CQ队列,触发中断底部处理程序;在预定请求为读请求的情况下,中断底部处理程序从完成队列信息中获取出第三DMA内存的位置,完成读数据拷贝,以及DMA内存释放。
[0041]
在linux中,中断底部处理程序将触发虚拟机OS的IO协议栈完成动作,将对应的操作返回信息返回给读写请求者。
[0042]
该方法中,将MSI中断号设置成虚拟机直接处理在X86处理器中可以基于直接IO虚拟化技术(Virtualization Technology for Directed I/O,VT-D)PostInterrupt的机制实现,即将MSI中断号设置到虚拟机的X86处理器的VT-D PostInterrupt虚拟通用中断控制器(Virtual Generic Interrupt,VGI)特性区中;在ARM处理器中可以基于vGSI机制完成;在虚拟机独占主机的CPU的情况下,可以基于X86处理器在虚拟机控制结构(Virtual-Machine Control Structure,VMCS)中设置中断(interrupt)非退出方式实现。
[0043]
在本申请实施例中,预定请求包括以下至少之一:读请求、写请求。
[0044]
在预定请求为写请求的情况下,步骤200和步骤201之间还包括:NVMe-Blk驱动将所写的数据拷贝到所述第二DMA内存中。
[0045]
在预定请求为读请求的情况下,回应信息包括第三DMA内存的HPA,NVMe-Blk驱动根据回应信息从第三DMA内存中读取数据,将读取的数据拷贝到应用的读缓存中,释放第三DMA内存。
[0046]
在本申请另一个实施例中,在步骤200之前还包括:所述NVMe-Blk驱动向所述虚拟机申请连续的第一物理虚拟机内存,将所述第一物理虚拟机内存的虚拟机物理地址(Guest Physical Address,GPA)传输给主机;其中,可以将第一物理虚拟机内存的起始位置的GPA传输给主机;可以将第一物理虚拟机内存的GPA传输给主机的Qemu;NVMe-Blk驱动接收到IO队列标识和第一物理虚拟机内存的HPA之间的第一对应关系;所述NVMe-Blk驱动向所述虚拟机申请连续的第二物理虚拟机内存,将所述第二物理虚拟机内存设置成DMA访问方法, 将所述第二物理虚拟机内存的虚拟机物理地址GPA传输给主机;其中,可以将第二物理虚拟机内存的起始位置的GPA传输给主机;可以将第二物理虚拟机内存的GPA传输给主机的Qemu;所述NVMe-Blk驱动根据接收到的第二物理虚拟机内存的HPA创建所述虚拟NVMe DMA内存管理区。
[0047]
在本申请一实施例中,如图4所示,可以在NVMe-Blk驱动创建时,向虚拟机申请连续的第一物理虚拟机内存和第二物理虚拟机内存。
[0048]
其中,NVMe-Blk驱动可以在虚拟机操作系统(Operating System,OS)初始化时创建,它注册为虚拟机的块(Block,Blk)驱动,完成基于Blk的随机读写操作。
[0049]
在本申请一实施例中,GPA地址从虚拟机到主机的传递方式包括以下任一种:在内核虚拟机(Kernel-based Virtual Machine,KVM)下可以基于虚拟输入输出(virtIO)通道传递;基于Qemu的共享内存区传递;基于X86vt技术的HyperCall指令参数传递。
[0050]
其中,virtIO通道可以是virtIO控制通道,该virtIO通道可以在创建NVMe-Blk驱动时,由NVMe-Blk驱动与主机的Qemu建立。
[0051]
本申请实施例通过NVMe-Blk驱动实现对NVMe设备的直接访问,减少了主机的参与,从而实现虚拟机的高效IO操作,并且不需要占用CPU,降低了虚拟化的损耗,且无需支持特定的NVMe设备硬件,具有较好的通用性。
[0052]
参见图5,本申请另一个实施例提出了一种虚拟化方法,包括步骤500。
[0053]
在步骤500中,主机的NVMe设备获知有预定请求需要处理时,进行与预定请求对应的操作,将回应信息放入完成队列中。
[0054]
在本申请实施例中,在NVMe设备的寄存器的DoorBell区域中所述IO队列标识对应的字段有提交队列项信息写入的情况下,NVMe设备获知有预定请求需要处理。
[0055]
其中,可以由主机或NVMe-Blk驱动将提交队列项信息写入NVMe设备的寄存器的DoorBell区域中所述IO队列标识对应的字段中。
[0056]
其中,在由NVMe-Blk驱动将提交队列项信息写入NVMe设备的寄存器的DoorBell区域中所述IO队列标识对应的字段中的情况下,NVMe-Blk驱动需要预先保存IO队列标识和NVME设备的寄存器中DoorBell区域的字段之间的第二对应关系。
[0057]
其中,在由主机将提交队列项信息写入NVMe设备的寄存器的DoorBell区 域中所述IO队列标识对应的字段中的情况下,NVMe-Blk驱动向主机发送写DoorBell请求;其中,写DoorBell请求包括提交队列信息;主机将提交队列项信息写入所述NVMe设备的寄存器的DoorBell区域中所述IO队列标识对应的字段中。
[0058]
在本申请一实施例中,预定请求为写请求或读请求;在预定请求为写请求的情况下,进行与预定请求对应的操作包括:NVMe设备根据提交队列项信息将第二DMA内存中的数据写入到NVMe设备的对应扇区中。
[0059]
在预定请求为读请求的情况下,进行与预定请求对应的操作包括:NVMe设备根据所述提交队列项信息从NVMe设备的对应扇区中读取数据,将读取的数据拷贝到第三DMA内存中。
[0060]
在本申请另一个实施例中,步骤500中进行与预定请求对应的操作,将回应信息放入完成队列中之前,还包括:所述主机将接收到的第一物理虚拟机内存的GPA转换成HPA,其中,所述设备命令包括所述第一物理虚拟机内存的HPA;其中,主机的Qemu调用linux内核接口将GPA转换成HPA,并设置noCache属性,Qemu将HPA发送给主机,主机将HPA发送给NVMe-Blk驱动;所述主机根据所述第一物理虚拟机内存的HPA创建IO队列,将IO队列标识和所述第一物理虚拟机内存的HPA之间的第一对应关系发送给NVMe-Blk驱动;其中,主机的Qemu通过调用NVMe设备控制命令的方式来创建IO队列;所述主机将接收到的第二物理虚拟机内存的GPA转换成HPA,将所述第二物理虚拟机内存设置成主机DMA访问模式,将所述第二物理虚拟机内存的HPA发送给所述NVMe-Blk驱动;其中,主机的Qemu调用linux内核接口将GPA转换成HPA,并设置noCache属性,Qemu将HPA发送给主机,主机将HPA发送给NVMe-Blk驱动。
[0061]
在本申请另一个实施例中,主机将IO队列标识和所述第一物理虚拟机内存的HPA之间的第一对应关系发送给NVMe-Blk驱动之前,还包括:所述主机为所述IO队列分配消息中断MSI中断号,将所述MSI中断号设置成所述虚拟机直接处理;所述主机将IO队列标识和所述第一物理虚拟机内存的HPA之间的第一对应关系发送给NVMe-Blk驱动时,还将所述MSI中断号发送给所述NVMe-Blk驱动;所述主机进行与预定请求对应的操作后,该方法还包括:所述主机根据所述MSI中断号触发中断。
[0062]
在本申请实施例中,主机可以基于Qemu的共享内存区,或virtIO通道向虚 拟机传递HPA或IO队列标识(ID)或MSI中断号。
[0063]
其中,virtIO通道可以是virtIO控制通道,该virtIO通道可以在创建NVMe-Blk驱动时,由NVMe-Blk驱动与主机的Qemu建立。
[0064]
参见图6,本申请另一个实施例提出了一种虚拟化装置,包括NVMe-Blk驱动601。
[0065]
NVMe-Blk驱动601,设置为在虚拟机的应用发出预定请求的情况下,从虚拟NVMe DMA内存管理区中分配第一DMA内存;其中,第一DMA内存包括输入输出IO队列的提交队列的第二DMA内存和完成队列的第三DMA内存;根据第二DMA内存的HPA构建提交队列项,通知主机的NVMe设备处理所述预定请求;读取完成队列中的回应信息。
[0066]
在本申请实施例中,所述预定请求为写请求;所述NVMe-Blk驱动601还设置为:将所写的数据拷贝到所述第二DMA内存中。
[0067]
在本申请实施例中,所述预定请求为读请求;所述NVMe-Blk驱动601还设置为:根据所述完成队列信息从第三DMA内存中读取所读取的数据,将读取的数据拷贝到应用的读缓存中,释放第三DMA内存。
[0068]
在本申请实施例中,所述NVMe-Blk驱动601还设置为:向所述虚拟机申请连续的第一物理虚拟机内存,将所述第一物理虚拟机内存的虚拟机物理地址GPA传输给主机;接收到IO队列标识和第一物理虚拟机内存的HPA之间的第一对应关系;向所述虚拟机申请连续的第二物理虚拟机内存,将所述第二物理虚拟机内存设置成DMA访问方法,将所述第二物理虚拟机内存的虚拟机物理地址GPA传输给主机;根据接收到的第二物理虚拟机内存的HPA创建所述虚拟NVMe DMA内存管理区。
[0069]
在本申请实施例中,所述NVMe-Blk驱动601还设置为:保存所述IO队列标识和所述NVMe设备的寄存器中的门铃DoorBell区域的字段之间的第二对应关系;将提交队列项信息写入所述NVMe设备的寄存器的门铃DoorBell区域中,所述IO队列标识对应字段中。
[0070]
在本申请实施例中,NVMe-Blk驱动601设置为采用以下方式实现通知主机的NVMe设备处理预定请求:向所述主机发送写门铃DoorBell请求;其中,所述写DoorBell请求包括提交队列项信息,即提交队列项下标。
[0071]
在本申请实施例中,NVMe-Blk驱动601还设置为:接收MSI中断号;在MSI中断号对应的中断触发时读取所述完成队列中的回应信息。
[0072]
在本申请实施例中,所述NVMe-Blk驱动501设置为采用以下方式实现读取完成队列中的回应信息:轮询所述完成队列得到回应信息。
[0073]
上述虚拟化装置的实现方式与前述实施例的虚拟化方法相同,这里不再赘述。
[0074]
本申请另一个实施例提出了一种虚拟化装置(如主机),包括NVMe设备602。
[0075]
NVMe设备602,设置为获知有预定请求需要处理时,进行与预定请求对应的操作,将回应信息放入完成队列中。
[0076]
在本申请实施例中,预定请求为写请求,NVMe设备602设置为采用以下方式实现进行与预定请求对应的操作:
[0077]
根据提交队列项信息将第二DMA内存中的数据写入到NVMe设备的对应扇区中。
[0078]
在本申请实施例中,预定请求为读请求,NVMe设备602设置为采用以下方式实现进行与预定请求对应的操作:
[0079]
根据提交队列项信息从NVMe设备的对应扇区中读取数据,将读取的数据拷贝到第三DMA内存中。
[0080]
在本申请实施例中,还包括:控制器603,设置为将接收到的第一物理虚拟机内存的GPA转换成物理机物理地址HPA;根据所述第一物理虚拟机内存的HPA创建IO队列,将IO队列标识和所述第一物理虚拟机内存的HPA之间的第一对应关系发送给NVMe-Blk驱动;将接收到的第二物理虚拟机内存的GPA转换成物理机物理地址HPA,将所述第二物理虚拟机内存设置成主机DMA访问模式,将所述第二物理虚拟机内存的HPA发送给所述NVMe-Blk驱动。
[0081]
在本申请实施例中,还包括:控制器603,设置为为所述IO队列分配消息中断MSI中断号,将所述MSI中断号设置成所述虚拟机直接处理;将所述MSI中断号发送给所述NVMe-Blk驱动;NVMe设备602进行与预定请求对应的操作后,NVMe设备602根据所述MSI中断号触发中断;在本申请实施例中,控制器603还设置为将所述提交队列项信息写入所述NVMe设备的寄存器的DoorBell区域中IO队列标识对应的字段中。
[0082]
上述虚拟化装置的实现方式与前述实施例的虚拟化方法相同,这里不再赘述。
[0083]
本申请另一个实施例提出了一种虚拟化装置,包括处理器和计算机可读存 储介质,所述计算机可读存储介质中存储有指令,当所述指令被所述处理器执行时,实现上述任一种虚拟化方法。
[0084]
本申请另一个实施例提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一种虚拟化方法的步骤。
[0085]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由多个物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于随机存取存储器(Random Access Memory,RAM)、只读存储器(Read-Only Memory,ROM)、带电可擦可编程只读存储器(Electrically Erasable Programmable read only memory,EEPROM)、闪存或其他存储器技术、只读光盘(Compact Disc Read-Only Memory,CD-ROM)、数字多功能盘(Digital Video Disc,DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

权利要求书

[权利要求 1]
一种虚拟化方法,包括: 在虚拟机的应用发出预定请求的情况下,虚拟机的非易失内存主机控制器接口规范—块NVMe-Blk驱动从虚拟NVMe直接内存存取DMA内存管理区中分配第一DMA内存;其中,第一DMA内存包括输入输出IO队列的提交队列的第二DMA内存和完成队列的第三DMA内存; 所述NVMe-Blk驱动根据所述第二DMA内存的物理机物理地址HPA构建提交队列项,通知主机的NVMe设备处理所述预定请求; 所述NVMe-Blk驱动读取完成队列中的回应信息。
[权利要求 2]
根据权利要求1所述的虚拟化方法,其中,所述预定请求为写请求;所述NVMe-Blk驱动根据所述第二DMA内存的HPA构建提交队列项之前,还包括: 所述NVMe-Blk驱动将所写的数据拷贝到所述第二DMA内存中。
[权利要求 3]
根据权利要求1所述的虚拟化方法,其中,所述预定请求为读请求;所述虚拟化方法还包括: 所述NVMe-Blk驱动根据所述回应信息从所述第三DMA内存中读取数据,将读取的数据拷贝到应用的读缓存中,释放所述第三DMA内存。
[权利要求 4]
根据权利要求1~3任一项所述的虚拟化方法,在虚拟机的应用发出预定请求的情况下,虚拟机的非易失内存主机控制器接口规范—块NVMe-Blk驱动从虚拟NVMe直接内存存取DMA内存管理区中分配第一DMA内存之前,还包括: 所述NVMe-Blk驱动向所述虚拟机申请连续的第一物理虚拟机内存,将所述第一物理虚拟机内存的虚拟机物理地址GPA传输给所述主机; 所述NVMe-Blk驱动接收到输入输出IO队列标识和所述第一物理虚拟机内存的物理机物理地址HPA之间的第一对应关系; 所述NVMe-Blk驱动向所述虚拟机申请连续的第二物理虚拟机内存,将所述第二物理虚拟机内存设置成DMA访问方法,将所述第二物理虚拟机内存的虚拟机物理地址GPA传输给所述主机; 所述NVMe-Blk驱动根据接收到的所述第二物理虚拟机内存的HPA创建所述虚拟NVMe DMA内存管理区。
[权利要求 5]
根据权利要求4所述的虚拟化方法,还包括: 所述NVMe-Blk驱动保存所述IO队列标识和所述NVMe设备的寄存器中的门铃DoorBell区域的字段之间的第二对应关系; 所述通知主机的NVMe设备处理预定请求包括: 所述NVMe-Blk驱动将所述提交队列项信息写入所述NVMe设备的寄存器的门铃DoorBell区域中所述IO队列标识对应的字段中。
[权利要求 6]
根据权利要求4所述的虚拟化方法,还包括: 所述NVMe-Blk驱动接收到消息中断MSI中断号; 所述NVMe-Blk驱动读取完成队列中的回应信息包括: 所述NVMe-Blk驱动在所述MSI中断号对应的中断触发时读取所述完成队列中的回应信息。
[权利要求 7]
根据权利要求1~3任一项所述的虚拟化方法,其中,所述通知主机的NVMe设备处理预定请求包括: 所述NVMe-Blk驱动向所述主机发送写门铃DoorBell请求;其中,所述写DoorBell请求包括提交队列项信息。
[权利要求 8]
根据权利要求1~3任一项所述的虚拟化方法,其中,所述NVMe-Blk驱动读取完成队列中的回应信息包括: 所述NVMe-Blk驱动轮询所述完成队列得到所述回应信息。
[权利要求 9]
一种虚拟化方法,包括: 主机的非易失内存主机控制器接口规范NVMe设备获知有预定请求需要处理时,进行与所述预定请求对应的操作,将回应信息放入完成队列中。
[权利要求 10]
根据权利要求9所述的虚拟化方法,其中,所述预定请求为写请求,所述进行与所述预定请求对应的操作包括: 所述NVMe设备根据提交队列项信息将第二直接内存存取DMA内存中的数据写入到所述NVMe设备的对应扇区中。
[权利要求 11]
根据权利要求9所述的虚拟化方法,其中,所述预定请求为读请求,所述进行与预定请求对应的操作包括: 所述NVMe设备根据提交队列项信息从NVMe设备的对应扇区中读取数据,将读取的数据拷贝到第三DMA内存中。
[权利要求 12]
根据权利要求9~11任一项所述的虚拟化方法,所述进行与所述预定请求对应的操作,将回应信息放入完成队列中之前,还包括: 所述主机将接收到的第一物理虚拟机内存的虚拟机物理地址GPA转换成物 理机物理地址HPA; 所述主机根据所述第一物理虚拟机内存的HPA创建输入输出IO队列,将所述IO队列标识和所述第一物理虚拟机内存的HPA之间的第一对应关系发送给NVMe-块Blk驱动; 所述主机将所述第二物理虚拟机内存的GPA转换成物理机物理地址HPA,将所述第二物理虚拟机内存设置成主机DMA访问模式,将所述第二物理虚拟机内存的HPA发送给所述NVMe-Blk驱动。
[权利要求 13]
根据权利要求12所述的虚拟机方法,所述主机将所述IO队列标识和所述第一物理虚拟机内存的HPA之间的第一对应关系发送给NVMe-Blk驱动之前,还包括:所述主机为所述IO队列分配消息中断MSI中断号,将所述MSI中断号设置成所述虚拟机直接处理; 所述主机将IO队列标识和所述第一物理虚拟机内存的HPA之间的第一对应关系发送给NVMe-Blk驱动时,还将所述MSI中断号发送给所述NVMe-Blk驱动; 所述进行与预定请求对应的操作后,该方法还包括: 所述主机根据所述MSI中断号触发中断。
[权利要求 14]
根据权利要求12所述的虚拟机方法,还包括: 所述主机接收到写门铃DoorBell请求;其中,所述写DoorBell请求包括提交队列项信息; 所述主机将所述提交队列项信息写入所述NVMe设备的寄存器的DoorBell区域中所述IO队列标识对应的字段中。
[权利要求 15]
一种虚拟化装置,包括: 非易失内存主机控制器接口规范—块NVMe-Blk驱动,设置为在虚拟机的应用发出预定请求的情况下,从虚拟NVMe直接内存存取DMA内存管理区中分配第一DMA内存;其中,所述第一DMA内存包括输入输出IO队列的提交队列的第二DMA内存和完成队列的第三DMA内存;根据所述第二DMA内存的物理机物理地址HPA构建提交队列项,通知NVMe设备处理所述预定请求;读取完成队列中的回应信息。
[权利要求 16]
一种虚拟化装置,包括: 非易失内存主机控制器接口规范NVMe设备,设置为获知有预定请求需要处理时,进行与所述预定请求对应的操作,将回应信息放入完成队列中。
[权利要求 17]
一种虚拟化装置,包括处理器和计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令被所述处理器执行时,实现如权利要求1~14任一项所述的虚拟化方法。
[权利要求 18]
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如权利要求1~14任一项所述的虚拟化方法。

附图

[ 图 1]  
[ 图 2]  
[ 图 3]  
[ 图 4]  
[ 图 5]  
[ 图 6]