虚拟化方法和装置的制造方法

文档序号:9921815阅读:489来源:国知局
虚拟化方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及计算机技术中的虚拟化方法和装置。
【背景技术】
[0002]随着存储介质的访问速度的不断提高,传统的存储协议例如串行AT A接口规范(Serial Advanced Technology Attachment,简称“SATA”)、串行SAS(Serial AttachedSCSI,简称“SAS”)、光纤通道技术(Fiber Channel,简称“FC”)等都无法再满足存储介质的访问速度。非易失性内存扩展(Non-Volatile Memory express,简称“NVMe”)协议是专门为固态硬盘(Solid State Drives,简称“SSD”)等高性能存储介质设计的存储协议,相比传统的存储协议,具有非常明显的优势,例如多队列、多核支持、高队列深度、低时延等。NVMe与SSD存储的组合,将使存储介质的访问速度提升一个层次。目前NVMe的SSD存储访问时延在20us以下,这相对于传统存储访问速度的ms级别,提升效果非常明显。
[0003]Linux内核在3.1 2版本后开始支持NVMe协议的磁盘,快速模拟器(Qui ckEmulator,简称“Qemu”)也在1.6版本后开始支持虚拟NVMe设备的虚拟化。虽然目前小型计算机系统接口(Small Computer System Interface,简称“SCSI”)协议还是存储最常见的一种协议,但未来NVMe很有可能成为继SCSI协议之后的最常用的一种协议。
[0004]然而,在目前技术中,Qemu对NVMe设备的模拟方式依然采用通用的输入/输出(Input/Output,简称“1/0”)流程进行模拟,导致虚拟机用户虽然获得了一个NVMe设备,却要忍受传统存储的性能,因而会严重影响存储介质的访问速度。

【发明内容】

[0005]本发明实施例提供了一种虚拟化方法,以解决Qemu进程对虚拟NVMe设备采用传统1/0流程进行模拟,影响虚拟机内应用程序对虚拟NVMe设备访问速度的问题。
[0006]第一方面,本发明实施例提供了一种虚拟化方法,其特征在于,该方法由物理机Host执行,Host包括虚拟机和数据平面转发进程,数据平面转发进程包括虚拟非易失性内存扩展NVMe驱动,虚拟机包括虚拟NVMe设备,该方法包括:转发进程轮询虚拟NVMe设备的门铃(doorbel I)区域;当doorbel I区域发生变化时,转发进程调用虚拟NVMe驱动,从doorbel I区域发生变化的发送队列中,获取虚拟机下发的NVMe命令,NVMe命令包括读写请求;转发进程调用虚拟NVMe驱动,解析NVMe命令,得到通用读写请求;转发进程获取物理设备对通用读写请求的处理结果;转发进程调用虚拟NVMe驱动,将物理设备的处理结果封装为NVMe响应;转发进程调用虚拟NVMe驱动,将NVMe响应添加到与发送队列对应的完成队列中。
[0007]因此,本发明实施例的虚拟化方法,通过独立的转发进程完成虚拟NVMe设备的读写操作,并且该转发进程使用轮询的方式替代原有的定时器方式,能够避免Qemu锁竞争,并且能够解决时延长的问题,从而实现了高性能低时延的NVMe虚拟化,提高了虚拟机内应用程序对虚拟NVMe设备的访问速度。
[0008]结合第一方面,在第一方面的第一种可能的实现方式中,所述Host还包括基于内核的虚拟机管理程序(Kernel-based Virtual Machine,简称“KVM”)模块,在该转发进程调用虚拟NVMe驱动,将NVMe响应添加到与发送队列对应的完成队列中之后,转发进程调用虚拟NVMe驱动,通过eventfd向KVM模块发送中断请求;KVM模块根据中断请求向虚拟机注入中断;虚拟机从完成队列中,获取NVMe响应。
[0009]结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,该Host还包括Qemu进程,该Qemu进程包括适配驱动,在转发进程轮询虚拟NVMe设备的doorbe 11区域之前,转发进程调用虚拟NVMe驱动,根据用户请求创建虚拟NVMe设备;转发进程调用虚拟NVMe驱动,分配Qemu进程与转发进程的共享内存空间,该共享内存包括doorbell区域;Qemu进程调用适配驱动,将该共享内存空间映射到虚拟NVMe设备的第一段基址寄存器(Base Address Register,简称“BAR”)空间;Qemu进程调用适配驱动,将基于消息通知的多路中断机制(Message Signaled Interrupt X,简称“MSIX”)表空间映射到虚拟NVMe设备的第二段BAR空间;Qemu进程调用适配驱动注册回调函数。
[0010]因此,本发明实施例的虚拟化方法,在独立的转发进程完成虚拟NVMe设备的读写操作之前,Qemu进程调用适配驱动,并且转发进程调用虚拟NVMe驱动,共同创建该虚拟NVMe设备,从而使后续的读写操作有较高的存储性能。
[0011]结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,在该转发进程调用虚拟NVMe驱动,分配Qemu进程与转发进程的共享内存空间之前,转发进程调用虚拟NVMe驱动,根据用户请求创建虚拟NVMe设备的命名空间(namespace);转发进程调用虚拟NVMe驱动,初始化虚拟NVMe设备的name space信息,以便于虚拟机读取虚拟NVMe设备的namespace信息;转发进程调用虚拟NVMe驱动,根据用户请求将虚拟NVMe设备的名称作为参数配置,挂载给虚拟机。
[0012]结合第一方面的第二种或第三种可能的实现方式,在第一方面的第四种可能的实现方式中,在该Qemu进程调用适配驱动注册回调函数之后,转发进程轮询虚拟NVMe设备的doorbell区域;当doorbell区域的O号命令队列中包括创建完成队列的请求时,转发进程调用虚拟NVMe驱动,从O号命令队列中获取虚拟机下发的NVMe命令;转发进程调用虚拟NVMe驱动解析NVMe命令;转发进程调用虚拟NVMe驱动,通过解析NVMe命令,获取创建完成队列的参数,参数包括完成队列对应的MSIX表中的中断号、完成队列直接内存访问(Direct MemoryAccess,简称“DMA”)地址、完成队列ID、完成队列深度;转发进程调用虚拟NVMe驱动,根据参数创建完成队列。
[0013]结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,在根据该参数创建完成队列之后,当虚拟机访问MSIX表空间时,Qemu进程调用适配驱动通过回调函数创建eventfd;Qemu进程调用适配驱动,向KVM模块建立eventfd到虚拟机中MSIX表的中断号的对应关系;Qemu进程调用适配驱动,向转发进程发送eventfd与中断号,以便于转发进程调用虚拟NVMe驱动,建立完成队列到eventfd的对应关系。
[0014]因此,Qemu进程创建了完成队列到中断之间的连接,以便于转发进程调用虚拟NVMe驱动,建立完成队列到eventfd的对应关系。
[0015]结合第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,在向该转发进程发送eventfd和中断号之后,当虚拟机截获MSIX表的非掩膜(unmask)变化或掩膜(mask)变化时,Qemu调用适配驱动,并且调用回调函数,向转发进程发送eventfd和mask,或者eventf c^Punmask ; Qemu调用适配驱动,根据mask或unmask设置虚拟NVMe设备是否等待(pending)的标识,以便于转发进程根据标识决定是否向KVM模块开启eventfd。
[0016]结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,在根据mask或unmask设置虚拟NVMe设备是否pending的标识之后,转发进程轮询虚拟NVMe设备的doorbel I区域;当doorbe 11区域的O号命令队列包括创建发送队列的请求,转发进程调用虚拟NVMe驱动,从命令队列中获取虚拟机下发的NVMe命令;转发进程调用虚拟NVMe驱动,解析NVMe命令;转发进程调用虚拟NVMe驱动,通过解析NVMe命令,获取创建发送队列的参数,参数包括发送队列DMA地址、发送队列ID、发送队列深度、完成队列ID、发送队列标志位;转发进程调用虚拟NVMe驱动,根据参数创建发送队列。
[0017]结合第一方面的第二种至第六种可能的实现方式,在第一方面的第七种可能的实现方式中,该Qemu进程调用适配驱动,将该共享内存空间映射到虚拟NVMe设备的第一段BAR空间,包括= Qemu进程调用适配驱动,通过内存映射输入/输出的方式,将该共享内存空间映射到虚拟NVMe设备的第一段BAR空间;Qemu进程调用适配驱动,设置虚拟机控制结构(Vitrual Machine Control Structure,简称“VMCS”)寄存器,用于防止访问过程中产生陷入陷出。
[0018]基于上述技术方案,通过独立的转发进程完成虚拟NVMe设备的读写操作,并且该转发进程使用轮询的方式替代原有的定时器方式,能够避免Qemu锁竞争,同时能够解决时延长的问题,从而实现了一种高性能低时延的NVMe虚拟化方法,提高了虚拟机内应用程序对NVMe设备的访问速度。
[0019]第二方面,本发明实施例提供了一种虚拟化装置,该装置包括虚拟机和数据平面的转发进程,数据平面的转发进程包括虚拟非易失性内存扩展NVMe驱动,虚拟机包括虚拟NVMe设备,转发进程用于轮询虚拟NVMe设备的门铃doorbell区域;当doorbell区域发生变化时,调用虚拟NVMe驱动,从doorbell区域发生变化的发送队列中,获取虚拟机下发的NVMe命令,NVMe命令包括读写请求;调用虚拟NVMe驱动,解析NVMe命令,得到通用读写请求;获取物理设备对该通用读写请求的处理结果;调用虚拟NVMe驱动,将该物理设备的处理结果封装为NVMe响应;调用虚拟NVMe驱动,将NVMe响应添加到与发送队列对应的完成队列中。
[0020]该虚拟化装置用于执行上述第一方面或第一方面的任一方面的可能实现方式中的方法。
[0021]因此,本发明实施例的方法和装置,通过独立的转发进程完成虚拟NVMe设备的读写操作,并且该转发进程使用轮询的方式替代原有的定时器方式,能够避免Qemu锁竞争,同时能够解决时延长的问题,从而实现了一种高性能低时延的NVMe虚拟化方法,提高了虚拟机内应用程序对NVMe设备的访问速度。
【附图说明】
[0022]为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1