Hypervisors perform complex calculations and queues to time slice jobs efficiently across multiple processors. Inherently, there is an overhead introduced by the hypervisor to emulate such operations. Beyond configuration integration services correctly, there are several things should to remember:

Four Processors Per VM – Hyper-V R2 only supports 4 virtual processors per VMs. VMs with lower loads should be configured to use one or two virtual processors. Balancing and sizing your VMs for proper processor allocation is key to realizing virtualized savings. Only allocate multiple virtual processors to a virtual machine if the applications that run in that virtual machine are SMP aware.

Expected Virtual Processors – If you have a quadcore processor with hyper-threading, you will see 8 instances for this object (one for each core).

Reporting on processor utilization requires that you collect data on the following performance counters:

* Percent Guest Run Time
* Percent Hypervisor Run Time
* Percent Total Run Time

Overall storage capacity is something that you can estimate by looking at the applications and data retention requirements. Generally, this involves estimating a storage driver (file size, data per user, and transactions per day) and multiplying it by growth and retention rates.

However, IO utilization is far more important than overall capacity. You can always buy more disks. If the storage system is slow, then you have serious problem on your hands.

Synthetic Devices – Hyper-V supports synthetic and emulated storage devices. Avoid emulated devices. Synthetic devices offer far superior throughput and response time, while using less CPU. The only time you should consider emulated devices is when you have a filter driver that loads and reroutes IOs to a Synthetic Storage device.

Note: VM integration services must be installed to use synthetic devices on the VM.

Virtual Disks – Hyper-V supports three types of virtual hard disks: (1) Dynamically Expanding VHD; (2) Fixed-Size VHD and (3) Differencing VHD. Dynamically Expanding VHDs are known to increase the necessary disk IOs for each write and increase CPU overhead. Fixed Size VHDs allocate the entire size of the VHD on allocation. This has the lowest fragmentation likelihood and lowest CPU overhead hit. Differencing VHDs consume the most CPU cycles and incur the largest amount of IO.

When a snapshot is taken, a differencing VHD is created. Snapshots essentially create a chain of bits which point to a single parent VHD: The more snapshots in a chain, the slower and more resource intensive the VM will perform. There is a logical limit of 50 snapshots; however, we recommend avoiding snapshots in production environments which have no more than 5 snapshots in a chain for high performing servers.

Passthrough Disks – Passthrough disks are fast. Essentially, a passthrough disk is mapped directly to a physical disk or storage LUN. Passthroughs avoid the congestion imposed by the file system in the root partition. Passthrough disks are great for large data files or servers that require quick failover or migration.

Reporting on I/O performance and utilization requires that you collect data on the following performance counters:

* \Physical Disk(*)\Current Disk Queue Length
* \Physical Disk(*)\Disk Bytes / sec
* \Physical Disk(*)\Disk Transfers/sec
* \Hyper-V Virtual Storage Device(*)\*
* \Hyper-V Virtual IDE Controller(*)\*

Hyper-V virtualizes the guest physical memory to isolate VMS from each other and provide a contiguous, zero-based memory space for each guest operating system. If you’re using non-SLAT hardware, constant modifications to the virtual address space in the guest will consume IO and memory.

For most virtual machines the use of dynamic memory is recommended. However, some applications are not well suited for the use of dynamic memory. Microsoft Exchange is an example of an application that is not well suited for dynamic memory.

All VMs should have an appropriate amount of memory assigned as startup memory when using dynamic memory. Refer to the Appendix: Memory Settings in the Hyper-V Dynamic Memory Configuration Guide found here for more detailed information on startup memory recommendations.

Monitoring and reporting dynamic memory usage is one of the most is on the most critical aspects. You should ensure that you are collecting the following data:

* Memory – Standby Cache Reserve Bytes
* Memory – Free & Zero Page List Bytes
* Memory – Pages Input/Sec
* Hyper-V Dynamic Memory Balancer – Average Pressure

Measuring throughput and capacity on your NICs is critical in order to maintain a high performing virtual platform. In general, you must focus on the synthetic switch devices. Make sure that your synthetic network adapters support VLAN tagging; VLAN tagging provides significantly better network performance if the physical adapter supports NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB encapsulation for both large send and checksum offload.

To report on Hyper-V capacity and monitor performance, the following performance counters should be collected:

* \Network Interface(*)\*
* \Hyper-V Virtual Switch(*)\*
* \Hyper-V Legacy Network Adapter(*)\*
* \Hyper-V Virtual Network Adapter(*)\*