本发明涉及虚拟机通信领域,具体涉及一种基于ivshmem技术的端对端通讯方法。
背景技术:
1、半虚拟化(paravirtualization)是一种虚拟化方式,它要求操作系统修改以支持虚拟硬件,并且在修改后的操作系统上运行虚拟化软件。在半虚拟化中,虚拟机能够通过访问虚拟化层提供的接口来与物理硬件交互,而无需通过硬件仿真的方式进行。由于不需要进行硬件仿真,因此半虚拟化通常比完全虚拟化的性能更高。
2、ivshmem是一种虚拟机间共享内存设备,全称是inter-vm shared memory,ivshmem通过模拟pci设备的方式,为每个虚拟机提供了共享内存访问和中断通知功能。ivshmem 是构建核间通信的基础,类似于网络协议中的物理层。ivshmem是一个共享内存通信框架,是一个比较常用的技术,ivshmem技术是共享内存通信技术,尤其在qemu、kvm、dpdk等虚拟化场景使用较多,可以用在guestos之间、guestos与主机之间的通信,其特性为:
3、(1)最多支持65536个peer(对端同等角色,即虚拟机);
4、(2)提供多种目的的共享内存区域,包括一个所有peer公共读写区域,一个所有peer可读的状态区域,每个peer都有一个可写其他peer只读的区域;
5、(3)使用中断进行通知;
6、(4)支持多个上层协议;
7、(5)通过标准的pci设备进行发现和配置。
8、现有的ivshmem通信模型为通信提供了基本的共享内存和中断通知功能,根据共享内存区域的组成,每个peer可以访问的共享内存区域包括:
9、(1)每个peer共享的可读写区域(read/write section);
10、(2)每个peer独占的可读写区域(output section for peer n);
11、(3)每个peer可以读取其他peer独占的可读写区域(output section for peern)。
12、在ivshmem基础上需要设计一个通信规则,确定共享内存区域的用法,确定通信中各个peer的角色,来协调每个peer对共享内存的读写时机。每个peer共享的可读写区域,每个peer都可以读写,需要复杂的机制来保证各个peer之间的同步,而且由于只存在一个这样的区域,难以实现多个peer情况下任意peer之间的通信,仅适合两个peer之间的通信。
13、公开号为cn101667144b、名称为《一种基于共享内存的虚拟机通信方法》运行在xen技术之上,xen有一个特权虚拟机,xen监视器主要运行于硬件之上,负责虚拟机和资源的管理。当虚拟机之间需要通信时,通讯发起方根据通信目的 ip 地址查询本地事件通道表从而知道通信目的是否是在同一宿主机上,如在同一宿主机上,客户虚拟机将要发送的数据写入本地虚拟数据发送共享内存环形队列;通信目的客户虚拟机会从事件通道得知数据到来,从本地虚拟数据接收共享内存环形队列读取数据。
14、然而xen负责管理共享内存,负责处理各个虚拟机间的通信,虚拟机在通信的时候,需要向xen监视器发起共享内存请求,xen会创建两个实际物理共享内存环形队列,需要通信的虚拟机会创建一个事件通道,该事件通道会绑定到对端虚拟机上的一个虚拟cpu,如此,虚拟机才能完成通信通道的建立,因此xen技术目前已经被淘汰。且在cn101667144b中每对通信的客户虚拟机之间只有一个通信通道,每个客户虚拟机内有多个虚拟cpu,一次只能有一个虚拟 cpu 拥有通信通道的控制权,该通信方式效率较低。
15、综上所述,现有ivshmem仅实现了jailhouse虚拟机之间的共享内存访问和通知,无法处理多个虚拟机之间数据访问同步问题,无法直接用于虚拟机之间的点对点通信;xen技术的通信方式效率低。
技术实现思路
1、针对现有技术中的上述不足,本发明提供的一种基于ivshmem技术的端对端通讯方法解决了现有虚拟机端对端通讯效率低的问题。
2、为了达到上述发明目的,本发明采用的技术方案为:
3、提供一种基于ivshmem技术的端对端通讯方法,其包括以下步骤:
4、s1、通过ivshmem技术在同一个物理机中每一个虚拟机中设置一个所有虚拟机可读写内存、一个所有虚拟机可读内存和一个本体虚拟机可写其他虚拟机只读内存;
5、s2、在本体虚拟机可写其他虚拟机只读内存中为其他每个虚拟机划分一个只读区域,使每个只读区域负责一个与其他虚拟机的通信链路;
6、s3、对于每一条通信链路,通过循环队列的方式进行数据传输,完成端对端通讯;
7、其中,所有虚拟机可读写内存为备用区域;
8、所有虚拟机可读内存用于记录各个虚拟机的状态,并向各个虚拟机展示所有虚拟机的状态;
9、只读区域,用于记录本体虚拟机所要发送的数据。
10、进一步地,循环队列包括数据块、开始索引、结束索引和used索引;其中:
11、开始索引,用于表示要发送的数据的起始位置;
12、结束索引,用于表示要发送的数据的结束位置;
13、used索引,位于通信链路接收端的虚拟机上,表示接收端未使用数据的起始位置。
14、进一步地,通过循环队列的方式进行数据发送的具体方法包括以下子步骤:
15、a1、从数据池分配一个数据块,向其中写入要发送的数据;
16、a2、将数据块索引保存到结束索引指向的单元,使结束索引向后移动一个位置;
17、a3、向数据接收端发送中断信号。
18、进一步地,通过循环队列的方式进行数据接收的具体方法包括以下子步骤:
19、b1、通过数据接收端相应中断信号,获取开始索引指向的数据单元;
20、b2、将used索引插入已使用数据的末端,并持续进行数据接收,直至数据接收完毕;
21、b3、通过数据接收端向数据发送端发送中断信号;
22、b4、通过数据发送端相应中断信号,将开始索引移动到used索引处,并释放当前数据传输所占用的数据块。
23、进一步地,每个数据块包括包头和数据;包头共16字节,包括channel字段、size字段、timestamp字段、pkt_total字段、pkt_index字段和reserved字段;
24、channel字段的偏移为0,类型为uint16,用于记录通道号;
25、size字段的偏移为2,类型为uint16,用于记录有效数据的长度;
26、timestamp字段的偏移为4,类型为uint32,用于记录时间戳;
27、pkt_total字段的偏移为8,类型为uint8,用于记录分包号和总包数;
28、pkt_index字段的偏移为9,类型为uint8,用于记录分包号和当前包的索引;
29、reserved字段的偏移为9,长度为6字节,用于扩展备用。
30、进一步地,通道号的范围是0~0xffff,其中0~0xfeff由应用使用,0xff00~0xffff由核间通信内部使用。
31、本发明的有益效果为:本发明在本地物理主机上,建立了虚拟机与虚拟机、虚拟机和物理主机间的双向通信链路,即保证了性能,还保证了效率。
1.一种基于ivshmem技术的端对端通讯方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于ivshmem技术的端对端通讯方法,其特征在于,循环队列包括数据块、开始索引、结束索引和used索引;其中:
3.根据权利要求2所述的基于ivshmem技术的端对端通讯方法,其特征在于,通过循环队列的方式进行数据发送的具体方法包括以下子步骤:
4.根据权利要求3所述的基于ivshmem技术的端对端通讯方法,其特征在于,通过循环队列的方式进行数据接收的具体方法包括以下子步骤:
5.根据权利要求3所述的基于ivshmem技术的端对端通讯方法,其特征在于,每个数据块包括包头和数据;包头共16字节,包括channel字段、size字段、timestamp字段、pkt_total字段、pkt_index字段和reserved字段;
6.根据权利要求5所述的基于ivshmem技术的端对端通讯方法,其特征在于,通道号的范围是0~0xffff,其中0~0xfeff由应用使用,0xff00~0xffff由核间通信内部使用。
