Understanding Hyper-V VSP/VSC and VMBUS Design
October 9, 2013
In Server/Client networking applications, there are two components that work together to implement networking communication: Server-Side component and Client-Side component. Server-Side component always listens to provide networking services to Client-Side Component.
The Client-Side component, on the other hand, always requests services from the Server-Side component. For example, in Windows operating systems, RPC Server acts as a listener for RPC Clients. For Microsoft Exchange Server, CAS acts as a Server-Side component that listens for networking traffic from Outlook mail clients.
Similarly, Hyper-V implements Server-Side and Client-Side components called VSP and VSC, respectively. VSP stands for Virtualization Service Provider and VSC stands for Virtualization Service Clients. Together with VMBUS, discussed shortly, VSP and VSC components improve the overall performance of a virtual machine running on Hyper-V.
An operating system running in a virtual machine is not aware of whether it is communicating with the hardware devices using the physical layer or virtual layer. In a virtual environment, operating system components send hardware access requests using native drivers, but the requests are received by the virtual layer.
Such requests are intercepted by the virtual layer before the request for accessing the hardware devices is honored. This interception is sometimes referred to as device emulation. Since these intercepted calls are handled by the device emulation component, this always presents an extra layer of communication between virtual machine and hardware devices.
To avoid the extra layer of communication, Microsoft provides a set of components called "Integration Services" for virtual machines running on Hyper-V. VMware provides "VMware Tools" for virtual machines running on ESX Server. We're going to limit our discussion in this article to Hyper-V's Integration Services components.
While the set of Integration Services also provides other services, VSP and VSC are the key components of Microsoft Hyper-V Virtualization that dramatically boost the performance of virtual machines. These two components help facilitate the smooth and reliable communication between Child Partitions (Virtual Machines) and the Parent Partition (Hyper-V Server). VSPs always run in Parent Partition and VSCs run in Child Partitions.
There are four VSPs available in Hyper-V as well as four VSCs running in multiple child partitions, as shown in the below image:
Child Partition With VSP/VSC Design
VSPs (Network, Video, Storage and HID) always run in the Parent Partition and corresponding VSCs run in the child partitions. Both VSPs and corresponding VSCs communicate with each other using a communication channel called VMBUS, as shown in the above image.
VMBUS is a special protocol designed to pass communication from a VSC to VSP running in the Parent Partition. This component plays an important role to avoid any extra layer of communication.
There can only be four VSPs running on a Hyper-V Server in the Parent Partition, but there could be multiple VSCs running on the same Hyper-V Server as part of the child partitions. VSPs are multithreading components that are running as part of the VMMS.exe and can serve multiple VSCs requests simultaneously.