本技术公开了一种基于微内核Hypervisor的虚拟机跨操作系统通信方法,由微内核Hypervisor创建在各自的操作系统环境中独立运行的虚拟机,然后在两个具有通信需求的虚拟机之间构建起一个共享内存,两个虚拟机分别初始化虚拟机共享设备,将共享内存映射到自身的虚拟地址中,当一个虚拟机需要向对方传送数据时,发起通信将数据写入共享内存中,接收数据的虚拟机则从共享内存读取该数据,从而实现虚拟机的跨操作系统通信。本发明基于共享内存技术,利用微内核Hypervisor对共享内存和虚拟机的通信过程进行管理,实现虚拟机之间的跨操作系统通信。
背景技术
虚拟机化技术在服务器和桌面环境中已发展数十年,在云计算的快速发展中也起到了推波助澜的作用。虚拟化技术把物理硬件资源(像服务器、存储、网络、内存)抽象成虚拟资源,将单一的物理资源分割成多个虚拟资源,每个虚拟资源都能独立分配给不同的操作系统,达成资源的有效隔离。在嵌入式系统领域,比如车载平台,随着智能化的迅速发展,虚拟化技术能够充分利用有限的资源,支持多个操作系统在同一硬件平台运行,分别发挥不同作用。
虚拟机管理器(Hypervisor)在不同分区之间实现了处理器资源、内存资源以及外设资源的隔离与共享,因此在上层的虚拟机之间无法直接进行通信。然而,虚拟化的一个关键功能是虚拟机之间以及主机系统与虚拟机之间的数据和内存共享。为了实现这一目标,目前有以下几种主要的虚拟机间通信方法:
通过网络套接字实现虚拟机之间的通信,利用虚拟网络接口卡(vNIC)和虚拟交换机(vSwitch)来模拟物理网络环境。每个虚拟机配备vNIC,通过vSwitch连接,实现标准的网络通信。基于TCP或UDP协议的套接字编程,使虚拟机能够在同一物理主机内或跨主机进行数据交换。这种方式使用范围广,没有场景的限制,但是采用TCP/IP协议的Socket接口数据传输需要经过协议栈,且需要多次数据拷贝,并且不可避免的会受到网络延迟的影响,因此存在一定的性能开销。
共享内存技术已成为实现虚拟机间高效通信的关键手段,这种方式相较于传统的网络通信,不仅能够提供更高的通信效率,还特别适用于那些运行在同一物理硬件平台上的共生虚拟机。利用共享内存,这些虚拟机能够直接在物理内存中开辟共享区域,从而实现客户机之间的数据共享操作。这种方式不仅避免了网络通信中可能出现的延迟问题,而且还大幅度减少了数据在传输过程中的拷贝次数,进而提升了数据传输的速度和系统的整体性能。
XenSocket是一种高吞吐量单向VM间通信机制,它使用通信VM之间的共享内存缓冲区来完全绕过网络协议栈。接收方VM分配128KB页面池,并要求Xen虚拟机管理程序将这些页面共享给发送方VM,这些页面在循环缓冲区中重复使用。XenSocket是一种单向通信管道,并且上层接口仍然依靠类似网络套接字(socket)的方式进行数据交换。
XenLoop使用共享内存创建环型缓冲区以支持同一硬件平台上的VM间网络通信。使用XenLoop无需对现有应用程序、库或前端网络设备进行更改。XenLoop设计的一个潜在缺点是虚拟机操作系统或应用程序无法直接使用共享内存,并且数据仍然会通过网络堆栈进行复制。
XenLoop和XenSocket都是在Xen虚拟机管理器上的虚拟机间通信方式,他们虽然底层都依赖于共享内存,但是虚拟机之间依旧需要通过网络套接字Socket来建立上层通信,并且虚拟机无法直接使用共享内存,数据仍然会通过网络堆栈进行复制,在通信过程中会受到网络通信的影响,会有性能损耗问题。
IVSHMEM(Inter-VM Shared Memory)是在QEMU中实现的虚拟机间共享内存协议,并且在Jailhouse、Acrn等虚拟机管理器中作为虚拟机通信的底层实现机制。IVSHMEM通过在主机间分配一块共享内存区域,并映射到虚拟机地址空间。每个虚拟机通过虚拟的PCI设备访问数据,通过中断机制实现虚拟机之间的消息通知。IVSHMEM依赖于Linux操作系统,虚拟机通过虚拟的PCI设备来访问共享内存区域。IVSHMEM不需要虚拟机之间建立网络通信,两个虚拟机之间依赖于虚拟的PCI设备来交换数据,并且当有多个虚拟机访问同一块内存区域时,无法保障数据的同步,如果虚拟机本身不支持PCI设备,两者之间就无法直接建立点对点的连接,进行数据传输。对于虚拟化通信中,多个虚拟机之间同时进行通信时,实时性是一个需求,IVSHMEM不支持基于虚拟机间优先级的通知机制,只支持先来先到的方式进行虚拟机间的事件通知机制。
实现思路