<div class='slidealt'>Virtualization solutions for heterogeneous <a title='ARMv7-ARMv8 virtualization open source solutions' href='/en/solutions'>ARM multicore systems</a></div> <div class='slidealt'>Virtualization research projects <a title='ARM multicore kvm open source' href='/en/research'>in cloud and embedded systems</a></div> <div class='slidealt'>KVM on ARMv7 and ARMv8 <a title='kvm-on-arm open source smu extensions' href='/en/solutions/guides/vfio-on-arm/'>IOMMU full virtualization</a></div> <div class='slidealt'>Benefit from custom <a title='kvm on arm services full virtualization' href='/en/services'>virtualization services</a></div> <div class='slidealt'>Experience kvm <a title='virtualization for embedded heterogeneous arm core platforms' href='/en/products'>virtualization extensions</a></div>

A Shared Memory zero-copy Mechanism for ARM VMs: vosyshmem

vosyshmem is a zero copy shared memory mechanism ensuring best performance for KVM ARM virtual machines

Virtualization has become a pervasive technology, used in many application scenarios to achieve differentiated functionalities. More and more virtual machines are activated above a hypervisor layer requiring for efficient communication mechanisms between different VMs.

In fact, in highly virtualized environments like High Performance Computing (HPC) systems, networking platforms (NFV, SDN, etc.) and servers, virtual machines have frequent and intensive interactions among each other. On the other hand, in embedded system environments, due to more limited resources it is rare to find more than two virtual machines running concurrently; here the main interactions from the guest system are with the host system.

In all of these scenarios, there is always an important overhead (e.g. due to the network protocol implementation, device drivers, disk stack, etc.) which can be avoided with shared memory by exploiting the co-existence of different OSes (i.e. the virtual machines and the host) on top of the same hardware platform.

Top level architecture for vosyshmem, the zero copy shared memory mechanism provided by Virtual Open Systems

Top level architecture of the Virtual Open SYStems sHared MEMory (vosyshmem) inter-VM communication

To address this problem and speed-up the performance of the ARM virtual machines, Virtual Open Systems has developed Virtual Open SYStems sHared MEMory (vosyshmem), which is a zero-copy based shared memory mechanism that enables applications running in guest user-space to directly access a memory area shared with applications running in the host or in another guest user-space.

High performance shared memory with vosyshmem for embedded, NFV and HPC

Usually to move data from a virtual machine to another, many copies of the same memory area are needed. For example, when an application running on a guest A wants to communicate with a guest B, it writes some data in a buffer in the user-space. This buffer is then copied to the kernel space of the guest A and then to the user-space of the Host. At this point, the guest B is able to read the data from the host user-space (into the kernel space of guest B) that will be finally copied into user-space of the application running in guest B. In the above example, it is clear that the high number of the copy operations causes a real bottleneck for the performance of both applications.

The Virtual Open Systems vosyshmem implementation is a zero-copy based shared memory mechanism, that enables applications executing in a virtual machine to directly address the same memory area of a different program running in another guest or the host itself. A virtual machine program can easily communicate with an application in the host as well as a software in another guest, independently from the involved operating systems. In addition, vosyshmem supports notifications to enable events and interrupt handling. This is an important feature to reduce CPU workload (and consequently the power consumption), helping to achieve best performance.

A shared memory mechanism capable of achieving high performance combined with a high degree of security, can be used not only to share data in a fast and secure way, but also as basic building block for many applications such as API Remoting, Remote Procedure Call (RPC) implementations, shared memory based IO solutions (e.g. sockets) and Virtual Network Functions (VNF) customizations for NFV.