Note: ESXi 5.1 has deprecated virtual machine to virtual machine communication part of Virtual Machine Communication Interface. The virtual machine to host part Virtual Machine Communication Interface is still enabled by default. For more information, see the
VMCI Sockets 5.1 Release Notes.
The Virtual Machine Communication Interface (VMCI) is an infrastructure that provides fast and efficient communication between a virtual machine and the host operating system and between two or more virtual machines on the same host. The VMCI SDK facilitates development of applications that use the VMCI infrastructure. Without VMCI, virtual machines communicate with the host using the network layer. Using the network layer adds overhead to the communication. With VMCI communication overhead is minimal and different tasks that require that communication can be optimized. An internal network can transmit an average of slightly over 2Gbit/s using vmxnet3, VMCI can go up to nearly 10Gbit/s with 128k sized Queue pairs.
There are two types of communication:
- Datagrams: connectionless – Similar to UDP Queue Pairs
- Connection oriented – Similar to TCP
VMCI provides Socket APIs, which is similar to what is already used for TCP/UDP applications. IP addresses are replaced with VMCI ID numbers. For example, it is possible to port net perf to use VMCI sockets instead of TCP/UDP.
To enable communication between virtual machines that run on the same host:
Note: Before performing these steps, ensure that the virtual machine is using hardware version 7.
- In the vSphere Client Inventory, right-click the virtual machine and click Edit Settings.
- Click the Hardware tab.
- Select VMCI device and select Enable VMCI Between VMs.
- Click OK. The other virtual machines running on the same host can now communicate with this unrestricted virtual machine.
This line is automatically added to the virtual machine configuration file (.vmx):
vmci0.present = "TRUE"
Note: The VMCI component of VMware Tools must also be installed inside the virtual machine.
Optionally, you can add this line to the .vmx file to define a communication interface:
vmci0.id = "num"
Note: num is a positive integer that is unique for each virtual machine on your host. That is, for any virtual machine, you can choose a number, such as 1, 2, 3, but two virtual machines must not have the same number as their vmci0.id.