虚拟机交流接口VMCI(The Virtual Machine Communication Interface)是一个在一个或多个虚拟机与宿主机之间提供高速高效交流的基本组件(infrastructure),VMCI SDK促进了使用VMCI基本组件的软件的发展。

提示:VMCI SDK已经不被推荐使用,并且推荐用VMCI套接字库(VMCI Sockets library)来代替他。详见VMCI Sockets Documentation

VMCI Overview

VMCI SDK有以下组件:

  1. 一个用于交换较少信息的数据包(datagram)API

  2. 一个用于共享数据的共享内存API

  3. 一个用于控制虚拟机能接收到什么的通道控制API

  4. 一个用于推送(publishing)和检索(retrieving)资源的发掘服务


如果没有VMCI,虚拟机和宿主机就用网络层进行交流,使用网络层增加了交流所需开销,由于(With)VMCI交流通讯(communication)开销需要小型化和多任务化要求通讯必须得到优化。


安装和启用VMCI

在VMware6.0,VMCI不是默认安装的一部分


启用一个虚拟机的VMCI功能

 1.编辑.vmx文件

 2.自定义安装VMware工具


提示:宿主机上没有任何安装VMCI必须的操作


编辑.vmx文件

为了使VMCI在你的虚拟机上可用,在虚拟机配置文件上加入如下两行

#下面这一行是必须加入的

vmci0.present = "TRUE"

#下面这一行可选择性加入

vmci0.id = "num"


这里,num是一个代表你宿主机上每一个虚拟机的唯一的正数(即每个虚拟机的num不一样),即是说,对每一个虚拟机而言,你都可以选择一个数(1,2,3...),但是,两个虚拟机各自的vmci0.id不能相同。


自定义安装VMwareTools

在你编辑完成.vmx文件过后,你可以按照如下步骤安装VMwareTools软件的一部分:

在Windows虚拟机下:

 1.选择“自定义安装(Custom Installation)”并且从将要安装的VMware驱动列表中选中允许VMCI驱动

 2.执行安装

你可能需要重启虚拟机以使用VMCI


在Linux虚拟机下

 1.执行vmware-config-tools.pl脚本带上--experimental参数,这个操作打开了安装的实验特性以启用VMCI

 2.安装器提示您是否希望安装VMCI设备,如果你回答“yes”,VMCI将安装到你的Linux虚拟机中并且会创建一个 /dev/vmci 的设备节点


简单的应用程序(Sample Applications)

当你安装Workstation6.0(在你的宿主机上)或者VMwareTools(在你的虚拟机上),两个简单的应用程序会包含在内:

 1.shareMenApp - 这个服务创建一个共享的内存区域,并且在共享内存中每过一秒写入机器的当前时间。客户机链接到共享内存区且读出服务机的时间。

 2.datagramApp - 这个服务创建一个数据包句柄并且等待一个数据包,客户机发送一个数据包给这个服务,并且这个服务发送一个数据包回来,就像乒乓球一样。


简单程序的源码文件与说明文件(下文提及)一同提供。


说明文件

 当你安装软件时,无论是Windows或者linux下的宿主机或者虚拟机,都会有一份说明文件包含在内:


HostGuest
Linux/usr/share/doc/vmware/vmware-vmci/samples/README/usr/share/doc/vmware-tools/vmware-vmci/samples/README
WindowsC:\Program Files\VMware\VMware Workstation\VMCI\Sample Applications\READMEC:\Program Files\VMware\VMware Tools\VMCI\Sample Applications\README


API组件

从使用者的观点看来,API构成了两个主要的部分,共享内存API和数据包API,通道控制API和发掘服务API应该与共享内存API或者数据包API协同使用。

 1.共享内存API允许两个或者多个虚拟机共享内存或者一个宿主机和一个虚拟机共享内存,查看Shared Memory API可以获得更多信息

 2.数据包API允许不同进程在不同环境中向其他进程发送数据包。为了通讯,两个Context环境个字创建一个数据包句柄,为了发送到另一个句柄发送者需要知道接受者数据包句柄,发送者可以浏览发掘服务(the Discovery Service)使用的根据已经推送(published)的数据包句柄的名字。查看Datagram API可以获得更多信息。

 3.发掘服务API(the Discovery Service)是一个用于根据给定名称注册句柄和寻找已注册句柄的方便的API.

 4.通道控制API允许去控制一个虚拟机能否访问到一个什么资源(共享内存或者数据包句柄).



以下为原文

http://pubs.vmware.com/vmci-sdk/datagram.html