HyperV_Mon monitors physical, logical, and virtual performance information that is available when running virtual machines under Microsoft Hyper-V. The graphical display is organized to help easily understand the CPU performances being experienced.

Detailed text displays also help highlight other performance issues such as memory, paging, and I/O. Additional information is provided about virtualization "overhead" that is detected within the VMs.

Updated to support Hyper-V versions:

  • R3 (Windows Server 2012);
  • R3+ (Windows Server 2012 R2 / Windows 8.1)
  • Windows 10 / Server 2016

Hyper-V and Hyper-V R2 should use version 3.0.1 of the tool.

Download links are at the bottom of this page.

HyperV_Mon Version 3.17.08.05 image

 

What is Hyper-V?

Hyper-V is Microsoft's virtualization hypervisor. It comes with Windows Server 2008 R2 and Windows 8, and also has a free stand-alone version. Hyper-V is roughly equivalent to VMware ESX or Citrix XenServer (although all three vendors would cringe at that statement and tell you that they are sooooo much better).

What am I looking at in the image above?

HyperV_Mon was designed for IT professionals, not your average user, so there is a lot stuff on the screen. The organization of the information is done in layers.

  • Hardware Layer:  The bottom most portion of the image (in black) represents the hardware.  Bios information and the serial number are shown, when available.
  • HyperVisor Layer:  The layer just above the hardware represents the Hypervisor, including the actual physical/logical CPUs controlled by the hypervisor.  Each of these CPUs has a graph that shows CPU usage over time (currently the last two minutes are shown). These graphs show the CPU usage on each CPU broken down into several categories.  The used CPU is shown in two colors, with the darker green representing Hypervisor overhead and the lighter green being usage by the VMs and the Host system.  Above the green represents the amount of time spent in idle states. More on this later.
  • Virtual Machine Layer: Above the hypervisor layer are the host machine and virtual machines known to the host. 
    • The host Windows OS, known as the "root partition" is shown on the left of the layer.  Local CPU graphs and information on overall Memory and I/O usage is shown. The configure button on the top of this area allows you to configure the tool, including attaching to a different remote Hyper-V host.
    • Each of the known virtual machines is shown on the right. Details include CPU, Memory, and I/O.

 

The blue line running through CPU graphs represents a running CPU average. Hover the mouse over items on the tool for additional debugging details to appear. Also use right-clicks for additional functionality.

What does HyperV_Mon cost?

TMurgent believes in giving back to the community. HyperV_Mon is free for use when downloaded directly from the TMurgent website. Copying to other websites for download is not permitted (that's why geeks invented links).

How does this tool work?

The tool makes use of published APIs, when applicable, but also uses some unpublished kernel interfaces to obtain information or request system modifications. The tool understands the differences between versions of the operating system and adjusts to those differences.

Click on the Configure Tool button to configure the tool:

configuration dialog

Provide the name/IP Address of the Hyper-V host (Root Partition Name), and set debug and polling levels.  The debugging is written to a text log file (in the same folder as the program) so you should only turn it on if you have a problem with the tool and want to provide us information on the issue.

The "Enable VM Display Scrolling" is enabled by default.  This helps when you have a large number of VMs.

On the main display, there is generally additional information available as a tooltip if you hover the mouse of an area of the screen.  Often, there is also some right-click menus as well.

The Virtual Machines are always sorted by status, and then by the name of the VM.  The quick display of the VMs show the VM Name, OS Name, state of the VM, key performance numbers, plus the CPU graphs of the VM. When you right click on a VM, a popup menu will appear:

Example of Right-click menu for a VM

Some of the controls available in the Hyper-V Manager from Microsoft have been added here. In addition, you may click on the "Show Status Details Window" to reveal additional information.

What about the Power "C" Levels

Modern CPUs have amazingly complex details when it comes to controlling speed and power.  The processors are so fast that much of the time they really don't have anything useful to do while it waits for slower components like network, disks, and even RAM to deliver what it needs. So rather than drain unneeded power and generate unnecessary heat that must be removed, the chip manufacturers developed means to reduce consumption at times. This tricks they use may involve reducing clock frequency, lowering voltages to components, or even shutting things down completely. The industry settled on sort of a standard way to allow the software to interact and control the performance of the CPUs through ACHI.

Ultimately there are "P" states and "C" states.  The CPU that you have comes in a physical package that contains multiple cores.  Each core can also have hyper-threading enabled, in which case we have two logical processors for each core (physical) processor.   The "P" state is the parking state of a core processor.  In extremely idle times, the hypervisor can choose to completly power down a core, which is reported as "Parked".   Parking is an operation that requires a significant amount of time to undo, so it is only done in situations where the processor(s) are not expected to be needed for hours or more.

The "C" state depicts the sleep state of an idle logical processor, which is a more active way to conserve smaller amounts of power and heat. Each logical processor can be in a different state, even when in the same core.  The specification calls for four C states, labeled C0 through C3.  Manufactures tend to internally define substates of these and super-states (up to C7 in at least one case), but the interface spec has 4 so that is all the information we have to work on.  The manufacturer will map what they are doing -these 4 states and generally everything above C3 maps to C3.

When there is an active thread running in a logical processor, we regard this as used CPU and display graphs in green to indicate this. Otherwise, we call the time when there are no threads ready to run as idle time.  The only known practical use of idle time is for the zero page threads of the windows "Idle" process of the host, and that is to zero out freed memory. Thus a little idle time is always a good thing. Otherwise, the CPU is just spinning its wheels wasting resources. 

The highest power usage of idle time is the C0 state, and that memory clearing operation will be done in that state.  C1 is the next closest, then C2 and finally C3. It doesn't seem as though the processor must pass through C1 to get to C3, it just gets set to whatever is appropriate.

While going to a lower power state will lower power/heat, it might mean a delay in doing something important when a thread becomes ready to run.  Lowering the frequency during the idle period doesn't have much of an effect as it may be raised back up very quickly, but lower power states like C3 may cause things like the on-chip L1/2/3 caches to become invalidated, so when things start up again there may be more processor stalls waiting for DRAM to delivery data/instructions.  This is why many server administrators like to disable power saving modes in the BIOS and in the OS (which can often override the BIOS settings).

The graphs shown in the tool in the Hypervisor layer attempt to provide you information about the amount of time the processor spent in these different C sleep states.  Although reported as a percentage of time in the interface, the C-state percentage values are actually a percentage of the overall idle time.  Hopefully the in-tool help dialog explains this clearly:

 

What OSs will it run on?

This version of the tool is designed to run on anything with .Net 4.0.  It should work with all versions of Hyper-V servers. If you have a problem with older versions of Hyper-V, see the download links below for older versions to work with older versions of Hyper-V.  The tool depends on the .Net 4.0 framework, and requires access to the Hyper-V host partition WMI counters.

How do I install it?

No installer. Just download, unzip, read the readme, and copy the exe somewhere convenient.

Are there more free tools?

TMurgent has a bunch of tools on this page. Usually they are free, unless you are a Software Vendor. Tools for performance have a segregated list here.

What Changes in this version?

Version 3.18.11.17

  • Fix for VMs with characters ( and ) in the name.  Hyper-V seems to substitute [ and ] for these in some of the APIs.
  • Possibly a final fix for graphic anomalies in the graphs. 

Version 3.17.08.05

  • Improvements to the C-Sleep state reporting
  • Added a grab-bar between hypervisor and VM display that you can drag to resize the two panels.
  • Updated color schemes and various small UI improvements.
  • New versioning reflecting the release date.

Version 3.10.1:

  • Support for Windows 10 and Server 2016.

Version 3.1.0:

  • All WMI polling has been moved to individual VM background threads.  This should make the UI more responsive.
  • More efficient polling used.  All polling of WMI counters to the VMs themselves have been removed due to performance issues of remote WMI.
  • A number of new and improved counters in the virtualization\V2 counter set are now used.  This makes this version of the tool pretty much incompatible with older versions of Hyper-V, so use the old version for those operating systems.
  • "real processor" sleep states are now called out.  You can tell when/if Hyper-V parks a core.
  • A full set of performance metrics are now shown at a glance on running VMs.
  • A new popup (available via right-click menu on the VM) window provides additional detail, including snapshot, network (including IP addresses), version of the Hyper-V Integration Components, and replication information.
  • VMs are now sorted by status (active, paused, saved, and disabled) and then alphabetically by VM name.  This makes it easier to find the VM that you want to look at.
  • VMs are now also color coded showing the status.
  • Right Click menu added to start/stop/pause/snapshot the VM.

 Version 3.0.2:

  • Option to control main VM display.  Previously the tool auto-fit all VMs into a single screen.  While good for a small number of VMs, once you go over about 20 VMs you really want a scroll bar.  This mode is now the default, but you can de-select this new behavior as an option in the configuration screen.

 

Here is the ZIP package for the latest version: Download ZIP of 3.181117

 

Previous versions:

Additional tools for performance have a segregated list here.