虚拟机的数据共享方法及装置与流程

文档序号:11064824阅读:365来源:国知局
虚拟机的数据共享方法及装置与制造工艺

本发明涉及通信技术领域,尤其涉及一种虚拟机的数据共享方法及装置。



背景技术:

随着通信技术的快速发展,NFV(Network Function Virtualizat-ion,网络功能虚拟化)技术也日益成熟,网络功能虚拟化需要提供高速的数据转发功能,其中,包括服务器物理网卡间的数据转发以及虚拟机之间的虚拟网卡的数据转发。

在服务器中虚拟网络的转发功能一般通过虚拟网桥,或OVS(Open Virtual Switch,虚拟交换机)来实现,但是无论是虚拟网桥还是OVS,都是运行在内核态,而虚拟机都是位于用户态,而虚拟机之间进行通讯时,需要经由虚拟网桥或是OVS进行数据的转发,而数据在用户态和内核态之间转发时,需要经过多次的拷贝,因此,这种情况下将数据从一个虚拟机发送到另一个虚拟机,需要经过多次拷贝才能进行数据的转发,导致虚拟机之间的数据共享效率低。



技术实现要素:

本发明的主要目的在于提出一种虚拟机的数据共享方法及装置,旨在解决虚拟机之间的数据共享效率低的技术问题。

为实现上述目的,本发明提供的一种虚拟机的数据共享方法,所述虚拟机的数据共享方法包括以下步骤:

第一虚拟机将第一待共享数据存储到共享内存中;

所述第一虚拟机获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址;

所述第一虚拟机将所述存储地址信息以及所述目的物理地址封装为第一待共享报文;

所述第一虚拟机将所述第一待共享报文存入所述第一虚拟机对应的发送 列队中;

其中,所述第一虚拟机将所述第一待共享报文存储至所述目的物理地址对应的接收列队中,以供所述目的物理地址对应的第二虚拟机根据所述第一待共享报文中的存储地址信息获取所述第一待共享数据,所述第一虚拟机以及所述第二虚拟机运行于同一个宿主机内。

优选地,所述第一虚拟机获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址的步骤之后,所述虚拟机的数据共享方法还包括:

在所述目的物理地址获取失败时,所述第一虚拟机将所述存储地址信息封装为第一待共享报文;

所述第一虚拟机将所述第一待共享报文存入所述第一虚拟机对应的发送列队中。

优选地,所述第一虚拟机将所述第一待共享报文存入所述第一虚拟机对应的发送列队中的步骤之后,执行以下步骤:

所述第一虚拟机实时或定时获取其接收队列中存储的第二待共享报文;

在获取到所述第二待共享报文时,所述第一虚拟机提取所述第二待共享报文中的存储地址信息;

所述第一虚拟机根据所述存储地址信息获取所述共享内存中所述存储地址信息对应的第二待共享数据。

优选地,所述第一待共享数据和/或所述第二待共享数据由多个数据包生成。

此外,为实现上述目的,本发明还提出一种虚拟机的数据共享装置,所述虚拟机的数据共享装置包括:

存储模块,用于将第一待共享数据存储到共享内存中;

第一获取模块,用于获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址;

第一封装模块,用于将所述存储地址信息以及所述目的物理地址封装为第一待共享报文;

存入模块,用于将所述第一待共享报文存入所述第一虚拟机对应的发送列队中;

其中,所述存入模块将所述第一待共享报文存储至所述目的物理地址对应的接收列队中,以供所述目的物理地址对应的第二虚拟机根据所述第一待共享报文中的存储地址信息获取所述第一待共享数据,所述数据共享装置以及所述第二虚拟机运行于同一个宿主机内。

优选地,所述虚拟机的数据共享装置包括:

第二封装模块,用于在所述目的物理地址获取失败时,将所述存储地址信息封装为第一待共享报文;

所述存入模块,还用于将所述第一待共享报文存入所述第一虚拟机对应的发送列队中。

优选地,所述虚拟机的数据共享装置还包括:

第二获取模块,用于实时或定时获取其接收队列中存储的第二待共享报文;

提取模块,用于在获取到所述第二待共享报文时,提取所述第二待共享报文中的存储地址信息;

所述第二获取模块,还用于根据所述存储地址信息获取所述共享内存中所述存储地址信息对应的第二待共享数据。

优选地,所述第一待共享数据和/或所述第二待共享数据由多个数据包生成。

本发明提出的虚拟机的数据共享方法及装置,第一虚拟机先将第一待共享数据存储到共享内存中,然后获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址,并将所述存储地址信息以及所述目的物理地址封装为第一待共享报文,最后将所述第一待共享报文存入所述第一虚拟机对应的发送列队中,并将所述第一待共享报文存储至所述目的物理地址对应的接收列队中,实现了所述目的物理地址对应的第二虚拟机根据所述第一待共享报文中的存储地址信息获取所述第一待共享数据,而不是虚拟机之间进行数据共享时,要经由虚拟网桥或是虚拟交换机进行数据的拷贝转发,本方案中在内存共享区存储数据,并将存储数据的存储地址信息通知给其它虚拟机,以供其它虚拟机在共享内存中获取所述数据,从而提高了虚拟机之间的数据共享的效率。

附图说明

图1为本发明虚拟机的数据共享方法第一实施例的流程示意图;

图2为本发明虚拟机之间共享内存的示意图;

图3为本发明报文格式示意图;

图4为本发明虚拟机的数据共享方法第二实施例的流程示意图;

图5为本发明虚拟机的数据共享方法第三实施例的流程示意图;

图6为本发明虚拟机的数据共享装置第一实施例的功能模块示意图;

图7为本发明虚拟机的数据共享装置第二实施例的功能模块示意图;

图8为本发明虚拟机的数据共享装置第三实施例的功能模块示意图。

本发明目的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明提供一种虚拟机的数据共享方法。

参照图1,图1为本发明虚拟机的数据共享方法第一实施例的流程示意图。

本实施例提出一种虚拟机的数据共享方法,所述虚拟机的数据共享方法包括:

步骤S10,第一虚拟机将第一待共享数据存储到共享内存中;

在本实施例中,应用场景是同一个宿主机中的各个虚拟机进行数据共享,而在同一个宿主机中的各个虚拟机进行数据共享时,为了减小数据拷贝转发等操作,优选通过内存共享技术实现虚拟机之间的控制状态传递和网络数据的交互,即在宿主机中设置共享内存,并将待共享数据存储到共享内存中,所述共享内存用于完成虚拟机之间的数据交互和控制状态信息交互,参照图2,所述共享内存包含一个公共的数据共享区,所述数据共享区用于存放虚拟机间之间的收发报文,所述共享内存还包括一个控制状态共享存储区,控制状态共享存储区主要用于虚拟机与宿主机中的数据转发进程I/O进程之间交 换报文描述符及状态信息,而从虚拟机的角度来看,它细分为虚拟机到宿主机数据转发I/O(Input/Output,输入输出)进程的发送控制状态描述区和从宿主机I/O到虚拟机的接收控制状态描述区。进一步地,所述数据转发进程应该包括一个或多个数据I/O线程,一般情况下,由宿主机支持的网络平面数确定,一个平面对应一个I/O线程,例如:一个宿主机的所有虚拟机如果只有控制面和数据面两个网络平面,就可以只启动两个I/O线程,一个线程处理数据面的数据收发,一个线程用于处理控制面的数据转发。

步骤S20,所述第一虚拟机获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址;

步骤S30,所述第一虚拟机将所述存储地址信息以及所述目的物理地址封装为第一待共享报文;

在本实施例中,所述第一虚拟机在共享内存中存储所述第一待共享数据后,先获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址,然后,将获取的所述存储地址信息以及所述目的物理地址封装为第一待共享报文,参照图3,待共享报文包括:CSD(Control-Status Discriptors,控制状态)描述符,BD(buffer Discriptors,缓冲区)描述符,CSD描述符包括size报文大小、header头指针,tail尾指针、Flags标志位,BD包括Flags BD标签,len长度,index索引、buf_ptr报文物理地址等等,其中,size定义了每个报文的BD数,header,tail用于收发数据是标识有数据的BD的首尾索引号,而每个数据包会占用一个BD,而BD主要用于描述存放收发数据的缓冲区地址及收发数据的长度。Flags定义了CSD的一些功能标志,用于存放数据报文的一些特征标志,index用于标识BD的索引。BD中最重要的部分为buf_ptr和len,buf_ptr用于存放收发数据的缓冲区的物理地址,len为该缓冲区的数据净荷长度。

步骤S40,所述第一虚拟机将所述第一待共享报文存入所述第一虚拟机对应的发送列队中;

其中,所述第一虚拟机将所述第一待共享报文存储至所述目的物理地址对应的接收列队中,以供所述目的物理地址对应的第二虚拟机根据所述第一待共享报文中的存储地址信息获取所述第一待共享数据,所述第一虚拟机以及所述第二虚拟机运行于同一个宿主机内。

在本实施例中,所述第一虚拟机调用数据转发进程,以将所述待共享报文存入所述第一虚拟机对应的发送列队中,并且通过所述数据转发进程将所述第一待共享报文存储至所述目的物理地址对应的接收列队中,可以理解的是,所述数据转发进程运行于用户态,即通过调用所述数据转发进程进行虚拟机之间的数据共享,可避免了数据的拷贝转发,从而提高了数据共享的效率,为更好的理解本实施例中,举例具体应用场景如下:

首先,在第一虚拟机中,第一虚拟机的虚拟网卡驱动首先从共享内存区申请控制状态描述符CSD,由CSD获得BD描述符,然后再申请pkt_buf地址,并将pkt_buf地址转换成所述第一虚拟机的虚拟地址,并准备要发送的第一待共享数据,也就是将所述第一待共享数据拷贝到pkt_buf地址中,并填写len(该缓冲区的数据净荷长度),然后将pkt_buf的物理地址填写到BD描述符中的buf_ptr字段,封装为第一待共享报文,完成发送数据的准备工作。对于第二虚拟机,在所述接收列队中存有第一待共享报文时,通过调用所述数据转发进程,以调用网卡驱动程序处理接收队列的BD,首先获取BD的buf_ptr指向的主机物理地址,并转换成第二虚拟机的虚拟机地址,最后,获取所述第一待共享报文以完成了虚拟机之间的通讯。

在宿主机的所述数据转发进程中,数据转发进程守护虚拟机的虚拟网卡的发送队列,即所述第一虚拟机对应的第一待共享报文,数据转发进程依次从各队列的tail标签开始处理报文,获取BD中的buf_prt地址,并转换成数据转发进程的虚拟地址,并获取所述第一待共享报文的目的物理地址,此时,根据目的物理地址查找预存的转发表,从而提取第二虚拟机对应的的接收队列,并将发送队列的buf_prt、flags、len等参数直接复制到接收队列的buf_ptr、flags、len字段,最后将添加了参数的所述接收队列发送给所述目的物理地址对应的第二虚拟机。即I/O进程从虚拟机的发送队列收到发送的第一待共享报文后,根据目的物理地址查找转发表,找到所述第一待共享报文的接收队列,并将所述第一待共享报文发送到所述接收队列,以供所述目的物理地址对应的第二虚拟机根据第一待共享报文中的存储地址信息获取第一待共享数据。

本实施例提出的虚拟机的数据共享方法,第一虚拟机先将第一待共享数据存储到共享内存中,然后获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址,并将所述存储地址信息以及所述目的物理地址封装为 第一待共享报文,最后将所述第一待共享报文存入所述第一虚拟机对应的发送列队中,并将所述第一待共享报文存储至所述目的物理地址对应的接收列队中,实现了所述目的物理地址对应的第二虚拟机根据所述第一待共享报文中的存储地址信息获取所述第一待共享数据,而不是虚拟机之间进行数据共享时,要经由虚拟网桥或是虚拟交换机进行数据的拷贝转发,本方案中在内存共享区存储数据,并将存储数据的存储地址信息通知给其它虚拟机,以供其它虚拟机在共享内存中获取所述数据,从而提高了虚拟机之间的数据共享的效率。

进一步地,为了提高虚拟机数据共享的灵活性,基于第一实施例提出本发明虚拟机的数据共享方法的第二实施例,在本实施例中,参照图4,所述步骤S20之后,所述虚拟机的数据共享方法还包括:

步骤S50,在所述目的物理地址获取失败时,所述第一虚拟机将所述存储地址信息封装为第一待共享报文;

步骤S40,所述第一虚拟机将所述第一待共享报文存入所述第一虚拟机对应的发送列队中。

在本实施例中,所述第一虚拟机有可能会发送广播第一待共享报文,或当在第一待共享报文在转发表中无法找到队列,此时,对所述第一待共享报文进行特殊处理,即此时需要向每个虚拟机发送一份第一待共享报文。那么,所述虚拟机需要为其它各个虚拟机的接收队列申请pkt_buf,并复制报文净荷到所有的pkt_buf,复制len及flags到BD描述符相应字段,同时将pkt_buf转换成主机物理地址并填写到buf_ptr字段。也就是说第一虚拟机在存储数据时,没有将待共享的虚拟机的目的物理地址添加到所述第一待共享报文中,此时,直接将所述存储地址信息封装为第一待共享报文,并调用数据转发进程,以将所述第一待共享报文存入所述第一虚拟机对应的发送列队中,即所述数据转发进程无法从所述第一待共享报文中获取目的物理地址,那么所述数据转发进程将提取的所述存储地址信息发送给所述第一虚拟机对应的宿主机内的其它各个虚拟机,即所述数据转发进程将所述第一待共享报文存储至其它各个虚拟机对应的接收列队中,以供其它各个虚拟机根据所述第一待共享报文中的存储地址信息获取第一待共享数据,以完成第一虚拟机与其它各 个虚拟机的数据共享。

进一步地,为了提高虚拟机数据共享的灵活性,基于第一实施例提出本发明虚拟机的数据共享方法的第三实施例,在本实施例中,参照图5,所述步骤S40之后,所述虚拟机的数据共享方法包括:

步骤S60,所述第一虚拟机实时或定时获取其接收队列中存储的第二待共享报文;

步骤S70,在获取到所述第二待共享报文时,所述第一虚拟机提取所述第二待共享报文中的存储地址信息;

步骤S80,所述第一虚拟机根据所述存储地址信息获取所述共享内存中所述存储地址信息对应的第二待共享数据。

在本实施例中,所述第一虚拟机获取所述第一虚拟机中的接收队列中存储的第二待共享报文的方式包括:1)定时获取,即用户事先在所述宿主机中预设所述第一虚拟机获取待共享报文的方式为定时获取,如每隔10分钟检测接收列队中是否有待共享报文。2)实时获取,即用户事先在所述宿主机中预设所述第一虚拟机获取待共享报文的方式为实时获取,那么,只要在所述第一虚拟机的接收列队中存有待共享报文,所述第一虚拟机即可到检测并获取。

在获取到所述第二待共享报文时,所述第一虚拟机提取所述第二待共享报文中的存储地址信息,根据所述存储地址信息即可获取所述共享内存中所述存储地址信息对应的第二待共享数据,以完成虚拟机之间的数据共享。

进一步地,为了提高虚拟机数据共享的效率,所述第一待共享数据和/或所述第二待共享数据由多个数据包生成,即第一虚拟机在内存共享中存储待共享数据时,存储的数据是由多个数据包生成的,那么,数据转发进程在检测到所述第一和/或第二待共享报文时,即可获取各个数据包对应的各个参数,实现了一次性调用多个数据包,减小了每个数据包交互的平均时间,从而提高了虚拟机之间数据共享的效率。进一步地,还可以采用较大的包长来收发数据,例如一般的网络的MTU(Maximum Transmission Unit,最大传输单元长度)是1500字节,在实际应用中可以采用更大的MTU来减少每包的成本,值得注意的是,它要求待共享报文收发的两端必须采用相同的MTU,如果两 端的MTU不匹配,可能导致报文碎片从而无法正常通讯。

进一步地,根据报文的源物理地址生成或更新转发表,即生成或更新目的物理地址与虚拟机接收队列的对应关系表,也就是说I/O进程为每个I/O线程维护一个转发表,转发表维护目的物理地址与虚拟机接收队列的对应关系。

本发明进一步提供一种虚拟机的数据共享装置。

参照图6,图6为本发明虚拟机的通讯装置第一实施例的功能模块示意图。

需要强调的是,对本领域的技术人员来说,图6所示功能模块图仅仅是一个较佳实施例的示例图,本领域的技术人员围绕图6所示的虚拟机的数据共享装置的功能模块,可轻易进行新的功能模块的补充;各功能模块的名称是自定义名称,仅用于辅助理解该虚拟机的数据共享装置的各个程序功能块,不用于限定本发明的技术方案,本发明技术方案的核心是,各自定义名称的功能模块所要达成的功能。

本实施例提出一种虚拟机的数据共享装置,所述虚拟机的数据共享装置包括:

存储模块10,用于将第一待共享数据存储到共享内存中;

在本实施例中,应用场景是同一个宿主机中的各个虚拟机进行数据共享,而在同一个宿主机中的各个虚拟机进行数据共享时,为了减小数据拷贝转发等操作,优选通过内存共享技术实现虚拟机之间的控制状态传递和网络数据的交互,即在宿主机中设置共享内存,所述存储模块10将待共享数据存储到共享内存中,所述共享内存用于完成虚拟机之间的数据交互和控制状态信息交互,参照图2,所述共享内存包含一个公共的数据共享区,所述数据共享区用于存放虚拟机间之间的收发报文,所述共享内存还包括一个控制状态共享存储区,控制状态共享存储区主要用于虚拟机与宿主机中的数据转发进程I/O进程之间交换报文描述符及状态信息,而从虚拟机的角度来看,它细分为虚拟机到宿主机数据转发I/O(Input/Output,输入输出)进程的发送控制状态描述区和从宿主机I/O到虚拟机的接收控制状态描述区。进一步地,所述数据转发进程应该包括一个或多个数据I/O线程,一般情况下,由宿主机支持的网络平面数确定,一个平面对应一个I/O线程,例如:一个宿主机的所有虚拟机如果只有控制面和数据面两个网络平面,就可以只启动两个I/O线程,一个线程 处理数据面的数据收发,一个线程用于处理控制面的数据转发。

第一获取模块20,用于获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址;

第一封装模块30,用于将所述存储地址信息以及所述目的物理地址封装为第一待共享报文;

在本实施例中,所述存储模块10在共享内存中存储所述第一待共享数据后,所述第一获取模块20先获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址,然后,所述第一封装模块30将获取的所述存储地址信息以及所述目的物理地址封装为第一待共享报文,参照图3,待共享报文包括:CSD(Control-Status Discriptors,控制状态)描述符,BD(buffer Discriptors,缓冲区)描述符,CSD描述符包括size报文大小、header头指针,tail尾指针、Flags标志位,BD包括Flags BD标签,len长度,index索引、buf_ptr报文物理地址等等,其中,size定义了每个报文的BD数,header,tail用于收发数据是标识有数据的BD的首尾索引号,而每个数据包会占用一个BD,而BD主要用于描述存放收发数据的缓冲区地址及收发数据的长度。Flags定义了CSD的一些功能标志,用于存放数据报文的一些特征标志,index用于标识BD的索引。BD中最重要的部分为buf_ptr和len,buf_ptr用于存放收发数据的缓冲区的物理地址,len为该缓冲区的数据净荷长度。

存入模块40,用于将所述第一待共享报文存入所述第一虚拟机对应的发送列队中;

其中,所述存入模块将所述第一待共享报文存储至所述目的物理地址对应的接收列队中,以供所述目的物理地址对应的第二虚拟机根据所述第一待共享报文中的存储地址信息获取所述第一待共享数据,所述数据共享装置以及所述第二虚拟机运行于同一个宿主机内。

在本实施例中,所述第一虚拟机调用数据转发进程,以将所述待共享报文存入所述第一虚拟机对应的发送列队中,并且通过所述数据转发进程将所述第一待共享报文存储至所述目的物理地址对应的接收列队中,可以理解的是,所述数据转发进程运行于用户态,即通过调用所述数据转发进程进行虚拟机之间的数据共享,可避免了数据的拷贝转发,从而提高了数据共享的效率,为更好的理解本实施例中,举例具体应用场景如下:

首先,所述第一获取模块20从共享内存区申请控制状态描述符CSD,由CSD获得BD描述符,然后再申请pkt_buf地址,并将pkt_buf地址转换成所述第一虚拟机的虚拟地址,并准备要发送的第一待共享数据,也就是将所述第一待共享数据拷贝到pkt_buf地址中,并填写len(该缓冲区的数据净荷长度),然后将pkt_buf的物理地址填写到BD描述符中的buf_ptr字段,第一封装模块30封装为第一待共享报文,完成发送数据的准备工作。对于第二虚拟机,在所述接收列队中存有第一待共享报文时,通过调用所述数据转发进程,以调用网卡驱动程序处理接收队列的BD,首先获取BD的buf_ptr指向的主机物理地址,并转换成第二虚拟机的虚拟机地址,最后,获取所述第一待共享报文以完成了虚拟机之间的通讯。

在宿主机的所述数据转发进程中,数据转发进程守护虚拟机的虚拟网卡的发送队列,即所述第一虚拟机对应的第一待共享报文,数据转发进程依次从各队列的tail标签开始处理报文,获取BD中的buf_prt地址,并转换成数据转发进程的虚拟地址,并获取所述第一待共享报文的目的物理地址,此时,根据目的物理地址查找预存的转发表,从而提取第二虚拟机对应的的接收队列,并将发送队列的buf_prt、flags、len等参数直接复制到接收队列的buf_ptr、flags、len字段,最后将添加了参数的所述接收队列发送给所述目的物理地址对应的第二虚拟机。即I/O进程从虚拟机的发送队列收到发送的第一待共享报文后,根据目的物理地址查找转发表,找到所述第一待共享报文的接收队列,并将所述第一待共享报文发送到所述接收队列,以供所述目的物理地址对应的第二虚拟机根据第一待共享报文中的存储地址信息获取第一待共享数据。

本实施例提出的虚拟机的数据共享装置,第一虚拟机先将第一待共享数据存储到共享内存中,然后获取所述第一待共享数据的存储地址信息以及待共享的目的物理地址,并将所述存储地址信息以及所述目的物理地址封装为第一待共享报文,最后将所述第一待共享报文存入所述第一虚拟机对应的发送列队中,并将所述第一待共享报文存储至所述目的物理地址对应的接收列队中,实现了所述目的物理地址对应的第二虚拟机根据所述第一待共享报文中的存储地址信息获取所述第一待共享数据,而不是虚拟机之间进行数据共享时,要经由虚拟网桥或是虚拟交换机进行数据的拷贝转发,本方案中在内存共享区存储数据,并将存储数据的存储地址信息通知给其它虚拟机,以供 其它虚拟机在共享内存中获取所述数据,从而提高了虚拟机之间的数据共享的效率。

进一步地,为了提高虚拟机数据共享的灵活性,基于第一实施例提出本发明虚拟机的数据共享装置的第二实施例,在本实施例中,参照图7,所述虚拟机的数据共享装置包括:

第二封装模块50,用于在所述目的物理地址获取失败时,将所述存储地址信息封装为第一待共享报文;

所述存入模块40,还用于将所述第一待共享报文存入所述第一虚拟机对应的发送列队中。

在本实施例中,所述数据共享装置有可能会发送广播第一待共享报文,或当在第一待共享报文在转发表中无法找到队列,此时,对所述第一待共享报文进行特殊处理,即此时需要向每个虚拟机发送一份第一待共享报文。那么,所述第二封装模块50需要为其它各个虚拟机的接收队列申请pkt_buf,并复制报文净荷到所有的pkt_buf,复制len及flags到BD描述符相应字段,同时将pkt_buf转换成主机物理地址并填写到buf_ptr字段。也就是说第一虚拟机在存储数据时,没有将待共享的虚拟机的目的物理地址添加到所述第一待共享报文中,此时,所述第二封装模块50直接将所述存储地址信息封装为第一待共享报文,所述存入模块40调用数据转发进程,以将所述第一待共享报文存入所述第一虚拟机对应的发送列队中,即所述数据转发进程无法从所述第一待共享报文中获取目的物理地址,那么所述数据转发进程将提取的所述存储地址信息发送给所述第一虚拟机对应的宿主机内的其它各个虚拟机,即所述数据转发进程将所述第一待共享报文存储至其它各个虚拟机对应的接收列队中,以供其它各个虚拟机根据所述第一待共享报文中的存储地址信息获取第一待共享数据,以完成第一虚拟机与其它各个虚拟机的数据共享。

进一步地,为了提高虚拟机数据共享的灵活性,基于第一实施例提出本发明虚拟机的数据共享装置的第三实施例,在本实施例中,参照图8,所述虚拟机的数据共享装置还包括:

第二获取模块60,用于实时或定时获取其接收队列中存储的第二待共享 报文;

提取模块70,用于在获取到所述第二待共享报文时,提取所述第二待共享报文中的存储地址信息;

所述第二获取模块60,还用于根据所述存储地址信息获取所述共享内存中所述存储地址信息对应的第二待共享数据。

在本实施例中,所述第二获取模块60获取所述第一虚拟机中的接收队列中存储的待共享报文的方式包括:,1)定时获取,即用户事先在所述宿主机中预设所述第一虚拟机获取待共享报文的方式为定时获取,如每隔10分钟检测接收列队中是否有待共享报文。2)实时获取,即用户事先在所述宿主机中预设所述第一虚拟机获取待共享报文的方式为实时获取,那么,只要在所述第一虚拟机的接收列队中存有待共享报文,所述第一虚拟机即可到检测。

在所述第二获取模块60获取到所述第二待共享报文时,所述提取模块70提取所述第二待共享报文中的存储地址信息,所述第二获取模块60根据所述存储地址信息即可获取所述共享内存中所述存储地址信息对应的第二待共享数据,以完成虚拟机之间的数据共享。

进一步地,为了提高虚拟机数据共享的效率,所述第一待共享数据和/或所述第二待共享数据由多个数据包生成,即第一虚拟机在内存共享中存储待共享数据时,存储的数据是由多个数据包生成的,那么,数据转发进程在检测到所述第一和/或第二待共享报文时,即可获取各个数据包对应的各个参数,实现了一次性调用多个数据包,减小了每个数据包交互的平均时间,从而提高了虚拟机之间数据共享的效率。进一步地,还可以采用较大的包长来收发数据,例如一般的网络的MTU(Maximum Transmission Unit,最大传输单元长度)是1500字节,在实际应用中可以采用更大的MTU来减少每包的成本,值得注意的是,它要求待共享报文收发的两端必须采用相同的MTU,如果两端的MTU不匹配,可能导致报文碎片从而无法正常通讯。

进一步地,根据报文的源物理地址生成或更新转发表,即生成或更新目的物理地址与虚拟机接收队列的对应关系表,也就是说I/O进程为每个I/O线程维护一个转发表,转发表维护目的物理地址与虚拟机接收队列的对应关系。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其它变体 意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

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

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1