Hyper-V Performance FAQ

Anthony F Voellm (aka Tony)

6/19/2008

http://blogs.msdn.com/tvoellm

 

[**** NOTE THIS IS NOW OLD.  ****]

[**** SEE THE NEW FAQ at ****]

[****  http://blogs.msdn.com/tvoellm/archive/2009/12/18/hyper-v-performance-faq-r2.aspx ****]

 

Q: What is the recommend configuration for performance testing?

A: Here are some simple steps:

1.       Be sure to have the latest WS08 Hyper-V build – Hyper-V RC1 which is on Microsoft Downloads and Windows Update

2.       Next you need to make sure you are running a “Supported OS” with the latest SP. 

Operating System

Virtual Processor Limit

Windows Server 2008 64-bit

4

Windows Server 2003 32-bit

2

Windows Server 2008 32-bit

4

Windows Server 2003 64-bit

1

Windows Vista SP1 32-bit / 64bit

1

Windows XP SP3 32-bit / 64bit

1

Windows 2000 32bit

1

SUSE/RedHat LINUX

1

 

3.       Make sure the guest and root OS have integration components installed (http://blogs.msdn.com/tvoellm/archive/2008/04/19/hyper-v-how-to-make-sure-you-are-getting-the-best-performance-when-doing-performance-comparisons.aspx **and** http://blogs.msdn.com/tvoellm/archive/2008/01/02/hyper-v-integration-components-and-enlightenments.aspx )

4.       Make sure you are using the “Network Adapter” and not the “Legacy Network Adapter”.  The legacy adapter has a lot of emulation which causes lots of CPU overhead.

5.       Use passthrough disks attached to SCSI for the next performance.  Next best is Fixed VHD attached to SCSI.  To understand storage better see (http://blogs.msdn.com/tvoellm/archive/2007/10/13/what-windows-server-virtualization-aka-viridian-storage-is-best-for-you.aspx )

6.       Follow these tips for avoiding pitfalls http://blogs.msdn.com/tvoellm/archive/2008/04/19/hyper-v-how-to-make-sure-you-are-getting-the-best-performance-when-doing-performance-comparisons.aspx

Q: How do I monitor performance?

A: First you need to understand that the clocks in the root and guest Virtual Machines may not be accurate see (http://blogs.msdn.com/tvoellm/archive/2008/03/20/hyper-v-clocks-lie.aspx ).  Given an understanding of clocks you can see why we implemented the “Hyper-V Hypervisor Logical Processor” performance counters (access using perfmon) which are not skewed by clock effects.  There are other Hyper-V performance counters that are useful.  See the following for more details (http://blogs.msdn.com/tvoellm/archive/tags/Hyper-V+Performance+Counters/default.aspx )

Q: Should I use passthrough or iSCSI attached to the guest for storage?

A: The decision depends on what features you need to expose to the guest.  In the passthrough case the drive will show up without knowledge of the underlying LUN. 

Educated guess: If you are looking for raw performance passthough will give you the best result.

Reason: When doing IO from the guest using passthough you traverse the guest storage stack + disk stack in the root.  When doing iSCSI you traverse the storage + networking stack in the guest + root networking stack

Q: Is there a simple way to disable the hypervisor to run some baseline tests on the native system.

A: Yes.  “bcdedit /set hypervisorlaunchtype off”  and reboot the server. You should also consider changing the protocols on the root network device to re-enable IP and turn off the “Microsoft Virtual Network Switch Protocol”.   See the following for more details (XXX – coming to my blog soon J).  For starters turning off the Hypervisor should be enough for testing native performance.

To turn it back on do “bcdedit /set hypervisorlaunchtype on” and reboot the server.

Q:  Is there any common terminology used to talk about virtual machine configurations?

A: Yes - Internal to Microsoft we typically use the following;

·         Native = System without the Hyper-V role. This means you have no virtual drivers, virtual switch, …

·         Root = you have Hyper-V role installed and but are not using a virtual switch for networking.

·         Guest = Guest Virtual Machine.

·         8p.child.2x1p or better 8p.child.2VMx1VP = A system with 8 logical processors / cores running 2 Virtual Machines (VM) each with 1 Virtual Processor (VP)

Q: Are there any services that should be stopped?

A: No If you are running Server Core which is the ideal root OS to use.  Regardless of running server core vs server you should close the Hyper-V Management Console because it has a noticeable impact on CPU.  If you want the details see http://blogs.msdn.com/tvoellm/archive/2008/04/19/hyper-v-how-to-make-sure-you-are-getting-the-best-performance-when-doing-performance-comparisons.aspx

Q: Is it ok run applications / processes in the root OS?

A: You should avoid running any Role / Feature or custom service in the root.  If you have services you want to run put them in a guest VM.  Running roles in the root can have a negative impact the guest VM’s.  This is due to how the Hypervisor scheduler handles the root virtual processors.

Q: Are there additional knobs for performance nuts?

A: We are trying to make Hyper-V knob-less.  However we are engineers and here are some tips.

1.       Remove the CDROM drive from the guest if you don’t need it

2.       Look into the Caps / Weights / Reserves in the CPU config.  You can use these to “balance” workloads.

3.       You can use the WMI interfaces to force a VM to a particular node (coming to my blog soon J).  You don’t guarantee node affinity for VP’s but we do for memory.  There is a good chance the VP’s will stay on the node because the scheduler is NUMA aware.

Q: Are their addition resources that are useful for understanding Hyper-V?

A: Yes – here is a list

       http://blogs.technet.com/windowsserver/default.aspx

       http://blogs.msdn.com/virtual_pc_guy/

       http://blogs.technet.com/jhoward/

       http://blogs.msdn.com/tvoellm

       http://blogs.technet.com/winserverperformance/