计算;推算;计数设备的制造及其应用技术1.本技术涉及计算机技术领域,尤其涉及一种虚拟机热迁移方法、系统、设备及存储介质。背景技术:2.随着虚拟化技术的不断发展,虚拟机(virtual machine,简称vm)的应用也越来越广泛。在实际应用中,往往需要通过热迁移将虚拟机从一个物理机迁移到另外一个物理机,以实现计算资源的动态调度、物理故障主动运维,等等。3.通常,虚拟机不仅拥有虚拟操作系统,还拥有虚拟设备(或称虚拟硬件),例如:虚拟网卡、虚拟存储设备,等等。因此,虚拟机热迁移的过程会涉及虚拟设备的热迁移。4.现有技术中,为了实现虚拟设备的热迁移,需要额外设计较多的处理逻辑来确保迁移前后状态一致,方案复杂,难度大。技术实现要素:5.本技术实施例提出一种虚拟机热迁移方法、系统、设备及存储介质,用于降低由虚拟操作系统管理队列场景下虚拟设备的热迁移的难度。6.于是,在本技术的一个实施例中,提供了一种虚拟机热迁移方法,适用于目的宿主机,所述目的宿主机上设有目的虚拟设备;其中,所述方法,包括:7.获取源宿主机发送的源数据队列的队列状态;所述源数据队列是源虚拟设备根据源虚拟操作系统生成的队列创建命令创建的;8.通过所述目的虚拟设备重放所述源虚拟设备执行过的队列创建命令,以创建目的数据队列并根据所述源数据队列的队列状态确定所述目的数据队列的队列状态。9.在本技术的又一实施例中,提供了一种虚拟机热迁移方法,适用于源宿主机,其中,包括:10.确定源数据队列的队列状态;所述源数据队列是源虚拟设备根据源虚拟操作系统生成的队列创建命令创建的;11.向目的宿主机发送所述源数据队列的队列状态;12.其中,所述目的宿主机上设有目的虚拟设备;所述目的宿主机用于:通过所述目的虚拟设备重放所述源虚拟设备执行过的队列创建命令,以创建目的数据队列并根据所述源数据队列的队列状态确定所述目的数据队列的队列状态。13.在本技术的又一实施例中,提供了一种电子设备。该电子设备,包括:存储器和处理器,其中,14.所述存储器,用于存储程序;15.所述处理器,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以实现上述任一项所述的方法。16.在本技术的又一实施例中,提供了一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现上述任一项所述的方法。17.本技术实施例提供的技术方案中,目的虚拟设备重放源虚拟设备执行过的由源虚拟操作系统生成的队列创建命令,以创建目的数据队列并根据源数据队列的队列状态确定目的数据队列的队列状态,使得虚拟设备的状态在迁移前后得到同步。通过重放源宿主机的队列创建命令,可以复用已有的创建流程,降低由虚拟操作系统管理队列场景下虚拟设备的热迁移的难度。附图说明18.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。19.图1为本技术一实施例提供的虚拟机热迁移系统的结构框图;20.图2为本技术一实施例提供的虚拟机热迁移方法的流程示意图;21.图3为本技术又一实施例提供的虚拟机热迁移系统的结构框图;22.图4为本技术一实施例提供的虚拟机热迁移示例图;23.图5为本技术一实施例提供的虚拟机热迁移方法的流程示意图;24.图6为本技术一实施例提供的电子设备的结构框图。具体实施方式25.目前,有不少虚拟机采用了virtio半虚拟化驱动来提高性能。virtio框架中包括前端驱动和后端驱动。其中,前端驱动是虚拟机的虚拟操作系统中的驱动程序模块;后端驱动是在虚拟机软件,例如qemu(虚拟操作系统模拟器)中实现的。在这前后端驱动之间,通过环形队列来保存前端驱动和后端驱动执行的信息,并且它可以一次性保存前端驱动的多次i/o请求,这样,后端驱动可以主动地去批量处理。这样做,就不用针对虚拟操作系统的每次i/o请求都处理一次,通过批量收发的方式减少了vmentry操作、vmexit操作以及上下文切换的的次数。26.为了进一步提高性能,有人提出vhost-user框架。在vhost-user框架中,后端驱动被卸载到用户态宿主服务进程(也即宿主机的物理操作系统的进程)中。虚拟机软件与用户态宿主服务进程通过vhost-user协议进行交互。基于vhost-user协议的nvme(non-volatile memory express,非易失性内存主机控制器接口规范)虚拟设备具有良好的读写性能。其中,基于vhost-user协议的nvme虚拟设备是基于kvm模型下的方案,这是纯软件模拟方案。27.若采用现有的虚拟设备热迁移方案来实现基于vhost-user协议的nvme虚拟设备的热迁移,则需要额外设计较多的处理逻辑,方案非常复杂。因此,本技术实施例提供了一种简单的热迁移方案以实现基于vhost-user协议的nvme虚拟设备的热迁移。28.术语解释:29.虚拟机(virtual machine,vm)是一种创建于物理硬件系统(位于外部或内部)、充当虚拟计算机系统的虚拟环境,它模拟出了自己的整套硬件,包括cpu、内存、网络接口和存储器。通过名为虚拟机监控程序的软件,用户可以将机器的资源与硬件分开并进行适当置备,以供虚拟机使用。30.虚拟机迁移:是指将正在运行的虚拟机从源宿主机移到目的宿主机上的过程。31.qemu:是一款开源的模拟器及虚拟机监管器(virtual machine monitor,vmm),也可称为是虚拟机软件,能够模拟出一台能够独立运行操作系统的虚拟机。32.kvm(kernel-based virtual machine):指的是基于内核的虚拟机,是一种内建于linux中的开源虚拟化技术。kvm可将linux转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(virtual machine,vm)宿主机,是指:虚拟机运行的载体,只有在宿主机上才能运行虚拟机,是虚拟化软件运行的服务端。33.为了使本技术领域的人员更好地理解本技术方案,下面将根据本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。34.此外,在本技术的说明书、权利要求书及上述附图中描述的一些流程中,包含了按照特定顺序出现的多个操作,这些操作可以不按照其在本文中出现的顺序来执行或并行执行。操作的序号如101、102等,仅仅是用于区分各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。35.在对本技术实施例提供的虚拟机热迁移方法介绍之前,对本技术实施例提供的虚拟机热迁移方法所涉及的系统架构进行介绍。如图1所示,虚拟机热迁移系统包括:源宿主机1和目的宿主机2;36.所述源宿主机1用于:确定源数据队列的队列状态;所述源数据队列是源虚拟设备11根据源虚拟操作系统12生成的队列创建命令创建的;所述源宿主机1上设有所述源虚拟操作系统12和所述源虚拟设备11;向目的宿主机2发送所述源数据队列的队列状态;37.所述目的宿主机2用于:通过目的虚拟设备21重放所述源虚拟设备11执行过的队列创建命令,以创建目的数据队列并根据所述源数据队列的队列状态确定所述目的数据队列的队列状态;38.其中,所述目的宿主机上设有所述目的虚拟设备21。39.本技术实施例提供的技术方案中,目的虚拟设备重放源虚拟设备执行过的由源虚拟操作系统生成的队列创建命令,以创建目的数据队列并根据源数据队列的队列状态确定目的数据队列的队列状态,使得虚拟设备的状态在迁移前后得到同步。通过重放源宿主机的队列创建命令,可以复用已有的创建流程,降低由虚拟操作系统管理队列场景下虚拟设备的热迁移的难度。40.实际应用中,云计算架构包括:计算集群和存储集群所述集群是由多个物理机组成的一个集合,逻辑上作为一个整体来管理、提供计算服务或存储服务(例如:云盘)。计算集群提供云服务器资源,云服务器是由云服务厂商基于云计算技术提供的,让用户能以远程登陆的方式进行操作管理的服务器,在用户使用方式上与普通的远程物理服务器一样、云服务器所需的云盘功能由计算集群的云主机连同后端的存储集群一起提供。一个计算集群里面有多个计算节点,每个计算节点都是一台物理机器,一台物理机器上可以运行多个虚拟机软件(每个虚拟机软件虚拟化出一个虚拟机,一个虚拟机也即一个云服务器),每个虚拟机软件可对应设有多个虚拟设备,例如:云盘。云盘是建立在分布式存储系统之上的磁盘实例,在云服务器中可当做计算机磁盘一样进行读写使用。每一个计算节点具有云盘宿主服务(也即后文中的后端驱动),云盘宿主服务负责处理当前计算节点上的所有云服务器的所有云盘服务,主要是将云盘的io读写请求转发到后端的存储集群。因此,在一实例中,上述源宿主机1具体为源宿主机计算节点;上述目的宿主机2具体为目的宿主机计算节点。源宿主机计算节点和目的宿主机计算节点为计算集群中不同的计算节点。41.上述系统中目的宿主机和源宿主机的处理过程以及两者之间的交互过程将在下述各实施例中详细介绍。42.图2示出了本技术实施例提供的虚拟机热迁移方法的流程示意图。该方法适用于目的宿主机,也即本技术实施例提供的方法的执行主体为目的宿主机,目的宿主机上设有目的虚拟设备。如图2所示,该方法,包括:43.201、获取源宿主机发送的源数据队列的队列状态。44.其中,所述源数据队列是源虚拟设备根据源虚拟操作系统生成的队列创建命令创建的;所述源虚拟操作系统和所述源虚拟设备运行于所述源宿主机上。45.202、通过所述目的虚拟设备重放所述源虚拟设备执行过的队列创建命令,以创建目的数据队列并根据所述源数据队列的队列状态确定所述目的数据队列的队列状态。46.目的宿主机上还可虚拟化有目的虚拟操作系统。在一实例中,可在目的宿主机上运行目的虚拟机软件,例如:qemu,以虚拟化出上述目的虚拟操作系统和目的虚拟设备。47.上述201中,上述源数据队列可包括:源数据提交队列和源数据完成队列。源数据提交队列用于存储源虚拟操作系统生成的i/o命令;源数据完成队列用于存储源虚拟设备针对从源数据提交队列中读取出的i/o命令的响应信息。相应的,目的数据队列可包括:目的数据提交队列和目的数据完成队列。48.源数据队列的队列状态用于指示源数据队列的队首元素位置和队尾元素位置。在一实例中,源数据队列的队列状态可包括:队列指针,队列指针包括:头指针和尾指针。头指针用于指示源数据队列的队首元素位置,尾指针用于指示源数据队列的队尾元素位置。49.其中,源数据队列的尾指针由源数据队列的生产者维护;源数据队列的头指针由源数据队列的消费者维护。当源数据队列为源数据提交队列时,其生产者为源虚拟操作系统,其消费者为源虚拟设备。当源数据队列为源数据完成队列时,其生产者为源虚拟设备,其消费者为源虚拟操作系统。50.在一实例中,队列创建命令中可包括:队列编号、队列大小、队列的客户物理地址(guest physical address,gpa),等等。队列编号可包括:队列id。用于创建源数据提交队列的队列创建命令中还可包括:对应的源数据完成队列的队列编号;用于创建源数据完成队列的队列创建命令中还可包括:中断指示信息,中断指示信息用于指示是否需要在向源数据完成队列写入响应信息时插入中断。51.上述202中,目的虚拟设备重放源虚拟设备执行过的由源虚拟操作系统生成的队列创建命令,以创建目的数据队列。目的虚拟设备根据源数据队列的队列状态修改目的数据队列的队列状态。具体的,目的虚拟设备根据源数据队列的队列状态修改目的数据队列的由所述目的虚拟设备维护的队列状态。52.目的虚拟设备创建目的数据队列,本质上就是在目的虚拟设备对应的内存中创建目的数据队列的队列结构体。队列结构体也即队列元数据。注:目的虚拟操作系统对应的内存与目的虚拟设备对应的内存无交集。队列结构体中包含目的数据队列的队列属性信息和队列状态。队列属性信息可包括:队列编号、队列长度、队列在目的虚拟设备侧的虚拟地址,等等。其中,队列在目的虚拟设备侧的虚拟地址是根据队列创建命令中携带的队列的客户物理地址映射得到的,目的虚拟设备通过队列在目的虚拟设备侧的虚拟地址来访问队列的。53.队列结构体中所包含的队列状态可包括:目的数据队列的由目的虚拟设备维护的队列指针。当目的数据队列为目的数据提交队列时,队列结构体中所包含的队列状态可包括:目的数据提交队列的头指针;当目的数据队列为目的数据完成队列时,队列结构体中所包含的队列状态中所包含的队列状态可包括:目的数据完成队列的尾指针。54.通过重放队列创建命令,可以复用原有的数据队列创建流程,也即复用原有队列创建的代码,无需额外迁移由目的虚拟设备维护的队列状态、也无需额外修改队列结构体中队列在虚拟设备侧的虚拟地址、更无需额外结合迁移前后虚拟设备版本之间的差异对迁移后的队列结构体内的数据格式进行适应性修改,可简化虚拟机设备热迁移方案。需要说明的是,在本技术实施例中,无论迁移前后虚拟设备版本是否发生变化,由于目的虚拟设备是基于自身的逻辑代码重放源虚拟设备执行过的队列创建命令的,那么其创建的队列结构体是适用于其自身的逻辑代码的,不会存在不兼容的问题。55.在本技术实施例中,在目的后端驱动接管源后端驱动提供的服务之前,源后端驱动根据源虚拟操作系统的io命令请求外部的分布式存储系统(例如上述的存储集群)完成相应的读写操作。在目的后端驱动接管源后端驱动提供的服务之后,目的后端驱动根据目的虚拟操作系统io命令请求该分布式存储系统完成相应的读写操作。56.此外,源数据队列中存储的数据可通过同步源虚拟操作系统的内存的方式迁移至目的宿主机。具体的,上述方法,还可包括:将所述源虚拟操作系统的内存数据同步至目的虚拟操作系统的内存中;所述目的宿主机上设有所述目的虚拟操作系统;所述内存数据中包括:所述源数据队列中存储的数据。其中,内存同步的具体实现方式可参加现有技术,在此不再赘述。57.本技术实施例提供的技术方案中,目的虚拟设备重放源虚拟设备执行过的由源虚拟操作系统生成的队列创建命令,以创建目的数据队列并根据源数据队列的队列状态确定目的数据队列的队列状态,使得虚拟设备的状态在迁移前后得到同步。通过重放源宿主机的队列创建命令,可以复用已有的创建流程,降低由虚拟操作系统管理队列场景下虚拟设备的热迁移的难度。58.以虚拟设备为nvme虚拟设备为例,控制队列在设备初始化之后随即创建,其包括一个提交队列和一个完成队列。其他的数据队列则是由控制队列中的控制命令来产生的。nvme规定的数据队列的关系比较灵活,既可以一个提交队列对应一个完成队列,也可以几个提交队列共同对应一个完成队列。59.在一实例中,上述方法,还可包括:接收源宿主机发送的所述源数据队列的队列属性信息;队列属性信息可包括:队列编号、队列长度、队列在目的虚拟设备侧的虚拟地址,等等。当源数据队列为源数据提交队列时,队列属性信息还可包括:对应的源数据完成队列的队列编号;当源数据队列为源数据完成队列时,队列属性信息还可包括:上述中断指示信息,中断指示信息用于指示是否需要在向源数据完成队列写入响应信息时插入中断;根据上述队列属性信息,重构出所述源虚拟设备执行过的队列创建命令。60.在一种可实现的方案中,上述方法,还可包括:61.203、接收所述源宿主机发送的所述源虚拟设备执行过的队列创建命令。62.其中,所述源虚拟设备执行过的队列创建命令由所述源虚拟设备记录得到。63.在本实施例中,通过记录即可实现重放,实现起来更加简单。64.在一实例中,源宿主机可执行如下步骤:在源虚拟设备根据源虚拟操作系统生成的队列创建命令创建源数据队列时,由源虚拟设备记录当前所执行的队列创建命令;当需要进行虚拟机热迁移时,将源虚拟设备所记录的队列创建命令发送给目的宿主机。65.实际应用中,在创建队列后,有时候还需要删除队列。也就是说,除了需要记录队列创建命令,还需要记录队列删除命令。因此,源宿主机可执行如下步骤:在源虚拟设备根据源虚拟操作系统生成的队列创建命令创建源数据队列时,由源虚拟设备记录当前所执行的队列创建命令;在源虚拟设备根据源虚拟操作系统生成的队列删除命令删除数据队列时,由源虚拟设备记录当前所执行的队列删除命令;当需要进行虚拟机热迁移时,确定源虚拟设备是否记录有队列删除命令,若未记录有队列删除命令,则将所记录的队列创建命令发送给目的宿主机;若记录有队列删除命令,则根据所记录的队列删除命令,对所记录的队列创建命令进行删减,得到删减后的队列创建命令;将删减后的队列创建命令发送给目的宿主机。其中,删减后的队列创建命令的数量小于所记录的队列创建命令的数量。66.上述实施例中,删除操作由源宿主机执行。在另一种实施例中,上述删除操作也可由目的宿主机来执行,这样,源宿主机直接将所记录的队列删除命令和队列创建命令一起发送给目的宿主机即可。67.实际应用中,虚拟操作系统通过上述数据队列与虚拟设备进行数据传输;虚拟操作系统还通过控制队列管理控制虚拟设备。因此,上述方法,还可包括:68.204、获取源控制队列的队列状态。69.205、由所述目的虚拟设备构建目的控制队列并由所述目的虚拟设备根据所述源控制队列的队列状态确定所述目的控制队列的队列状态。70.上述204中,所述源控制队列用于存储所述源虚拟操作系统需发送给所述源虚拟设备的队列创建命令。71.源虚拟操作系统将其生成的队列创建命令、队列删除命令依次写入源控制队列中;源虚拟设备从源控制队列中依次读取队列创建命令、队列删除命令;源虚拟设备依次基于读取出的队列创建命令创建源数据队列、基于读取出的队列删除命令删除源数据队列。72.上述源控制队列可包括:源控制提交队列和源控制完成队列。源控制提交队列用于存储源虚拟操作系统的队列创建命令、队列删除命令,等等;源控制完成队列用于存储源虚拟设备针对从源控制提交队列中读取出的队列创建命令或队列删除命令的响应信息。相应的,目的控制队列可包括:目的控制提交队列和目的控制完成队列。73.源控制队列的队列状态用于指示源控制队列的队首元素位置和队尾元素位置。在一实例中,源控制队列的队列状态可包括:队列指针,队列指针包括:头指针和尾指针。头指针用于指示源控制队列的队首元素位置,尾指针用于指示源控制队列的队尾元素位置。74.其中,源控制队列的尾指针由源控制队列的生产者维护;源控制队列的头指针由源控制队列的消费者维护。当源控制队列为源控制提交队列时,其生产者为源虚拟操作系统,其消费者为源虚拟设备。当源控制队列为源控制完成队列时,其生产者为源虚拟设备,其消费者为源虚拟操作系统。75.源控制队列位于源虚拟操作系统的内存中,也即源虚拟操作系统的内存数据包括:源控制队列中存储的数据。因此,源控制队列中存储的数据也可通过同步源虚拟操作系统的内存的方式迁移至目的宿主机。76.上述205中,目的虚拟设备可自动构建目的控制队列的队列结构体。队列结构体中包括:目的控制队列的由目的虚拟设备维护的队列状态。目的虚拟设备根据所述源控制队列的队列状态修改该队列结构体中目的控制队列的由目的虚拟设备维护的队列状态。77.上述各虚拟设备具体可以为虚拟存储设备。下面将以源虚拟设备、目的虚拟设备为基于vhost-user协议的nvme虚拟设备为例对本技术实施例进行介绍:78.在一实例中,如图3所示,目的虚拟设备21包括:目的虚拟设备控制器211(或称目的虚拟设备接口)和目的后端驱动212;所述目的虚拟设备控制器211以及所述目的虚拟操作系统22由运行于所述目的宿主机2的目的虚拟机软件200虚拟化得到;所述目的虚拟机软件200与所述目的后端驱动212运行于目的宿主机2的物理操作系统不同的用户态进程中;目的虚拟操作系统22和目的虚拟设备控制器211共同构成目的虚拟机。79.目的虚拟操作系统22中可安装有目的前端驱动221;目的虚拟操作系统22通过目的前端驱动221向目的虚拟设备控制器211发送队列创建命令和i/o命令。80.本技术实施例中的虚拟设备控制器,也即虚拟的设备控制器,用于控制虚拟设备,以实现虚拟设备和虚拟操作系统之间的数据交换。81.上述202中“通过所述目的虚拟设备重放所述源虚拟设备执行过的队列创建命令,以创建目的数据队列并根据所述源数据队列的队列状态确定所述目的数据队列的队列状态”,可包括:82.2021、通过所述目的虚拟设备控制器重放所述源虚拟设备执行过的队列创建命令,以请求所述目的后端驱动创建目的数据队列并根据所述源数据队列的队列状态确定所述目的数据队列的队列状态。83.在本实施例中,目的控制队列用于目的虚拟操作系统与目的虚拟设备控制器之间交互;目的数据队列用于目的虚拟操作系统与目的后端驱动之间交互。84.目的虚拟设备控制器将源虚拟设备执行过的队列创建命令发送给目的后端驱动;目的后端驱动根据该队列创建命令创建目的数据队列的队列结构体;目的后端驱动根据源数据队列的队列状态修改该队列结构体中目的数据队列的由目的后端驱动维护的队列状态,例如:队列指针。目的数据队列包括:目的数据提交队列和目的数据完成队列。当目的数据队列为目的数据提交队列时,目的数据队列的由目的后端驱动维护的队列状态为目的数据提交队列的头指针;当目的数据队列为目的数据完成队列时,目的数据队列的由目的后端驱动维护的队列状态为目的数据完成队列的尾指针。85.此外,源虚拟设备11包括:源虚拟设备控制器111(或称源虚拟设备接口)和源后端驱动112;所述源虚拟设备控制器111以及所述源虚拟操作系统12由运行于所述源宿主机1的源虚拟机软件100虚拟化得到;所述源虚拟机软件100与所述源后端驱动112运行于源宿主机1的物理操作系统不同的用户态进程中;源虚拟操作系统12和源虚拟设备控制器111共同构成源虚拟机。86.源虚拟操作系统12中可安装有源前端驱动121;源虚拟操作系统12通过源前端驱动121向源虚拟设备控制器111发送队列创建命令和i/o命令。87.在本实施例中,所述源数据队列是所述源虚拟设备控制器111根据所述源虚拟操作系统12生成的队列创建命令请求所述源后端驱动112创建的。源虚拟设备控制器111从源控制提交队列中读取出队列创建命令,将队列创建命令发送给源后端驱动112并记录下该队列创建命令,源后端驱动112根据该队列创建命令在源后端驱动112的内存中创建源数据队列的队列结构体。源数据队列的由源虚拟设备维护的队列状态具体指的是源数据队列的由源后端驱动维护的队列状态。源控制队列的由源虚拟设备维护的队列状态具体指的是源数据队列的由源虚拟设备控制器维护的队列状态。88.在本技术实施例中,虚拟设备是基于用户态卸载的方案实现的,也即将虚拟设备的部分功能卸载到另一个用户态宿主进程中,也即由运行于另一个用户态宿主进程中的后端驱动来实现虚拟设备的部分功能。89.可选地,所述源数据队列的队列状态包括:所述源数据队列的由所述源后端驱动维护的队列指针。90.上述2021中“所述目的后端驱动创建目的数据队列”,包括:91.s11、所述目的后端驱动创建目的数据队列的队列结构体。92.其中,所述队列结构体中包括所述目的数据队列的由所述目的后端驱动维护的队列指针。上述队列结构体位于目的后端驱动的内存中。93.上述2021中“所述目的后端驱动根据所述源数据队列的队列状态确定所述目的数据队列的队列状态”,包括:94.所述目的后端驱动根据所述源数据队列的由所述源后端驱动维护的队列指针,在所述队列结构体中修改所述目的数据队列的由所述目的后端驱动维护的队列指针。95.队列结构体中包含目的数据队列的队列属性信息和队列状态。队列属性信息可包括:队列编号、队列长度、队列在目的后端驱动侧的虚拟地址,等等。其中,队列在目的后端驱动侧的虚拟地址是根据队列创建命令中携带的队列的客户物理地址映射得到的,目的后端驱动通过队列在目的后端驱动侧的虚拟地址来访问队列的。96.需要补充说明的是,在vhost-user中复杂的是地址转换。从qemu进程角度看虚拟操作系统的内存有两种地址:gpa(guest physical address)和qva(qemu virtual address);从后端驱动所在的进程看虚拟操作系统的内存也有两种地址gpa(guest physical address)和vva(vhost virtual address。97.gpa是virtio最重要的地址,在virtio的标准中,用来存储数据包地址的数据队列里面每项都是以gpa表示的。但是对于虚拟操作系统而言,在进程内访问数据队列实际使用的都是虚拟地址,物理地址已经被屏蔽,也就是说进程只有拿到了物理地址所对应的虚拟地址才能够去访存。98.qemu进程容易实现,毕竟作为虚拟操作系统的主进程给虚拟操作系统预分配内存时就建立了qva到gpa的映射关系。99.对于后端驱动所在的进程,需要确定出虚拟操作系统的内存映射到后端驱动所在进程的虚拟地址空间的起始地址。这样给后端驱动所在的进程一个gpa,后端驱动所在的进程可以利用地址偏移算出对应的vva(也即队列在目的后端驱动侧的虚拟地址),然后实施访存。100.可选地,所述源数据队列包括:源数据提交队列和源数据完成队列;所述源数据队列的由所述源后端驱动维护的队列指针是所述源宿主机在所述源后端驱动停止从所述源数据提交队列读取i/o命令且执行完已读取i/o命令后确定的。已读取i/o命令指的是已从所述源数据提交队列中读取出的i/o命令。具体的,源虚拟设备控制器接收到虚拟机迁移请求后,向源后端驱动发送队列状态获取请求;源后端驱动接收到队列状态获取请求后,停止从所述源数据提交队列中读取i/o命令,并继续执行已从所述源数据提交队列中读取出的i/o命令;当已从所述源数据提交队列中读取出的i/o命令执行完成后,将源数据队列的由源后端驱动所维护的队列状态发送给源虚拟设备控制器,源虚拟设备控制器再将源数据队列的由源后端驱动所维护的队列状态发送给目的虚拟设备控制器。通常,源数据队列的个数为多个,源后端驱动可通过一次交互将多个源数据队列的由源后端驱动维护的队列状态发送给源虚拟设备控制器;目的虚拟设备控制器也可通过一次交互将多个源数据队列的由源后端驱动维护的队列状态发送给目的后端驱动。具体的,可定义了一组新的vhost消息:vhost_user_nvme_get_queue和vhost_user_nvme_set_queue。源后端驱动通过vhost_user_nvme_get_queue可一次性上报所有的已创建的源数据提交队列的头指针、源数据完成队列的尾指针给源虚拟设备控制器;目的虚拟设备控制器通过vhost_user_nvme_set_queue下发所有的已创建的源数据提交队列的头指针、源数据完成队列的尾指针给目的后端驱动。这样,就不再像virtio-blk的协议定义,依赖qemu通过预置的队列数,逐队列发送vhost消息获取队列的队列指针。101.源虚拟设备控制器可将源虚拟设备控制器的状态、源后端驱动上传来的源数据队列的由源后端驱动维护的队列状态、源控制队列的队列状态发送给目的虚拟机软件。源虚拟设备控制器的状态可包括:源虚拟操作系统是否启用源虚拟设备。102.需要说明的是,队列状态除了通过源虚拟机软件来迁移,还可通过独立的新宿主进程、虚拟机管理器、调用虚拟机管理器的中心化管控进程或者源后端驱动与目的后端驱动之间的通信等形式来传递,本技术实施例对此不作具体限制。103.本技术实施例中,目的虚拟设备与目的后端驱动构成目的虚拟设备、源虚拟设备与源后端驱动构成源虚拟设备。本技术实施例提供的技术方案不仅适用于上文所提及的基于vhost-user协议的nvme虚拟设备的热迁移,还适用于任何由虚拟操作系统管理队列场景下的其他虚拟设备的热迁移,本技术实施例对此不作具体限定。104.在一实例中,源虚拟设备控制器接收到源后端驱动发送来的队列状态之后,可断开与源后端驱动之间的交互链接;源后端驱动检测到其与源虚拟设备控制器之间的交互链接断开后,可关闭针对该源虚拟设备控制器的相关服务,例如:云盘服务,回收资源。105.在另一实例中,源虚拟设备控制器接收到源后端驱动发送来的队列状态之后,无需主动断开与源后端驱动之间的交互链接。源后端驱动可以每隔预设时间间隔检测其所提供的服务(例如云盘服务)是否被目的后端驱动抢占,若被抢占,则源后端驱动断开与源虚拟设备控制器之间的交互链接,并关闭针对该源虚拟设备控制器的相关服务,回收资源。106.下面将结合图3和图4对本技术实施例提供的技术方案进行举例介绍:107.迁移前:108.在源宿主机1上运行有源虚拟机管理器13、源虚拟机软件100和源后端驱动112。源虚拟机软件100虚拟化出源虚拟操作系统12以及源虚拟设备控制器111。上述源后端驱动112可以为源宿主机1上的一个或多个源虚拟机软件提供云盘服务。源虚拟机软件100的源虚拟设备控制器111记录其执行过的队列创建命令和队列删除命令。当虚拟设备为nvme虚拟设备时,上述队列创建命令和队列删除命令均为nvme admin命令。109.当源宿主机1的硬件资源难以支撑其上所运行的多个虚拟机软件时,则需要将源宿主机1上的部分虚拟机软件进行热迁移,以减轻源宿主机的负担。实际应用时,可以系统自动触发或人工触发虚拟机软件热迁移(也即虚拟机热迁移)的过程。110.如图3和图4所示,迁移流程包括:111.1、源虚拟机管理器13向源虚拟机软件100发送虚拟机迁移请求。112.可通过外部调用源虚拟机管理器13向源虚拟机软件100发送虚拟机迁移请求。源虚拟机管理器13部署在源宿主机1,用于创建、关停、迁移虚拟机。目的宿主机2上也可运行有目的虚拟机管理器。源宿主机1上的源虚拟机管理器13告知目的宿主机2上的目的虚拟机管理器启动目的虚拟机软件200,以虚拟化出目的虚拟机,进而让源虚拟机软件100与目的虚拟机软件200之间进行交互。具体的,源虚拟机管理器13可将源虚拟机的配置信息发送给目的虚拟机管理器,以由目的虚拟机管理器创建出目的虚拟机。113.2、源虚拟机软件100的源虚拟设备控制器111向源后端驱动112发送队列状态获取请求。114.3、源云盘宿主112(也即上文中的源后端驱动)中的源虚拟设备控制器后端停止从源数据提交队列中读取i/o命令,并继续刷已读取出的i/o命令。115.4、源云盘宿主112中的源虚拟设备控制器后端将源数据队列的由源云盘宿主112维护的队列状态上传给源虚拟设备控制器111。116.5、源虚拟机软件100断开与源云盘宿主112之间的交互连接。117.6、源云盘宿主112中的本地状态管理器销毁本地状态,关闭云盘服务。118.7、源虚拟机软件100将源虚拟设备控制器111执行过的队列创建命令、源数据队列的由源后端驱动112维护的队列状态、源虚拟设备控制器111的状态以及源控制队列的队列状态发送给目的虚拟机软件,也即数据迁移。119.8、目的虚拟设备控制器211与目的后端驱动212建立连接,以由目的后端驱动212打开云盘服务。120.9、目的虚拟设备控制器212将源数据队列的由源后端驱动112维护的队列状态发送给目的后端驱动。121.10、目的虚拟设备控制器211重放队列创建命令。122.11、目的云盘宿主212(也即上文的目的后端驱动)根据重放的队列创建命令重建目的数据队列,并根据源数据队列的由源后端驱动112维护的队列状态重建目的数据队列的由目的后端驱动212维护的队列状态。123.其中,目的云盘宿主212重建本地状态后,开始正常接管服务。。124.此外,虚拟操作系统生成队列创建命令,将队列创建命令写入虚拟操作系统的内存中源控制提交队列中,并维护源控制提交队列的写指针;源虚拟设备从源控制提交队列中读取队列创建命令,并维护源控制提交队列的读指针以及记录读取出的队列创建命令,将所述队列创建命令发送给源云盘宿主;源云盘宿主根据队列创建命令在虚拟操作系统的内存中创建源数据队列;数据队列可包括:数据面提交队列以及与所述数据面提交队列相对应的数据队列完成队列;虚拟操作系统通过前端驱动将io命令写入该数据面提交队列中,维护该数据面提交队列的写指针,将该数据面提交队列的写指针写入源虚拟设备控制器的门铃(doorbell)寄存器中;源云盘宿主根据doorbell寄存器中的值以及自己维护的数据面提交队列的读指针,从数据面提交队列中读取io请求,并维护数据面提交队列的读指针,处理所述io命令,然后将io命令的响应结果写入数据队列完成队列中,维护数据面完成队列的写指针,并发送中断给虚拟操作系统。虚拟操作系统接收到中断后,从数据面完成队列中读取响应信息,并维护数据面完成队列的读指针。虚拟操作系统的内存为共享内存,共享给源云盘宿主使用。125.在实际应用中,还可将源虚拟设备控制器的门铃(doorbell)寄存器中的值发送给目的虚拟设备控制器。126.综上所述,记录源端执行过的队列创建命令,在目的端重放,使得迁移前后的状态得到同步;并且,通过拓展虚拟设备控制器与云盘宿主之间的vhost消息,使得云盘宿主能够将多个队列的队列状态信息通过一次性交互发送给虚拟设备控制器。127.图5示出了本技术一实施例提供的虚拟机热迁移方法的流程示意图。该方法的执行主体为源宿主机。128.501、确定源数据队列的队列状态。129.其中,所述源数据队列是源虚拟设备根据源虚拟操作系统生成的队列创建命令创建的;所述源宿主机上设有所述源虚拟操作系统和所述源虚拟设备。130.502、向目的宿主机发送所述源数据队列的队列状态;131.其中,所述目的宿主机上设有目的虚拟设备;所述目的宿主机用于:通过所述目的虚拟设备重放所述源虚拟设备执行过的队列创建命令,以创建目的数据队列并根据所述源数据队列的队列状态确定所述目的数据队列的队列状态。132.上述步骤501和502的具体实现过程可参加上述各实施例中相应内容,在此不在赘述。133.本技术实施例提供的技术方案中,目的虚拟设备重放源虚拟设备执行过的由源虚拟操作系统生成的队列创建命令,以创建目的数据队列并根据源数据队列的队列状态确定目的数据队列的队列状态,使得虚拟设备的状态在迁移前后得到同步。通过重放源宿主机的队列创建命令,可以复用已有的创建流程,降低由虚拟操作系统管理队列场景下虚拟设备的热迁移的难度。134.可选地,上述方法,还可包括:135.503、当所述源虚拟设备根据所述源虚拟操作系统生成的队列创建命令创建源数据队列时,记录当前所执行的队列创建命令。136.504、当需要进行虚拟机热迁移时,向所述目的宿主机发送所记录的所述源虚拟设备执行过的队列创建命令。137.上述步骤503和504的具体实现可参加上述各实施例中相应内容,在此不再赘述。138.这里需要说明的是:本技术实施例提供的所述方法中各步骤未尽详述的内容可参见上述实施例中的相应内容,此处不再赘述。此外,本技术实施例提供的所述方法中除了上述各步骤以外,还可包括上述各实施例中其他部分或全部步骤,具体可参见上述各实施例相应内容,在此不再赘述。139.图6示出了本技术一实施例提供的电子设备的结构示意图。如图6所示,所述电子设备包括存储器1101以及处理器1102。存储器1101可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令。存储器1101可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。140.所述存储器1101,用于存储程序;141.所述处理器1102,与所述存储器1101耦合,用于执行所述存储器1101中存储的所述程序,以实现上述各方法实施例提供的方法。142.进一步,如图6所示,电子设备还包括:通信组件1103、显示器1104、电源组件1105、音频组件1106等其它组件。图6中仅示意性给出部分组件,并不意味着电子设备只包括图6所示组件。143.相应地,本技术实施例还提供一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现上述各方法实施例提供的方法的步骤或功能。144.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。145.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。146.最后应说明的是:以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
虚拟机热迁移方法、系统、设备及存储介质与流程 专利技术说明
作者:admin
2022-11-30 07:23:41
986
关键词:
计算;推算;计数设备的制造及其应用技术
专利技术