一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种虚拟机通信的方法、装置、系统和介质与流程

2021-11-03 11:22:00 来源:中国专利 TAG:


1.本发明涉及信息技术领域,特别是涉及一种虚拟机通信的方法、装置、系统和计算机可读存储介质。


背景技术:

2.云计算已成为当今企事业单位的主要业务支撑平台,虚拟化作为云计算的技术支撑,为用户提供了相互隔离的系统,在保证安全性的同时,提高了资源利用率。当前业务系统主要以分布式为主,同一宿主机上的不同虚拟机(virtual machine,vm)之间的通信则成为常态。然而,虚拟机之间的独立性阻碍了同一宿主机内不同虚拟机之间的高速通信。
3.当前虚拟机之间的通信主要以网络和串口为主。当前vm平台中的虚拟机采用前端和后端分离驱动的方式进行输入/输出(input/output,i/o)模拟。以两台虚拟机之间的通信为例,虚拟机a若将数据传输到虚拟机b,需要经过虚拟机a内部的用户空间、内核空间、vm模块以及纯软件实现的虚拟化模拟进程,最后虚拟化模拟进程通过系统调用宿主机的本地驱动将数据交由宿主机内核。然后经过相反的路径将网络数据交给虚拟机b的相关进程。不难发现,在此过程中,不仅通信路径较长,而且在此过程中会进行多次上下文切换和数据拷贝,性能较差。
4.若同一宿主机中不同虚拟机之间通过普通串口进行通信,虽然不会影响客户业务系统的网络通信带宽,但串口通信的数据传输速率较低,不能支持大流量数据传输,更别说高性能要求。
5.可见,如何提升同一宿主机上虚拟机之间的通信效率,是本领域技术人员需要解决的问题。


技术实现要素:

6.本发明实施例的目的是提供一种虚拟机通信的方法、装置、系统和计算机可读存储介质,可以提升同一宿主机上虚拟机之间的通信效率。
7.为解决上述技术问题,本发明实施例提供一种虚拟机通信的方法,包括:
8.第一虚拟机获取待发送数据;
9.所述第一虚拟机将所述待发送数据发送至所述宿主机上的共享内存,触发针对所述第二虚拟机的事件通知,其中,所述共享内存由所述第一虚拟机和所述第二虚拟机共享,所述事件通知用于通知所述第二虚拟机从所述共享内存读取所述待发送数据。
10.通过共享内存区的方式实现虚拟机之间的数据交互,无需经过多次上下文切换和数据拷贝过程,有效的提升了同一宿主机上虚拟机之间的通信效率。
11.可选地,所述共享内存包括用于读取数据的读环形队列和用于写入数据的写环形队列;
12.所述第一虚拟机将所述待发送数据发送至所述宿主机上的共享内存包括:
13.所述第一虚拟机将所述待发送数据写入所述第一虚拟机对应的写环形队列。
14.通过将共享内存划分为写入数据的写环形队列和读取数据的读环形队列,可以保证虚拟机间共享内存中数据的有序读写。
15.可选地,所述第一虚拟机将所述待发送数据写入所述第一虚拟机对应的写环形队列包括:
16.所述第一虚拟机利用多个进程向所述第一虚拟机对应的写环形队列中写入数据。
17.通过多个进程并行执行数据的写入,可以有效的提升数据的处理效率。
18.可选地,还包括:
19.所述第一虚拟机接收事件通知;其中,所述事件通知用于通知所述第一虚拟机接收来自所述第二虚拟机的待接收数据;
20.所述第一虚拟机从所述共享内存的读环形队列中读取所述待接收数据。
21.通过设置事件通知,可以规范各虚拟机之间的通信方式,提升虚拟机之间的通信效率。
22.可选地,所述第一虚拟机接收到事件通知时,从所述共享内存的读环形队列中读取数据包括:
23.所述第一虚拟机利用多个进程从所述第一虚拟机对应的读环形队列中读取数据。
24.通过多个进程并行执行数据的读取,可以有效的提升数据的处理效率。
25.可选地,所述第一虚拟机利用多个进程从所述第一虚拟机对应的读环形队列中读取数据包括:
26.所述第一虚拟机检测当前进程的缓存空间的剩余空间是否大于或等于预设值;若否,则从所述读环形队列中删除与所述当前进程相对应的数据包;若是,则从所述读环形队列中读取与所述当前进程相对应的数据包,并将所述数据包放入所述当前进程的缓存空间。
27.在读取数据时通过设置数据丢包机制,可以有效的降低数据拥塞的情况发生,保证了各进程的顺利执行,有效的提升了虚拟机的处理效率。
28.可选地,在所述第一虚拟机将所述待发送数据写入所述第一虚拟机对应的写环形队列之前还包括:
29.所述第一虚拟机判断将所述待发送数据写入所述写环形队列之后,所述写环形队列的剩余存储空间是否大于或等于预设阈值;若否,则丢弃所述待发送数据;若是,则执行所述将所述待发送数据写入所述第一虚拟机对应的写环形队列的步骤。
30.在写入数据时通过设置数据丢包机制,可以有效的降低数据拥塞的情况发生,保证了各进程的顺利执行,有效的提升了虚拟机的处理效率。
31.可选地,在所述第一虚拟机将所述待发送数据发送至所述宿主机上的共享内存,触发针对所述第二虚拟机的事件通知之后还包括:
32.所述第一虚拟机接收到所述第二虚拟机传输的数据重传请求时,将所述数据重传请求中携带的数据序号相对应的数据发送至所述共享内存。
33.通过设置重传机制,可以有效的获取完整的数据包。
34.本发明实施例还提供了一种虚拟机通信的装置,包括获取单元和发送单元;
35.第一虚拟机的所述获取单元,用于获取待发送数据;
36.所述第一虚拟机的所述发送单元,用于将所述待发送数据发送至所述宿主机上的
共享内存,触发针对所述第二虚拟机的事件通知,其中,所述共享内存由所述第一虚拟机和所述第二虚拟机共享,所述事件通知用于通知所述第二虚拟机从所述共享内存读取所述待发送数据。
37.通过共享内存区的方式实现虚拟机之间的数据交互,无需经过多次上下文切换和数据拷贝过程,有效的提升了同一宿主机上虚拟机之间的通信效率。
38.可选地,所述共享内存包括用于读取数据的读环形队列和用于写入数据的写环形队列;
39.所述发送单元具体用于将所述待发送数据写入所述第一虚拟机对应的写环形队列。
40.通过将共享内存划分为写入数据的写环形队列和读取数据的读环形队列,可以保证虚拟机间共享内存中数据的有序读写。
41.可选地,所述发送单元具体用于利用多个进程向所述第一虚拟机对应的写环形队列中写入数据。
42.通过多个进程并行执行数据的写入,可以有效的提升数据的处理效率。
43.可选地,还包括接收单元和读取单元;
44.所述第一虚拟机的所述接收单元,用于接收事件通知;其中,所述事件通知用于通知所述第一虚拟机接收来自所述第二虚拟机的待接收数据;
45.所述第一虚拟机的所述读取单元,用于从所述共享内存的读环形队列中读取所述待接收数据。
46.通过设置事件通知,可以规范各虚拟机之间的通信方式,提升虚拟机之间的通信效率。
47.可选地,所述读取单元具体用于利用多个进程从所述第一虚拟机对应的读环形队列中读取数据。
48.通过多个进程并行执行数据的读取,可以有效的提升数据的处理效率。
49.可选地,所述读取单元包括检测子单元、删除子单元和存取子单元;
50.所述检测子单元,用于检测当前进程的缓存空间的剩余空间是否大于或等于预设值;若否,则触发所述删除子单元;若是,则所述存取子单元;
51.所述删除子单元,用于从所述读环形队列中删除与所述当前进程相对应的数据包;
52.所述存取子单元,用于从所述读环形队列中读取与所述当前进程相对应的数据包,并将所述数据包放入所述当前进程的缓存空间。
53.在读取数据时通过设置数据丢包机制,可以有效的降低数据拥塞的情况发生,保证了各进程的顺利执行,有效的提升了虚拟机的处理效率。
54.可选地,还包括判断单元和丢弃单元;
55.所述第一虚拟机的判断单元,用于在所述第一虚拟机将所述待发送数据写入所述第一虚拟机对应的写环形队列之前,判断将所述待发送数据写入所述写环形队列之后,所述写环形队列的剩余存储空间是否大于或等于预设阈值;若否,则触发所述丢弃单元;若是,则触发所述发送单元执行所述将所述待发送数据写入所述第一虚拟机对应的写环形队列的步骤。
56.所述丢弃单元,用于丢弃所述待发送数据。
57.在写入数据时通过设置数据丢包机制,可以有效的降低数据拥塞的情况发生,保证了各进程的顺利执行,有效的提升了虚拟机的处理效率。
58.可选地,还包括重传单元;
59.所述第一虚拟机的所述重传单元,用于接收到所述第二虚拟机传输的数据重传请求时,将所述数据重传请求中携带的数据序号相对应的数据发送至所述共享内存。
60.通过设置重传机制,可以有效的获取完整的数据包。
61.本发明实施例还提供了一种虚拟机通信的方法,包括:
62.宿主机的宿主机利用共享内存建立第一虚拟机和第二虚拟机的通信通道,其中,所述共享内存、所述第一虚拟机和所述第二虚拟机位于所述宿主机,所述第一虚拟机和第二虚拟机的通信通道用于所述第一虚拟机和所述第二虚拟机之间的通信,所述共享内存由所述第一虚拟机和所述第二虚拟机共享;
63.所述宿主机将所述第一虚拟机和第二虚拟机的通信通道的信息存储至通道信息表,所述通道信息表包括至少两个虚拟机之间的通信通道的信息,所述至少两个虚拟机位于所述宿主机。
64.通过共享内存区的方式实现虚拟机之间的数据交互,无需经过多次上下文切换和数据拷贝过程,有效的提升了同一宿主机上虚拟机之间的通信效率。
65.可选地,所述宿主机的宿主机利用共享内存建立第一虚拟机和第二虚拟机的通信通道包括:
66.所述宿主机获取通信需求信息,所述通信需求信息包括所述第一虚拟机向所述第二虚拟机发送数据的需求;
67.所述宿主机根据所述通信需求信息为所述第一虚拟机和所述第二虚拟机分配所述共享内存。
68.通过依据通信需求信息分配共享内存,使得分配的共享内存更加贴合虚拟机通信的实际需求。
69.可选地,所述宿主机根据所述通信需求信息为所述第一虚拟机和所述第二虚拟机分配所述共享内存包括:
70.所述宿主机根据所述通信需求信息确定所述共享内存;
71.所述宿主机为所述第一虚拟机设置第一设备标识,为所述第二虚拟pci设备设置第二设备标识,所述第一虚拟机和第二虚拟机的通信通道的信息包括所述第一设备标识和所述第二设备标识;所述第一虚机和所述第二虚拟机均用于维护所述共享内存并且通过自身的寄存器记录内存信息和设备信息,所述内存信息包括所述共享内存的大小和所述共享内存的偏移量,所述设备信息包括所述第一设备标识和所述第二设备标识。
72.通过设置设备标识可以便于区分不同的虚拟机,并且根据设备信息中携带的设备标识可以获知哪些虚拟机之间具有通信需求。
73.可选地,在所述宿主机的宿主机利用共享内存建立第一虚拟机和第二虚拟机的通信通道之后,所述方法还包括:
74.所述宿主机将所述共享内存划分为写入数据的写环形队列和读取数据的读环形队列。
75.通过将共享内存划分为写入数据的写环形队列和读取数据的读环形队列,可以保证虚拟机间共享内存中数据的有序读写。
76.本发明实施例还提供了一种虚拟机通信的装置,包括建立单元和存储单元;
77.所述建立单元,用于利用共享内存建立第一虚拟机和第二虚拟机的通信通道,其中,所述共享内存、所述第一虚拟机和所述第二虚拟机位于所述宿主机,所述第一虚拟机和第二虚拟机的通信通道用于所述第一虚拟机和所述第二虚拟机之间的通信,所述共享内存由所述第一虚拟机和所述第二虚拟机共享;
78.所述存储单元,用于将所述第一虚拟机和第二虚拟机的通信通道的信息存储至通道信息表,所述通道信息表包括至少两个虚拟机之间的通信通道的信息,所述至少两个虚拟机位于所述宿主机。
79.通过共享内存区的方式实现虚拟机之间的数据交互,无需经过多次上下文切换和数据拷贝过程,有效的提升了同一宿主机上虚拟机之间的通信效率。
80.可选地,所述建立单元包括获取子单元和分配子单元;
81.所述获取子单元,用于获取通信需求信息,所述通信需求信息包括所述第一虚拟机向所述第二虚拟机发送数据的需求;
82.所述分配子单元,用于根据所述通信需求信息为所述第一虚拟机和所述第二虚拟机分配所述共享内存。
83.通过依据通信需求信息分配共享内存,使得分配的共享内存更加贴合虚拟机通信的实际需求。
84.可选地,所述分配子单元具体用于根据所述通信需求信息确定所述共享内存;为所述第一虚拟机设置第一设备标识,为所述第二虚拟pci设备设置第二设备标识;,所述第一虚拟机和第二虚拟机的通信通道的信息包括所述第一设备标识和所述第二设备标识,所述第一虚机和所述第二虚拟机均用于维护所述共享内存并且通过自身的寄存器记录内存信息和设备信息,所述内存信息包括所述共享内存的大小和所述共享内存的偏移量,所述设备信息包括所述第一设备标识和所述第二设备标识。
85.通过设置设备标识可以便于区分不同的虚拟机,并且根据设备信息中携带的设备标识可以获知哪些虚拟机之间具有通信需求。
86.可选地,还包括划分单元;
87.所述划分单元,用于在所述建立单元利用共享内存建立第一虚拟机和第二虚拟机的通信通道之后,将所述共享内存划分为写入数据的写环形队列和读取数据的读环形队列。
88.通过将共享内存划分为写入数据的写环形队列和读取数据的读环形队列,可以保证虚拟机间共享内存中数据的有序读写。
89.本发明实施例还提供了一种虚拟机通信的系统,所述系统包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的虚拟机通信的程序,所述虚拟机通信的程序被所述处理器执行时实现如权利要求上述任意一项所述的方法。
90.本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有虚拟机通信的程序,所述虚拟机通信的程序可被一个或者多个处理器执行,以实现如上述任意一项所述的方法。
91.由上述技术方案可以看出,宿主机利用共享内存建立第一虚拟机和第二虚拟机的通信通道,其中,共享内存、第一虚拟机和第二虚拟机位于宿主机,第一虚拟机和第二虚拟机的通信通道用于第一虚拟机和第二虚拟机之间的通信,共享内存由第一虚拟机和第二虚拟机共享;为了使得各虚拟机可以获知与其具有通信连接的关联虚拟机,并且直接调用共享内存实现数据的读写,降低对宿主机的依赖,在为具有通信连接的虚拟机分配相同的共享内存之后,宿主机可以将第一虚拟机和第二虚拟机的通信通道的信息存储至通道信息表,通道信息表包括至少两个虚拟机之间的通信通道的信息。第一虚拟机获取待发送数据;所述第一虚拟机将所述待发送数据发送至所述宿主机上的共享内存,触发针对所述第二虚拟机的事件通知,其中,所述事件通知用于通知所述第二虚拟机从所述共享内存读取所述待发送数据。在该技术方案中,通过共享内存区的方式实现虚拟机之间的数据交互,无需经过多次上下文切换和数据拷贝过程,有效的提升了同一宿主机上虚拟机之间的通信效率。
附图说明
92.为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
93.图1为本发明实施例提供的一种虚拟机通信的方法的信令图;
94.图2为本发明实施例提供的一种网络通信的结构示意图;
95.图3为本发明实施例提供的一种虚拟机一对多的通道建立的示意图;
96.图4为本发明实施例提供的一种同一宿主机虚拟机间基于共享内存的通信结构图;
97.图5为本发明实施例提供的一种虚拟机通信的装置的结构示意图;
98.图6为本发明实施例提供的另一种虚拟机通信的装置的结构示意图;
99.图7为本发明实施例提供的一种虚拟机通信的系统的结构示意图。
具体实施方式
100.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本发明保护范围。
101.为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。
102.随着信息化水平的提升,当今企事业单位对宿主机的性能要求越来越高,为了满足不同的业务需求,在宿主机上可以设置多个虚拟机。当前虚拟机之间的通信主要以网络和串口为主,串口通信的数据传输速率较低,不能支持大流量数据传输;而网络通信需要进行多次上下文切换和数据拷贝,性能较差。
103.故此,为了提升同一宿主机上虚拟机之间的通信效率,本发明实施例提供了一种虚拟机通信的方法、装置、系统和计算机可读存储介质,宿主机可以为需要进行通信的虚拟机分配共享内存,虚拟机利用共享内存便可以实现信息的交互,无需经过多次上下文切换
和数据拷贝过程,有效的提升了同一宿主机上虚拟机之间的通信效率。
104.接下来,详细介绍本发明实施例所提供的一种虚拟机通信的方法。虚拟机通信的方法包括宿主机为虚拟机分配共享内存以及虚拟机利用共享内存进行通信两部分内容。
105.图1为本发明实施例提供的一种虚拟机通信的方法的信令图,该方法包括:
106.s101:宿主机利用共享内存建立第一虚拟机和第二虚拟机的通信通道。
107.初始状态下,在配置文件中记录了同一宿主机中各虚拟机之间的通信要求信息,例如,虚拟机之间多对多或一对多或一对一的通信连接。
108.在本发明实施例中,为了提升虚拟机之间通信效果,对于需要进行通信连接的虚拟机分配相同的内存区即共享内存。
109.为了便于描述,在本发明实施例中均以宿主机上的两台虚拟机即第一虚拟机和第二虚拟机之间的通信为例展开介绍。
110.在具体实现中,宿主机可以获取通信需求信息,通信需求信息包括第一虚拟机向第二虚拟机发送数据的需求。宿主机根据通信需求信息确定共享内存。
111.其中,共享内存、第一虚拟机和第二虚拟机位于宿主机,第一虚拟机和第二虚拟机的通信通道用于第一虚拟机和第二虚拟机之间的通信,共享内存由第一虚拟机和第二虚拟机共享。
112.例如,虚拟机a和虚拟机b需要进行通信连接,此时可以为虚拟机a和虚拟机b分配同一块共享内存,虚拟机a需要向虚拟机b传输数据时,可以直接将数据写入该共享内存,虚拟机b直接从该共享内存读取数据即可,无需经过多次上下文切换和数据拷贝过程。s102:宿主机将第一虚拟机和第二虚拟机的通信通道的信息存储至通道信息表。
113.通道信息表包括至少两个虚拟机之间的通信通道的信息。
114.为了使得各虚拟机可以获知与其具有通信连接的关联虚拟机,并且直接调用共享内存实现数据的读写,宿主机需要将各虚拟机之间的通信通道的信息存储至通道信息表。
115.在具体实现中,宿主机可以为第一虚拟机设置第一设备标识,为第二虚拟pci设备设置第二设备标识,第一虚拟机和第二虚拟机的通信通道的信息包括第一设备标识和第二设备标识;第一虚拟机和第二虚拟机均用于维护共享内存并且通过自身的寄存器记录内存信息和设备信息,内存信息包括共享内存的大小和共享内存的偏移量,设备信息包括第一设备标识和第二设备标识。
116.s103:第一虚拟机获取待发送数据。
117.在本发明实施例中,以第一虚拟机和第二虚拟机的通信为例,待发送数据指的是需要向第二虚拟机传输的数据。
118.s104:第一虚拟机将待发送数据发送至宿主机上的共享内存,触发针对第二虚拟机的事件通知。
119.其中,共享内存由第一虚拟机和第二虚拟机共享,事件通知用于通知第二虚拟机从共享内存读取待发送数据。
120.为了便于虚拟机可以直接调用其对应的共享内存,第一虚拟机和第二虚拟机均可以通过自身的寄存器记录内存信息和设备信息,其中,内存信息可以包括共享内存的大小和共享内存的偏移量,设备信息可以包括第一设备标识和第二设备标识。
121.考虑到实际应用中,一个虚拟机对应的关联虚拟可能有多个,为了避免各虚拟机
之间共享内存的混乱,可以通过共享内存的偏移量区分该虚拟机与不同关联虚拟机之间的共享内存。
122.由上述技术方案可以看出,宿主机利用共享内存建立第一虚拟机和第二虚拟机的通信通道,其中,共享内存、第一虚拟机和第二虚拟机位于宿主机,第一虚拟机和第二虚拟机的通信通道用于第一虚拟机和第二虚拟机之间的通信,共享内存由第一虚拟机和第二虚拟机共享;为了使得各虚拟机可以获知与其具有通信连接的关联虚拟机,并且直接调用共享内存实现数据的读写,降低对宿主机的依赖,在为具有通信连接的虚拟机分配相同的共享内存之后,宿主机可以将第一虚拟机和第二虚拟机的通信通道的信息存储至通道信息表,通道信息表包括至少两个虚拟机之间的通信通道的信息。第一虚拟机获取待发送数据;所述第一虚拟机将所述待发送数据发送至所述宿主机上的共享内存,触发针对所述第二虚拟机的事件通知,其中,所述事件通知用于通知所述第二虚拟机从所述共享内存读取所述待发送数据。在该技术方案中,通过共享内存区的方式实现虚拟机之间的数据交互,无需经过多次上下文切换和数据拷贝过程,有效的提升了同一宿主机上虚拟机之间的通信效率。
123.在本发明实施例中为了保证虚拟机间共享内存中数据的有序读写,可以将共享内存划分为写入数据的写环形队列和读取数据的读环形队列。
124.以第一虚拟机为例,第一虚拟机将待发送数据写入第一虚拟机对应的写环形队列,相应的,第二虚拟机可以将写环形队列映射为自身的读环形队列。
125.第一虚拟机接收到事件通知之后,第一虚拟机从共享内存的读环形队列中读取待接收数据;其中,事件通知用于通知第一虚拟机接收来自第二虚拟机的待接收数据。也即第二虚拟机向写环形队列写入数据之后,可以向共享内存一并写入事件通知,以便于第一虚拟机根据该事件通知,将写环形队列映射为自身的读环形队列,从而读取待接收数据。
126.通过将内存区划分写环形队列和读环形队列,可以保证共享内存的各虚拟机之间读写的有序执行,避免了多个虚拟机同时向共享内存写入或读取数据造成数据的混乱。
127.为了提升虚拟机的处理效率,可以将虚拟机执行多进程的并行处理,在具体实现中,第一虚拟机可以利用多个进程向第一虚拟机对应的写环形队列中写入数据。第一虚拟机也可以利用多个进程从第一虚拟机对应的读环形队列中读取数据。
128.在本发明实施例中,通过对每个进程设置虚拟套接字,实现多个进程的并行处理;其中,虚拟套接字包括源虚拟机的标识信息、目的虚拟机的标识信息、源虚拟机的发送端口、目的虚拟机的接收端口和状态标识。虚拟套接字(virtual socket,vsocket)其使用方式类似于网络套接字(socket)编程。vsocket通过应用程序调用字符设备的用于设备输入输出操作的系统调用函数(ioctl)创建。每个vsocket有自己独立的缓冲区,缓冲区的大小可以根据文件系统设定。
129.通过对多个进程分配虚拟套接字以及缓存区,可以实现多个进程的并行处理,有效的提升了虚拟机的处理效率。
130.为了保证多进程通信的顺利执行,可以设置数据自动丢包和重传机制。
131.以读取数据为例,第一虚拟机利用多个进程从第一虚拟机对应的读环形队列中读取数据时,先检测当前进程的缓存空间的剩余空间是否大于或等于预设值。
132.每个进程有其各自对应的数据包,当前进程从读环形队列读取出其对应的数据包之后,下一个进程才能够从读环形队列中读取出其对应的数据包。
133.缓存空间的剩余空间小于预设值时,则说明剩余空间不足,无法接收新读取的数据。为了避免阻塞,此时可以从读环形队列中删除与当前进程相对应的数据包,以保证下一个进程可以顺利从读环形队列中读取数据。
134.缓存空间的剩余空间大于或等于预设值时,则说明剩余空间充足,此时第一虚拟机可以从读环形队列中读取与当前进程相对应的数据包,并将数据包放入当前进程的缓存空间。
135.以写入数据为例,第一虚拟机将待发送数据写入第一虚拟机对应的写环形队列之前,第一虚拟机可以先判断将待发送数据写入写环形队列之后,写环形队列的剩余存储空间是否大于或等于预设阈值。
136.当写环形队列的剩余存储空间大于或等于预设阈值时,则执行将待发送数据写入第一虚拟机对应的写环形队列的步骤。
137.当写环形队列的剩余存储空间小于预设阈值时,则说明数据读取的速度低于数据写入的速度,导致写环形队列的剩余存储空间不足,为保证数据的顺利读取,此时可以丢弃待发送数据。
138.为了不影响后续业务的传输速率,第一虚拟机会自动丢弃待发送数据,第二虚拟机接收到的数据有缺失,此时第二虚拟机可以通过共享内存向第一虚拟机传输数据重传请求,相应的,第一虚拟机接收到第二虚拟机传输的数据重传请求时,将数据重传请求中携带的数据序号相对应的数据发送至共享内存。
139.通过设置数据丢包机制,可以有效的降低数据拥塞的情况发生,保证了各进程的顺利执行,有效的提升了虚拟机的处理效率。通过设置重传机制,可以有效的获取完整的数据包。
140.为了防止在数据传输过程中发生死锁,在通信双方的读环形队列可以预留一个控制数据包的预留空间,从而有效的避免通信的双方接收缓存同时满时一直等待发送重传数据包。
141.宿主机为虚拟机分配共享内存之后,各虚拟机通过寄存器记录内存信息和设备信息来维护共享内存资源。考虑到在实际应用中,pci设备可以用于记录设备的内存信息和设备信息。因此,在本发明实施例中,可以通过构建虚拟pci设备的方式实现虚拟机之间的内存共享。
142.具体的,宿主机可以为每个虚拟机构建一个虚拟pci设备,根据配置文件中记录的各虚拟机之间的通信要求信息,将需要进行通信连接的虚拟机的虚拟pci设备映射到同一段物理内存区即映射到同共享内存。将各虚拟pci设备的物理内存区所对应的内存信息以及关联虚拟机的标识信息记录在各自的寄存器中;以便于各虚拟机通过虚拟pci设备的中断处理实现与其相应的关联虚拟机的通信。
143.如图2所示为本发明实施例提供的一种网络通信的结构示意图,宿主机可以通过虚拟机管理模块为第一虚拟机和第二虚拟机分配共享内存,为了便于第一虚拟机和第二虚拟机直接利用共享内存实现通信交互,宿主机可以为第一虚拟机构建第一虚拟pci设备,为第二虚拟机构建第二虚拟pci设备,在第一虚拟pci设备的寄存器中记录有共享内存的大小和偏移量以及第二虚拟机的第二设备标识,在第二虚拟pci设备的寄存器中记录有共享内存的大小和偏移量以及第一虚拟机的第一设备标识。
144.虚拟pci设备可以看作是实现虚拟机内存共享所依赖的虚拟设备,通过将具有通信连接的虚拟机的虚拟pci设备映射到同一段物理内存区,可以实现虚拟机之间内存的共享。通过在虚拟pci设备的寄存器中记录共享内存的内存信息以及虚拟机的标识信息,可以便于虚拟机直接调用物理内存区实现与其相应的关联虚拟机的通信。
145.同一宿主机上包含的虚拟机个数有多个,每个虚拟机的处理方式类似,在本发明实施例中,以所有虚拟机中的任意一个虚拟机即第一虚拟机为例展开介绍。
146.当第一虚拟机的关联虚拟机有多个时,每个关联虚拟机与第一虚拟机之间有其对应的一个共享内存,在具体实现中,可以将每个关联虚拟机的标识信息与其对应的共享内存的偏移量以对应关系的方式记录。
147.并且为了规范各虚拟机之间的通信方式,提升虚拟机之间的通信效率,虚拟机可以通过发送事件通知的方式实现通信;在各虚拟机的寄存器中添加事件通知,以便于虚拟机调用事件通知实现与其相应的关联虚拟机的通信交互。
148.事件通知包含了虚拟机执行不同数据交互操作的指令格式。虚拟机通过使用事件通知实现数据的交互操作,使得虚拟机之间的操作更加规范化。
149.如图3所示为本发明实施例提供的一种虚拟机一对多的通道建立的示意图,图3中虚拟机a(guest vm a)分别与虚拟机b(guest vmb)、虚拟机c(guest vm c)和虚拟机d(guest vm d)具有通信连接,每两个具有通信连接的虚拟机之间具有一条通信链路即一条通道,虚拟机a、虚拟机b、虚拟机c和虚拟机d之间一共有三条通道分别为通道1、通道2和通道3,虚拟机a和虚拟机b之间的通道为通道1,虚拟机a和虚拟机c之间的通道为通道2,虚拟机a和虚拟机d之间的通道为通道3。具有通信连接的虚拟机有其对应的一块共享内存,虚拟机a和虚拟机b之间有其对应的一块共享内存,虚拟机a和虚拟机c之间有其对应的一块共享内存,虚拟机a和虚拟机d之间有其对应的一块共享内存。每个虚拟机中的事件通知指的是虚拟机之间实现通信交互所使用的指令信息。在虚拟机启动之后,宿主机会根据虚拟机之间的通信要求,为具有通信连接的虚拟机分配相同的内存区,并且创建虚拟机通信交互所使用的事件通知即创建eventfd。图3中涉及三个通道,为了便于管理,宿主机会记录每个通道所对应的通道资源即内存资源,以及各通道与虚拟机之间的对应关系即vm-chanel映射表。宿主机会将每个虚拟机的共享内存信息、自身及对端事件通知文件传输给对应的虚拟机。
150.考虑到实际应用中,虚拟机的状态可能会发生变化,例如虚拟机的创建、迁移和关闭等。当虚拟机的状态发生变化时,相应的虚拟机之间的通信链路也会发生变更,为了使得共享内存可以适用于状态变化后的虚拟机,宿主机检测到虚拟机间的通信链路发生变更时,为通信链路发生变更的虚拟机重新构建新的虚拟pci设备;依据变更后的通信链路信息,调整新的虚拟pci设备所对应的内存资源以及寄存器信息。
151.初始状态下,依赖于配置文件中记录的虚拟机之间的通信要求信息为虚拟pci设备分配共享内存。当虚拟机的状态发生变化时,需要依据变更后的通信链路信息,为新创建的虚拟pci设备分配内存资源,并且由于通信链路发生变化,相应的寄存器中记录的内存地址信息以及关联虚拟机的标识信息也需要相适应的调整。
152.通过重建虚拟pci设备,能够根据虚拟机的状态变化动态的调整虚拟机之间的共享内存,满足不同虚拟机之间的连接需求。并且当虚拟机之间的连接撤销时,可以实现对共
享内存的及时释放。
153.如图4所示为本发明实施例提供的一种同一宿主机虚拟机间基于共享内存的通信结构图,图4中是以两个虚拟机之间的通信为例,在宿主机上为两个虚拟机分配了相同的内存区即共享内存。在宿主机上可以维护通道信息表,以实现通道管理。通道信息表可以划分为通道资源信息表、通道状态信息和通道与虚拟机映射关系表。其中,通道资源信息表用于记录具有通信连接的各虚拟机占用的内存资源,通道状态信息用于记录虚拟机间通道运行状态,通道与虚拟机映射关系表用于记录各虚拟机与相应通道的对应关系。宿主机的资源管理模块可以为虚拟机分配共享内存,并且维护虚拟机通信所需的事件通知。
154.每个虚拟机可以划分为设备模拟以及驱动和协议栈两大模块,设备模拟包括内存资源映射和事件通知注册。其中,内存资源映射指的是虚拟机通过自身的寄存器记录内存信息和设备信息,内存信息包括共享内存的大小和共享内存的偏移量,设备信息包括关联虚拟机的设备标识。事件通知注册指的是宿主机将虚拟机通信所需的事件通知下发至虚拟机。驱动和协议栈包含了虚拟机间实现通信所依赖的传输通信协议以及设备前端驱动。其中,设备前端驱动中包含了实现虚拟机通信的各个进程。
155.图5为本发明实施例提供的一种虚拟机通信的装置的结构示意图,包括建立单元51和存储单元52;
156.建立单元51,用于利用共享内存建立第一虚拟机和第二虚拟机的通信通道,其中,共享内存、第一虚拟机和第二虚拟机位于宿主机,第一虚拟机和第二虚拟机的通信通道用于第一虚拟机和第二虚拟机之间的通信,共享内存由第一虚拟机和第二虚拟机共享;
157.存储单元52,用于将第一虚拟机和第二虚拟机的通信通道的信息存储至通道信息表,通道信息表包括至少两个虚拟机之间的通信通道的信息,至少两个虚拟机位于宿主机。
158.可选地,建立单元包括获取子单元和分配子单元;
159.获取子单元,用于获取通信需求信息,通信需求信息包括第一虚拟机向第二虚拟机发送数据的需求;
160.分配子单元,用于根据通信需求信息为第一虚拟机和第二虚拟机分配共享内存。
161.可选地,分配子单元具体用于根据通信需求信息确定共享内存;为第一虚拟机设置第一设备标识,为第二虚拟pci设备设置第二设备标识;,第一虚拟机和第二虚拟机的通信通道的信息包括第一设备标识和第二设备标识,第一虚机和第二虚拟机均用于维护共享内存并且通过自身的寄存器记录内存信息和设备信息,内存信息包括共享内存的大小和共享内存的偏移量,设备信息包括第一设备标识和第二设备标识。
162.可选地,还包括划分单元;
163.划分单元,用于在建立单元利用共享内存建立第一虚拟机和第二虚拟机的通信通道之后,将共享内存划分为写入数据的写环形队列和读取数据的读环形队列。
164.图5所对应实施例中特征的说明可以参见图1所对应实施例的相关说明,这里不再一一赘述。
165.由上述技术方案可以看出,宿主机利用共享内存建立第一虚拟机和第二虚拟机的通信通道,其中,共享内存、第一虚拟机和第二虚拟机位于宿主机,第一虚拟机和第二虚拟机的通信通道用于第一虚拟机和第二虚拟机之间的通信,共享内存由第一虚拟机和第二虚拟机共享;为了使得各虚拟机可以获知与其具有通信连接的关联虚拟机,并且直接调用共
享内存实现数据的读写,降低对宿主机的依赖,在为具有通信连接的虚拟机分配相同的共享内存之后,宿主机可以将第一虚拟机和第二虚拟机的通信通道的信息存储至通道信息表,通道信息表包括至少两个虚拟机之间的通信通道的信息,以便于第一虚拟机获取待发送数据,将待发送数据发送至所述宿主机上的共享内存,触发针对第二虚拟机的事件通知,其中,所述事件通知用于通知所述第二虚拟机从所述共享内存读取所述待发送数据。在该技术方案中,通过共享内存区的方式实现虚拟机之间的数据交互,无需经过多次上下文切换和数据拷贝过程,有效的提升了同一宿主机上虚拟机之间的通信效率。
166.图6为本发明实施例提供的一种虚拟机通信的装置的结构示意图,包括包括获取单元61和发送单元62;
167.第一虚拟机的获取单元61,用于获取待发送数据;
168.第一虚拟机的发送单元62,用于将待发送数据发送至宿主机上的共享内存,触发针对第二虚拟机的事件通知,其中,共享内存由第一虚拟机和第二虚拟机共享,事件通知用于通知第二虚拟机从共享内存读取待发送数据。
169.可选地,共享内存包括用于读取数据的读环形队列和用于写入数据的写环形队列;
170.发送单元具体用于将待发送数据写入第一虚拟机对应的写环形队列。
171.可选地,发送单元具体用于利用多个进程向第一虚拟机对应的写环形队列中写入数据。
172.可选地,还包括接收单元和读取单元;
173.第一虚拟机的接收单元,用于接收事件通知;其中,事件通知用于通知第一虚拟机接收来自第二虚拟机的待接收数据;
174.第一虚拟机的读取单元,用于从共享内存的读环形队列中读取待接收数据。
175.可选地,读取单元具体用于利用多个进程从第一虚拟机对应的读环形队列中读取数据。
176.可选地,读取单元包括检测子单元、删除子单元和存取子单元;
177.检测子单元,用于检测当前进程的缓存空间的剩余空间是否大于或等于预设值;若否,则触发删除子单元;若是,则存取子单元;
178.删除子单元,用于从读环形队列中删除与当前进程相对应的数据包;
179.存取子单元,用于从读环形队列中读取与当前进程相对应的数据包,并将数据包放入当前进程的缓存空间。
180.可选地,还包括判断单元和丢弃单元;
181.第一虚拟机的判断单元,用于在第一虚拟机将待发送数据写入第一虚拟机对应的写环形队列之前,判断将待发送数据写入写环形队列之后,写环形队列的剩余存储空间是否大于或等于预设阈值;若否,则触发丢弃单元;若是,则触发发送单元执行将待发送数据写入第一虚拟机对应的写环形队列的步骤。
182.丢弃单元,用于丢弃待发送数据。
183.可选地,还包括重传单元;
184.第一虚拟机的重传单元,用于接收到第二虚拟机传输的数据重传请求时,将数据重传请求中携带的数据序号相对应的数据发送至共享内存。
185.图6所对应实施例中特征的说明可以参见图1所对应实施例的相关说明,这里不再一一赘述。
186.由上述技术方案可以看出,第一虚拟机的获取单元用于获取待发送数据;第一虚拟机的发送单元用于将待发送数据发送至宿主机上的共享内存,触发针对第二虚拟机的事件通知,其中,共享内存由第一虚拟机和第二虚拟机共享,事件通知用于通知第二虚拟机从共享内存读取待发送数据。在该技术方案中,通过共享内存区的方式实现虚拟机之间的数据交互,无需经过多次上下文切换和数据拷贝过程,有效的提升了同一宿主机上虚拟机之间的通信效率。
187.图7为本发明实施例提供的一种虚拟机通信的系统70的结构示意图,包括存储器71和处理器72,存储器71和处理器22通过总线连接;
188.存储器71,用于存储计算机程序;
189.处理器72,用于执行所述计算机程序以实现如上述任意实施例所述的虚拟机通信的方法的步骤。
190.本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权上述任意实施例所述的虚拟机通信的方法的步骤。
191.以上对本发明实施例所提供的一种虚拟机通信的方法、装置、系统和计算机可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
192.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
193.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献