CN106598696B - 一种虚拟机之间数据交互的方法及装置 - Google Patents
一种虚拟机之间数据交互的方法及装置 Download PDFInfo
- Publication number
- CN106598696B CN106598696B CN201610983811.7A CN201610983811A CN106598696B CN 106598696 B CN106598696 B CN 106598696B CN 201610983811 A CN201610983811 A CN 201610983811A CN 106598696 B CN106598696 B CN 106598696B
- Authority
- CN
- China
- Prior art keywords
- data
- virtual machine
- sent
- target memory
- memory chip
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及计算机领域,尤其涉及一种虚拟机之间数据交互的方法及装置,以解决虚拟机之间进行数据传输可能出现的处理瓶颈问题,该方法包括:第一虚拟机确定第一虚拟机中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度;第一虚拟机根据第二虚拟机的标识确定目标内存片的标识;第一虚拟机根据目标内存片中的写偏移信息确定待发送数据的初始拷贝位置,并根据待发送数据的起始地址和数据长度将待发送数据拷贝至目标内存片,更新写偏移信息。因此,该方法不依赖于现有的网络协议,加快了虚拟机之间的业务处理。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种虚拟机之间数据交互的方法及装置。
背景技术
现有虚拟机技术大量应用在集群业务,在集群业务中各个虚拟机(virtualmachine,VM)之间会存在大量的数据交互。目前通用的做法,是基于虚拟机作为一个独立单元,虚拟机之间通过标准传输通道进行数据传输,具有标准化、易用性且兼容性好等优点。但在虚拟机之间单次业务量交互较大且虚拟机之间需要多次交互处理的场景中,如果通过标准传输通道进行数据传输,则可能出现由于到达处理瓶颈导致的应用受限或者无法应用。
现有技术中提出了以下两种加速处理虚拟机间业务的方法:
方法1:高性能网络I/O框架(the fast packet I/O framework,netmap)是通过内存映射将网络缓存(buffer)映射到每个虚拟机对应的用户空间去,使虚拟机可直接操作buffer。具体的,在没有内存映射时,上层应用的数据从用户态到内核态,再到网卡驱动的缓存需要有几次拷贝。通过内存映射后,数据拷贝层次减小。数据拷贝次数减小,加速虚拟机间业务处理,提高TCP/IP协议栈的性能。netmap是基于网卡驱动转发进行加速处理的通用做法。
方法2:通过单根I/O虚拟化(Single-root I/O virtualization,SR-IOV)加速网络传输,其中,SR-IOV是根据***部件互连专业组(Peripheral Component InterconnectSpecial Interest Group,PCI-SIG)定义的一种用于实现标准用语创建和管理本地共享的设备。它与netmap一样,也是基于网卡加速实现网络报文传输。
发明内容
本发明实施例的目的是提供一种虚拟机之间数据交互的方法及装置,以解决虚拟机之间进行数据传输时,可能出现的由于到达处理瓶颈而导致的应用受限或者无法应用的问题。
本发明实施例的目的是通过以下技术方案实现的:
第一方面,一种虚拟机之间数据交互的方法,包括:第一虚拟机确定第一虚拟机中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度,第一虚拟机与第二虚拟机属于同一个宿主机;本发明实施例主要应用于同一宿主机内各个虚拟机进行之间进行通信的场景。进一步地,第一虚拟机根据第二虚拟机的标识确定目标内存片的标识,目标内存片是指宿主机为第一虚拟机分配的用于存储第一虚拟机发往第二虚拟机的数据的内存片,其中,宿主机为每个虚拟机都分配了对应宿主机内每个其他虚拟机的唯一内存片。第一虚拟机根据目标内存片中的写偏移信息确定待发送数据的初始拷贝位置,并根据待发送数据的起始地址和数据长度将待发送数据拷贝至目标内存片,更新写偏移信息;其中,写偏移信息用于指示目标内存片中已存储数据的写偏移,即指示了上次拷贝数据后的结束位置。因此,相比于现有技术中,基于网卡实现网络报文传输,采用本发明实施例提供的方法只需拷贝一次数据,不依赖于现有的网络协议,通过宿主机中的共享内存实现虚拟机之间的交互,加快虚拟机之间的业务处理,从而满足对虚拟机之间交互性能要求较高的场景要求。
在一种可能的实现方式中,所述目标内存片包括管理控制区和业务负载区;所述管理控制区用于存储所述目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息;所述业务负载区用于存储所述第一虚拟机发往所述第二虚拟机的数据;所述第一虚拟机根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述内存片,包括:所述第一虚拟机确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,确定在超出预设时长前所述业务负载区的剩余内存空间大小大于所述数据的数据长度时,根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述业务负载区。此时,第一虚拟机等待剩余内存空间大小大于待拷贝数据的数据长度,以免出现丢包的情况。
在一种可能的实现方式中,还包括:所述第一虚拟机确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,所述第一虚拟机将所述待发送数据拷贝至所述业务负载区失败。此时,第一虚拟机不等待剩余空间变化,当剩余内存空间大小小于等于所述数据的数据长度时,直接丢弃数据,以免后续数据堆积,加快数据处理速度。
此外,在循环缓存管理***中,当写偏移达到业务负载区的尾部时,即业务负载区的剩余空间大小为0,可以根据读偏移覆盖业务负载区中的内容,以实现循环缓存的利用。
第二方面、一种虚拟机之间数据交互的方法,包括:第一虚拟机检测所述第一虚拟机对应的目标内存片集合,每个目标内存片用于存储发往所述第一虚拟机的数据;所述第一虚拟机检测到第一目标内存片中的写偏移信息更新时,根据所述写偏移信息和所述第一目标内存片中的读偏移信息读取所述第一目标内存片中的数据,并更新所述读偏移信息;其中,所述写偏移信息用于指示所述第一目标内存片中已存储数据的写偏移,所述读偏移信息用于指示所述第一目标内存片中已读取数据的读偏移。因此,虚拟机可以检测到哪些虚拟机向自身发送数据,并及时根据对应内存片的读偏移信息和写偏移信息读取内存片中的数据,加快虚拟机之间的业务处理,从而满足对虚拟机之间交互性能要求较高的场景要求。
此外,第一虚拟机根据第一目标内存片中的读偏移信息,获知已读取数据的读偏移,从该读取位置开始读取数据,最多可读取至写偏移信息所指示的已存储数据的写偏移,或者,第一虚拟机配置每次读取数据的预设数据读取长度,当写偏移与读偏移的差值大于等于预设数据读取长度时,读取预设数据读取长度的数据。当写偏移与读偏移的差值小于预设数据读取长度时,可以下次再执行读取。当第一虚拟机读取第一目标内存片中的数据时,需要更新读偏移信息。
在一种可能的实现方式中,所述第一目标内存片包括管理控制区和业务负载区;所述管理控制区用于存储所述第一目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息和所述读偏移信息;所述业务负载区用于存储所述第二虚拟机发往所述第一虚拟机的数据。
第三方面、一种虚拟机之间数据交互的方法,包括:宿主机分配内存空间作为待创建虚拟机的共享内存;所述宿主机创建N个虚拟机,N≥2,N为正整数;所述宿主机将所述共享内存分为N*(N-1)个内存片,并为每个虚拟机分配(N-1)个内存片;其中,为第i个虚拟机分配的(N-1)个内存片与除所述第i个虚拟机以外的其他(N-1)个虚拟机一一对应,i≥1,i为正整数。因此,宿主机可以根据创建的虚拟机数目N为每个虚拟机分配(N-1)个内存片,以实现加快虚拟机之间的业务处理,从而满足对虚拟机之间交互性能要求较高的场景要求。
具体的,eshare模块可以为多种逻辑处理单元的集合,提供记录(N-1)个内存片分别对应的内存地址映射、标准读写接口、读写互斥管理、读写接口封装等功能。
在一种可能的实现方式中,所述宿主机为每个虚拟机分配(N-1)个内存片,包括:针对为第i个虚拟机分配的每个内存片,所述宿主机执行:将当前内存片对应的宿主机物理地址转换为所述当前内存片对应的宿主机虚拟地址;将所述当前内存片对应的宿主机虚拟地址转换为所述当前内存片对应的客户机物理地址;将所述当前内存片对应的客户机物理地址转换为所述当前内存片对应的客户机虚拟地址。因此,能够实现将宿主机中的共享内存映射到虚拟机的内存空间。
第四方面、一种虚拟机之间数据交互的装置,包括:确定单元,用于确定所述装置中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度,所述装置与所述第二虚拟机属于同一个宿主机;分析单元,用于根据所述第二虚拟机的标识确定目标内存片的标识,所述目标内存片是指所述宿主机为所述装置分配的用于存储所述装置发往所述第二虚拟机的数据的内存片;处理单元,用于根据所述目标内存片中的写偏移信息确定所述待发送数据的初始拷贝位置,并根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述目标内存片,更新所述写偏移信息;其中,所述写偏移信息用于指示所述目标内存片中已存储数据的写偏移。
在一种可能的实现方式中,所述目标内存片包括管理控制区和业务负载区;所述管理控制区用于存储所述目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息;所述业务负载区用于存储所述装置发往所述第二虚拟机的数据;根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述内存片时,所述处理单元,具体用于:确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,确定在超出预设时长前所述业务负载区的剩余内存空间大小大于所述数据的数据长度时,根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述业务负载区。
在一种可能的实现方式中,所述处理单元,还用于:确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,将所述待发送数据拷贝至所述业务负载区失败。
第五方面、一种虚拟机之间数据交互的装置,包括:检测单元,用于检测所述装置对应的目标内存片集合,每个目标内存片用于存储发往所述装置的数据;处理单元,用于检测到第一目标内存片中的写偏移信息更新时,根据所述写偏移信息和所述第一目标内存片中的读偏移信息读取所述第一目标内存片中的数据,并更新所述读偏移信息;其中,所述写偏移信息用于指示所述第一目标内存片中已存储数据的写偏移,所述读偏移信息用于指示所述第一目标内存片中已读取数据的读偏移。
在一种可能的实现方式中,所述第一目标内存片包括管理控制区和业务负载区;所述管理控制区用于存储所述第一目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息和所述读偏移信息;所述业务负载区用于存储所述第二虚拟机发往所述装置的数据。
第六方面、一种虚拟机之间数据交互的装置,包括:分配单元,用于分配内存空间作为待创建虚拟机的共享内存;创建单元,用于创建N个虚拟机,N≥2,N为正整数;处理单元,用于将所述共享内存分为N*(N-1)个内存片,并为每个虚拟机分配(N-1)个内存片;其中,为第i个虚拟机分配的(N-1)个内存片与除所述第i个虚拟机以外的其他(N-1)个虚拟机一一对应,i≥1,i为正整数。
在一种可能的实现方式中,为每个虚拟机分配(N-1)个内存片时,所述处理单元,具体用于:针对为第i个虚拟机分配的每个内存片,执行:将当前内存片对应的宿主机物理地址转换为所述当前内存片对应的宿主机虚拟地址;将所述当前内存片对应的宿主机虚拟地址转换为所述当前内存片对应的客户机物理地址;将所述当前内存片对应的客户机物理地址转换为所述当前内存片对应的客户机虚拟地址。
第七方面,一种虚拟机之间数据交互的设备,包括:通信接口1001和处理器1002;所述处理器,用于:确定所述装置中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度,所述装置与所述第二虚拟机属于同一个宿主机;根据所述第二虚拟机的标识确定目标内存片的标识,所述目标内存片是指所述宿主机为所述装置分配的用于存储所述装置发往所述第二虚拟机的数据的内存片;根据所述目标内存片中的写偏移信息确定所述待发送数据的初始拷贝位置,并根据所述待发送数据的起始地址和数据长度将所述待发送数据通过所述通信接口拷贝至所述目标内存片,更新所述写偏移信息;其中,所述写偏移信息用于指示所述目标内存片中已存储数据的写偏移。
第八方面,一种虚拟机之间数据交互的设备,包括:通信接口和处理器;所述处理器,用于:检测所述装置对应的目标内存片集合,每个目标内存片用于存储发往所述装置的数据;检测到第一目标内存片中的写偏移信息更新时,根据所述写偏移信息和所述第一目标内存片中的读偏移信息通过所述通信接口读取所述第一目标内存片中的数据,并更新所述读偏移信息;其中,所述写偏移信息用于指示所述第一目标内存片中已存储数据的写偏移,所述读偏移信息用于指示所述第一目标内存片中已读取数据的读偏移。
第九方面,一种虚拟机之间数据交互的设备,例如宿主机,包括:通信接口、处理器、存储器;所述处理器,用于:分配所述存储器中的内存空间作为待创建虚拟机的共享内存;用于创建N个虚拟机,N≥2,N为正整数;将所述共享内存分为N*(N-1)个内存片,并为每个虚拟机分配(N-1)个内存片;其中,为第i个虚拟机分配的(N-1)个内存片与除所述第i个虚拟机以外的其他(N-1)个虚拟机一一对应,i≥1,i为正整数;所述通信接口,用于与所述宿主机中的各个虚拟机进行通信。
附图说明
图1为本发明实施例中基于KVM+qemu+guest os的框架示意图;
图2为本发明实施例中宿主机侧虚拟机之间数据交互的方法概述流程图;
图3为本发明实施例中内存片的结构示意图;
图4为本发明实施例中虚拟机之间数据交互的方法概述流程图之一;
图5为本发明实施例中虚拟机之间数据交互的方法概述流程图之二;
图6为本发明实施例中虚拟机之间的具体交互过程示意图;
图7为本发明实施例中虚拟机之间数据交互的装置结构示意图之一;
图8为本发明实施例中虚拟机之间数据交互的装置结构示意图之二;
图9为本发明实施例中虚拟机之间数据交互的装置结构示意图之三;
图10为本发明实施例中虚拟机之间数据交互的设备结构示意图之一;
图11为本发明实施例中虚拟机之间数据交互的装置结构示意图之二;
图12为本发明实施例中虚拟机之间数据交互的装置结构示意图之三。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。依赖对于本身就在宿主机内构建的虚拟机,如果可以不用走网络协议栈处理,可以节省这部分的性能损失。
Linux内核虚拟化技术目前有开放源代码虚拟机监视器(XEN)和基于内核的虚拟机(Kernel-based Virtual Machine,KVM)两个主流,基于KVM+qemu+guest os大致的框架如图1所示。一般地,在该***最下面一层是硬件,比如各种设备(device),有cpu和mem(内存条)等。在它上面一层是操作***(OS:operate system),其中,KVM为OS内核(kernel)的一个模块,提供虚拟机管理。快速模拟器(qemu)是一个面向完整个人计算机(personalcomputer,PC)***的开源仿真器软件,上层各个隔离的guest os(每个guest os实际上就是一个进程)都可以通过qemu来模拟。本发明实施例的实现主要针对上述KVM+qemu+guestos(Linux***)虚拟机***。
下面结合附图对本发明优选的实施例进行详细说明。
参阅图2所示,本发明实施例提供一种虚拟机之间数据交互的方法,该方法包括:
步骤200:宿主机分配内存空间作为待创建虚拟机的共享内存。
步骤210:宿主机创建N个虚拟机,N≥2,N为正整数。
步骤220:宿主机将共享内存分为N*(N-1)个内存片,并为每个虚拟机分配(N-1)个内存片。
其中,为第i个虚拟机分配的(N-1)个内存片与除第i个虚拟机以外的其他(N-1)个虚拟机一一对应,i≥1,i为正整数。
具体的,宿主机(Host)分配内存空间,作为待创建虚拟机的共享内存。假设Host通过qemu创建了N个虚拟机,则将该共享内存分为N*(N-1)个内存片。其中,每个虚拟机对应(N-1)个内存片,用于分别存储该虚拟机发往其他(N-1)个虚拟机的数据。
每个内存片的结构如图3所述,包括管理控制区和业务负载区。其中,前面一小段为管理控制区,占用较少的内存空间,用于存储内存片的标识、业务负载区的剩余内存空间大小、读偏移信息和写偏移信息。后面一大段为业务负载区,用于存放节点间的交互数据。
可选地,在Host通过qemu创建虚拟机时,由qemu为创建的虚拟机分配共享内存中的(N-1)个内存片,即完成将Host中的共享内存映射到虚拟机的内存空间。
具体的,在为第i个虚拟机分配每个内存片时,Host执行:
将当前内存片对应的宿主机物理地址转换为当前内存片对应的宿主机虚拟地址,将当前内存片对应的宿主机虚拟地址转换为当前内存片对应的客户机物理地址,将当前内存片对应的客户机物理地址转换为当前内存片对应的客户机虚拟地址。
此外,还需确定每个内存片的内存片标识,例如,为第i个虚拟机分配的内存片标识为ij,则该内存片的业务负载区用于存放第i个虚拟机发往第j个虚拟机的数据。内存片标识为ji,该内存片的业务负载区则用于存放第j个虚拟机发往第i个虚拟机的数据,表示为第j个虚拟机指定的内存片。这里确定内存片标识的方法只是举例说明,不做具体限定。
在上述宿主机完成内存片的分配后,下面结合附图介绍虚拟机之间交互数据的具体过程。
参阅图4所示,本发明实施例提供一种虚拟机之间数据交互的方法,在发送侧,该方法包括:
步骤400:第一虚拟机确定第一虚拟机中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度,第一虚拟机与第二虚拟机属于同一个宿主机。
应理解的是,本发明实施例提供的方法优化了属于同一宿主机的虚拟机之间的交互过程,针对不同宿主机中的虚拟机之间的交互仍采用现有技术中的方法。
步骤410:第一虚拟机根据第二虚拟机的标识确定目标内存片的标识,目标内存片是指宿主机为第一虚拟机分配的用于存储第一虚拟机发往第二虚拟机的数据的内存片。
由上述宿主机为虚拟机分配内存片的过程可知,当宿主机中的虚拟机总数为N时,每个虚拟机对应(N-1)个内存片,用于分别存储该虚拟机发往其他(N-1)个虚拟机的数据。因此,当第一虚拟机中的应用确定要向第二虚拟机中的应用发送数据时,可以根据第二虚拟机的标识从当前分配的内存片确定目标内存片,即用于存储发往第二虚拟机的数据的内存片。例如,可以在虚拟机内保存一个虚拟机标识与内存片的对应关系索引表,以确定每个虚拟机对应的目标内存片。
步骤420:第一虚拟机根据目标内存片中的写偏移信息确定待发送数据的初始拷贝位置,并根据待发送数据的起始地址和数据长度将待发送数据拷贝至目标内存片,更新写偏移信息。
其中,写偏移信息用于指示目标内存片中已存储数据的写偏移。
应理解的是,在循环缓存管理***中,写偏移信息用于指示内存片中已存储数据的写偏移,用以在下次写入数据时,确定初始写入位置。因此,第一虚拟机根据写偏移信息可以获知本次写入数据的初始写入位置,即待发送数据的初始拷贝位置,然后根据待发送数据的起始位置和数据长度,将待发送数据拷贝至目标内存片中。由此可知,相比于现有技术中,基于网卡实现网络报文传输,采用本发明实施例提供的方法只需拷贝一次数据,不依赖于现有的网络协议,通过宿主机中的共享内存实现虚拟机之间的交互,加快虚拟机之间的业务处理,从而满足对虚拟机之间交互性能要求较高的场景。
针对上述目标内存片(其他内存片的结构类似),内存片包括管理控制区和业务负载区,管理控制区用于存储目标内存片的标识、业务负载区的剩余空间大小,写偏移信息;业务负载区用于存储第一虚拟机发往第二虚拟机的数据;
可选地,第一虚拟机根据待发送数据的起始地址和数据长度将待发送数据拷贝至内存片时,可能出现以下几种情形,包括:
第一种情形:第一虚拟机确定业务负载区的剩余内存空间大小小于等于数据的数据长度时,确定在超出预设时长前业务负载区的剩余内存空间大小大于数据的数据长度时,根据待发送数据的起始地址和数据长度将待发送数据拷贝至业务负载区。
第二种情形:第一虚拟机确定业务负载区的剩余内存空间大小小于等于数据的数据长度时,第一虚拟机将待发送数据拷贝至业务负载区失败。此时,在间隔预设时长后,可以重试将待发送数据拷贝至业务负载区。
第一虚拟机可以调用发送接口完成上述拷贝待发送数据,当发送接口为阻塞型接口时,对应第一种情形;当发送接口为非阻塞型接口时,对应第二种情形。
应理解的是,在循环缓存管理***中,当写偏移达到业务负载区的尾部时,即业务负载区的剩余空间大小为0,可以根据读偏移覆盖业务负载区中的内容,以实现循环缓存的利用。
参阅图5所示,本发明实施例提供一种虚拟机之间数据交互的方法,在接收侧,该方法包括:
步骤500:第一虚拟机检测第一虚拟机对应的目标内存片集合,每个目标内存片用于存储发往第一虚拟机的数据。
这里的第一虚拟机对应的目标内存片集合是指用于存储其他虚拟机发往第一虚拟机的数据的内存片的集合。例如,当宿主机中包括N个虚拟机时,第一虚拟机对应的目标内存片集合包括(N-1)个内存片。这(N-1)个内存片与除第一虚拟机外的其他(N-1)个虚拟机一一对应。
步骤510:第一虚拟机检测到第一目标内存片中的写偏移信息更新时,根据写偏移信息和第一目标内存片中的读偏移信息读取第一目标内存片中的数据,并更新读偏移信息。
其中,写偏移信息用于指示第一目标内存片中已存储数据的写偏移,读偏移信息用于指示第一目标内存片中已读取数据的读偏移。
具体的,第一虚拟机可以检测到第一目标内存片中的写偏移信息更新时,表明第一目标内存片对应的虚拟机向第一虚拟机发送数据,使该第一目标内存片的写偏移信息更新。
具体的,第一虚拟机根据第一目标内存片中的读偏移信息,获知已读取数据的读偏移,从该读取位置开始读取数据,最多可读取至写偏移信息所指示的已存储数据的写偏移,或者,第一虚拟机配置每次读取数据的预设数据读取长度,当写偏移与读偏移的差值大于等于预设数据读取长度时,读取预设数据读取长度的数据。当写偏移与读偏移的差值小于预设数据读取长度时,可以下次再执行读取。当第一虚拟机读取第一目标内存片中的数据时,需要更新读偏移信息。
下面以图6为例,具体说明虚拟机之间的交互过程,其中,eshare模块用于执行虚拟机之间的交互过程。每个虚拟机可以通过共享内存(eshare)模块实现向Host内的其他宿主机发送数据,和读取其他Host内虚拟机向自身发送的数据。具体的,eshare模块可以为多种逻辑处理单元的集合,提供记录(N-1)个内存片分别对应的内存地址映射、标准读写接口、读写互斥管理、读写接口封装等功能。
首先,Host通过qemu创建VM_0时,为它分配(N-1)个内存片。
针对这(N-1)个内存片将每个内存片对应的宿主机物理地址转换为对应的宿主机虚拟地址,进一步将宿主机虚拟地址转换为客户机物理地址,最后将客户机物理地址转换为客户机虚拟地址。
当VM_0中的app0需要向VM_N中的appN发送数据时,确定待发送数据的起始地址和数据长度。VM_0根据VM_N的标识确定目标内存片的标识,该目标内存片为Host为VM_0分配的用于存储VM_0发往VM_N的数据。
进一步地,VM_0根据该目标内存片中的写偏移信息,确定待发送数据的初始拷贝位置,并根据待发送数据的起始地址和数据长度将待发送数据从该初始拷贝位置开始,将待发送数据拷贝至目标内存片的业务负载区。在数据拷贝完成后,更新写偏移信息。
VM_N检测到用于存储VM_0发往VM_N的数据的内存片中的写偏移信息更新时,根据写偏移信息和该内存片中的读偏移信息读取第一目标内存片中的数据,并更新读偏移信息。
参阅图7所示,本发明实施例提供一种虚拟机之间数据交互的装置,包括:
确定单元70,用于确定所述装置中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度,所述装置与所述第二虚拟机属于同一个宿主机;
分析单元71,用于根据所述第二虚拟机的标识确定目标内存片的标识,所述目标内存片是指所述宿主机为所述装置分配的用于存储所述装置发往所述第二虚拟机的数据的内存片;
处理单元72,用于根据所述目标内存片中的写偏移信息确定所述待发送数据的初始拷贝位置,并根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述目标内存片,更新所述写偏移信息;
其中,所述写偏移信息用于指示所述目标内存片中已存储数据的写偏移。
在一种可能的实现方式中,所述目标内存片包括管理控制区和业务负载区;
所述管理控制区用于存储所述目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息;所述业务负载区用于存储所述装置发往所述第二虚拟机的数据;
根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述内存片时,所述处理单元72,具体用于:
确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,确定在超出预设时长前所述业务负载区的剩余内存空间大小大于所述数据的数据长度时,根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述业务负载区。
在一种可能的实现方式中,所述处理单元72,还用于:
确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,将所述待发送数据拷贝至所述业务负载区失败。
参阅图8所示,本发明实施例提供一种虚拟机之间数据交互的装置,包括:
检测单元80,用于检测所述装置对应的目标内存片集合,每个目标内存片用于存储发往所述装置的数据;
处理单元81,用于检测到第一目标内存片中的写偏移信息更新时,根据所述写偏移信息和所述第一目标内存片中的读偏移信息读取所述第一目标内存片中的数据,并更新所述读偏移信息;
其中,所述写偏移信息用于指示所述第一目标内存片中已存储数据的写偏移,所述读偏移信息用于指示所述第一目标内存片中已读取数据的读偏移。
在一种可能的实现方式中,所述第一目标内存片包括管理控制区和业务负载区;
所述管理控制区用于存储所述第一目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息和所述读偏移信息;
所述业务负载区用于存储所述第二虚拟机发往所述装置的数据。
参阅图9所示,本发明实施例提供一种虚拟机之间数据交互的装置,包括:
分配单元90,用于分配内存空间作为待创建虚拟机的共享内存;
创建单元91,用于创建N个虚拟机,N≥2,N为正整数;
处理单元92,用于将所述共享内存分为N*(N-1)个内存片,并为每个虚拟机分配(N-1)个内存片;
其中,为第i个虚拟机分配的(N-1)个内存片与除所述第i个虚拟机以外的其他(N-1)个虚拟机一一对应,i≥1,i为正整数。
在一种可能的实现方式中,为每个虚拟机分配(N-1)个内存片时,所述处理单元92,具体用于:
针对为第i个虚拟机分配的每个内存片,执行:
将当前内存片对应的宿主机物理地址转换为所述当前内存片对应的宿主机虚拟地址;
将所述当前内存片对应的宿主机虚拟地址转换为所述当前内存片对应的客户机物理地址;
将所述当前内存片对应的客户机物理地址转换为所述当前内存片对应的客户机虚拟地址。
参阅图10所示,本发明实施例提供一种虚拟机之间数据交互的设备,包括:通信接口1001和处理器1002;
所述处理器,用于:
确定所述装置中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度,所述装置与所述第二虚拟机属于同一个宿主机;根据所述第二虚拟机的标识确定目标内存片的标识,所述目标内存片是指所述宿主机为所述装置分配的用于存储所述装置发往所述第二虚拟机的数据的内存片;根据所述目标内存片中的写偏移信息确定所述待发送数据的初始拷贝位置,并根据所述待发送数据的起始地址和数据长度将所述待发送数据通过所述通信接口拷贝至所述目标内存片,更新所述写偏移信息;其中,所述写偏移信息用于指示所述目标内存片中已存储数据的写偏移。
参阅图11所示,本发明实施例提供一种虚拟机之间数据交互的设备,包括:通信接口1101和处理器1102;
所述处理器1101,用于:
检测所述装置对应的目标内存片集合,每个目标内存片用于存储发往所述装置的数据;检测到第一目标内存片中的写偏移信息更新时,根据所述写偏移信息和所述第一目标内存片中的读偏移信息通过所述通信接口读取所述第一目标内存片中的数据,并更新所述读偏移信息;其中,所述写偏移信息用于指示所述第一目标内存片中已存储数据的写偏移,所述读偏移信息用于指示所述第一目标内存片中已读取数据的读偏移。
参阅图12所示,本发明实施例提供一种虚拟机之间数据交互的设备,例如宿主机,包括:通信接口1201、处理器1202、存储器1203;
所述处理器1202,用于:
分配所述存储器1203中的内存空间作为待创建虚拟机的共享内存;用于创建N个虚拟机,N≥2,N为正整数;将所述共享内存分为N*(N-1)个内存片,并为每个虚拟机分配(N-1)个内存片;其中,为第i个虚拟机分配的(N-1)个内存片与除所述第i个虚拟机以外的其他(N-1)个虚拟机一一对应,i≥1,i为正整数;
所述通信接口1201,用于与所述宿主机中的各个虚拟机进行通信。
综上所述,本发明实施例提供一种虚拟机之间数据交互的方法及装置,以解决虚拟机之间进行数据传输可能出现的处理瓶颈问题,该方法包括:第一虚拟机确定第一虚拟机中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度;第一虚拟机根据第二虚拟机的标识确定目标内存片的标识;第一虚拟机根据目标内存片中的写偏移信息确定待发送数据的初始拷贝位置,并根据待发送数据的起始地址和数据长度将待发送数据拷贝至目标内存片,更新写偏移信息。因此,相比于现有技术中,基于网卡实现网络报文传输,采用本发明实施例提供的方法只需拷贝一次数据,不依赖于现有的网络协议,通过宿主机中的共享内存实现虚拟机之间的交互,加快虚拟机之间的业务处理,从而满足对虚拟机之间交互性能要求较高的场景要求。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.一种虚拟机之间数据交互的方法,其特征在于,包括:
第一虚拟机确定所述第一虚拟机中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度,所述第一虚拟机与所述第二虚拟机属于同一个宿主机;
所述第一虚拟机根据所述第二虚拟机的标识确定目标内存片的标识,所述目标内存片是指所述宿主机为所述第一虚拟机分配的用于存储所述第一虚拟机发往所述第二虚拟机的数据的内存片;
所述第一虚拟机根据所述目标内存片中的写偏移信息确定所述待发送数据的初始拷贝位置,并根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述目标内存片,更新所述写偏移信息;
其中,所述写偏移信息用于指示所述目标内存片中已存储数据的写偏移;
所述目标内存片包括管理控制区和业务负载区;所述管理控制区用于存储所述目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息;所述业务负载区用于存储所述第一虚拟机发往所述第二虚拟机的数据。
2.如权利要求1所述的方法,其特征在于,所述第一虚拟机根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述内存片,包括:
所述第一虚拟机确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,确定在超出预设时长前所述业务负载区的剩余内存空间大小大于所述数据的数据长度时,根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述业务负载区。
3.如权利要求1所述的方法,其特征在于,还包括:
所述第一虚拟机确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,所述第一虚拟机将所述待发送数据拷贝至所述业务负载区失败。
4.一种虚拟机之间数据交互的方法,其特征在于,包括:
第一虚拟机检测所述第一虚拟机对应的目标内存片集合,每个目标内存片用于存储发往所述第一虚拟机的数据;
所述第一虚拟机检测到第一目标内存片中的写偏移信息更新时,根据所述写偏移信息和所述第一目标内存片中的读偏移信息读取所述第一目标内存片中的数据,并更新所述读偏移信息;
其中,所述写偏移信息用于指示所述第一目标内存片中已存储数据的写偏移,所述读偏移信息用于指示所述第一目标内存片中已读取数据的读偏移;
所述第一目标内存片包括管理控制区和业务负载区;所述管理控制区用于存储所述第一目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息和所述读偏移信息;所述业务负载区用于存储第二虚拟机发往所述第一虚拟机的数据。
5.一种虚拟机之间数据交互的装置,其特征在于,包括:
确定单元,用于确定所述装置中的应用需要向第二虚拟机中的应用发送数据时,确定待发送数据的起始地址和数据长度,所述装置与所述第二虚拟机属于同一个宿主机;
分析单元,用于根据所述第二虚拟机的标识确定目标内存片的标识,所述目标内存片是指所述宿主机为所述装置分配的用于存储所述装置发往所述第二虚拟机的数据的内存片;
处理单元,用于根据所述目标内存片中的写偏移信息确定所述待发送数据的初始拷贝位置,并根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述目标内存片,更新所述写偏移信息;
其中,所述写偏移信息用于指示所述目标内存片中已存储数据的写偏移;所述目标内存片包括管理控制区和业务负载区;所述管理控制区用于存储所述目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息;所述业务负载区用于存储所述装置发往所述第二虚拟机的数据。
6.如权利要求5所述的装置,其特征在于,根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述内存片时,所述处理单元,具体用于:
确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,确定在超出预设时长前所述业务负载区的剩余内存空间大小大于所述数据的数据长度时,根据所述待发送数据的起始地址和数据长度将所述待发送数据拷贝至所述业务负载区。
7.如权利要求5所述的装置,其特征在于,所述处理单元,还用于:
确定所述业务负载区的剩余内存空间大小小于等于所述数据的数据长度时,将所述待发送数据拷贝至所述业务负载区失败。
8.一种虚拟机之间数据交互的装置,其特征在于,包括:
检测单元,用于检测所述装置对应的目标内存片集合,每个目标内存片用于存储发往所述装置的数据;
处理单元,用于检测到第一目标内存片中的写偏移信息更新时,根据所述写偏移信息和所述第一目标内存片中的读偏移信息读取所述第一目标内存片中的数据,并更新所述读偏移信息;
其中,所述写偏移信息用于指示所述第一目标内存片中已存储数据的写偏移,所述读偏移信息用于指示所述第一目标内存片中已读取数据的读偏移;
所述第一目标内存片包括管理控制区和业务负载区;所述管理控制区用于存储所述第一目标内存片的标识、所述业务负载区的剩余空间大小,所述写偏移信息和所述读偏移信息;所述业务负载区用于存储第二虚拟机发往所述装置的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610983811.7A CN106598696B (zh) | 2016-11-08 | 2016-11-08 | 一种虚拟机之间数据交互的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610983811.7A CN106598696B (zh) | 2016-11-08 | 2016-11-08 | 一种虚拟机之间数据交互的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106598696A CN106598696A (zh) | 2017-04-26 |
CN106598696B true CN106598696B (zh) | 2020-07-28 |
Family
ID=58590704
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610983811.7A Active CN106598696B (zh) | 2016-11-08 | 2016-11-08 | 一种虚拟机之间数据交互的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106598696B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108173810B (zh) * | 2017-12-07 | 2020-10-13 | 新华三信息安全技术有限公司 | 一种传输网络数据的方法及装置 |
CN108540448B (zh) * | 2018-03-05 | 2021-08-13 | 上海迪维欧电子设备有限公司 | 一种流媒体数据发送方法 |
CN109213611B (zh) * | 2018-08-01 | 2021-07-02 | 天津字节跳动科技有限公司 | 跨进程通讯方法、装置、终端及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101819564A (zh) * | 2009-02-26 | 2010-09-01 | 国际商业机器公司 | 协助在虚拟机之间进行通信的方法和装置 |
CN103176854A (zh) * | 2011-12-26 | 2013-06-26 | 腾讯科技(深圳)有限公司 | 一种进程间通信方法、装置及*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662777A (zh) * | 2012-04-28 | 2012-09-12 | 浪潮电子信息产业股份有限公司 | 一种基于kvm虚拟机的客户机之间高速通信的方法 |
CN106020997B (zh) * | 2016-05-13 | 2019-07-16 | 北京红山世纪科技有限公司 | 一种用于虚拟机间数据传输的方法和*** |
-
2016
- 2016-11-08 CN CN201610983811.7A patent/CN106598696B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101819564A (zh) * | 2009-02-26 | 2010-09-01 | 国际商业机器公司 | 协助在虚拟机之间进行通信的方法和装置 |
CN103176854A (zh) * | 2011-12-26 | 2013-06-26 | 腾讯科技(深圳)有限公司 | 一种进程间通信方法、装置及*** |
Also Published As
Publication number | Publication date |
---|---|
CN106598696A (zh) | 2017-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200278880A1 (en) | Method, apparatus, and system for accessing storage device | |
CN107077377B (zh) | 一种设备虚拟化方法、装置、***及电子设备、计算机程序产品 | |
JP6185045B2 (ja) | インフィニバンドネットワークにおけるバーチャルマシーンのライブマイグレーションをサポートするためのシステムおよび方法 | |
US9135044B2 (en) | Virtual function boot in multi-root I/O virtualization environments to enable multiple servers to share virtual functions of a storage adapter through a MR-IOV switch | |
EP2313832B1 (en) | Direct memory access filter for virtualized operating systems | |
US9229751B2 (en) | Apparatus and method for managing virtual memory | |
US11599379B1 (en) | Methods and systems for tracking a virtual memory of a virtual machine | |
US9697024B2 (en) | Interrupt management method, and computer implementing the interrupt management method | |
US20130254368A1 (en) | System and method for supporting live migration of virtual machines in an infiniband network | |
US8601496B2 (en) | Method and system for protocol offload in paravirtualized systems | |
CN107491354B (zh) | 一种基于共享内存的虚拟机间通信方法及装置 | |
KR102321913B1 (ko) | 불휘발성 메모리 장치, 및 그것을 포함하는 메모리 시스템 | |
US20210224210A1 (en) | Information processing method, physical machine, and pcie device | |
US11188347B2 (en) | Virtual function driver loading method and server using global and local identifiers corresponding to locations of the virtual functions | |
KR20140049064A (ko) | 분리된 가상 공간을 제공하기 위한 방법 및 장치 | |
US20150242231A1 (en) | Data swap in virtual machine environment | |
EP3350700B1 (en) | Multi root i/o virtualization system | |
CN106598696B (zh) | 一种虚拟机之间数据交互的方法及装置 | |
US11675615B2 (en) | Zero copy message reception for applications | |
CN109857517B (zh) | 一种虚拟化***及其数据交换方法 | |
CN113032088B (zh) | 脏页记录方法、装置、电子设备及计算机可读介质 | |
US11635970B2 (en) | Integrated network boot operating system installation leveraging hyperconverged storage | |
JP6653786B2 (ja) | I/o制御方法およびi/o制御システム | |
US11593168B2 (en) | Zero copy message reception for devices via page tables used to access receiving buffers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |