none
Theory question on HV performance counters RRS feed

  • Question

  • Hello!

    As you know there are Hyper-V Hypervisor Logical Processor, Hyper-V Hypervisor Virual Processor and Hyper-V Hypervisor Root Virtual Processor performance counter sets in Performance Monitor. Each of them has the %Guest Time, %Hypervisor Time and %Total Run Time counters:

    I can't understand the following: for the physical proccesor(s) the counter Hyper-V Hypervisor Logical Processor\%Guest Run Time defines how much of the physical core's processing power is used for running virtual machines, but what does this counter ( Hyper-V Hypervisor Virtual Processor) mean in the context of the VM itself? If there's no nested Hyper-V inside a VM then theoretically there should NOT be any "guests" inside a VM...?

    The same question applies to the Hypervisor Run Time counters.

    Thank you in advance,
    Michael



    • Edited by MF47 Monday, May 18, 2020 8:59 AM
    Friday, May 15, 2020 11:26 AM

All replies

  • Hi,

    Hypervisor Virtual Processor Utilization - Processor relates to counter of the Virtual processors of the VM's (Child Partitions).

    % Guest Runtime relates to The percentage of time spent by the processor in guest code.

    Example... If a VP in the in the Virtual Processor Utilisation is very High and on the Hyper-V Hypervisor Logical processor is low... You have to consider adding CPU's to the VM.

    Theres also the split between what is the "Total processor time", the "Guest Processor time" and the "Hypervisor Processor Time"

    Guest Processor time - work done on the child partitions

    Hypervisor processor time -  Work Done by the Hypervisor driver (Executing instructions to the virtualization  itself)

    Total Processor time -  all processing cycles being consumed on the Server.

    And the Root Virtual Processor... with relates to the Parent Partiton.

    Cheers,


    Helder Neves

    Monday, May 18, 2020 10:12 PM
  • Hi helder_n,

    Thank you for the reply, but that's not the answer to my question.

    Tuesday, May 19, 2020 8:20 AM
  • Here's the explanation of the Hyper-V Hypervisor Virtual Processor\%Guest Run Time counter:

    What: This measures the amount of physical CPU time each VM virtual CPU instance uses. Each virtual processor can only run on one physical CPU thread at a time.

    ...so I'll reformulate my question:

    If the Hypervisor Virtual Processor\%Guest Run Time counter measures the  PHYSICAL cpu time consumed by VMs and the Hypervisor Logical Processor\%Guest Run Time counter shows the % of the PHYSICAL cpu time processor spends on VMs then should they be the same?

    For example, if you need to know how much cpu time is consumed by your virtual machines which counter will you rely on?

    In my screenshot above the Hypervisor Virtual Processor\%Guest Run Time\_Total = 0.664 but the Hypervisor Logical Processor\%Guest Run Time\_TOTAL = 4.312. According to the definition above the total amount of my VMs' cpu time is only 0.664% - in this case why the Hypervisor Logical Processor\%Guest Run Time\_Total counter value is almost 7 times higher (4.312)?

    Wednesday, May 20, 2020 11:04 AM
  • Hi,

    Did you have a look at the article below?

    PerfMon: Hyper-V Hypervisor Virtual Processor versus Hyper-V Hypervisor Logical Processor
    https://www.itprotoday.com/server-virtualization/perfmon-hyper-v-hypervisor-virtual-processor-versus-hyper-v-hypervisor-logical

    Best regards,
    Leon


    Blog: https://thesystemcenterblog.com LinkedIn:

    Wednesday, May 20, 2020 12:13 PM
  • Hi Leon,

    Thank you for the article - it's very interesting.

    Since the Hypervisor Virtual Processor\%Guest Run Time\ conter reflects the Processor Time counter from the VM's point of view am I correct that it might be more pertinent to watch (at least in terms of alerting) the Hypervisor Logical Processor\%Guest Run Time counter because (as in my example) even idle virtual machins (with their Virtual Processor\%Guest Run Time = ~0.6%) may be causing much higher Logical Processor\%Guest Run Time utilization (4.312%)?

    Wednesday, May 20, 2020 1:11 PM
  • For monitoring purposes most monitoring software use the Hyper-V Host Virtual Processor \% Total Run Time performance counter.

    Blog: https://thesystemcenterblog.com LinkedIn:

    Wednesday, May 20, 2020 1:22 PM
  • "most monitoring software use the Hyper-V Host Virtual Processor \% Total Run Time performance counter" - yes, I know, and that's what I don't quite understand. Here's one more example:

    If I were looking solely at the Hyper-V Host Virtual Processor \% Total Run Time performance counter I would think all my VMs are consuming no more than 25% of my physical cpu power, while in reality my PHYSICAL cpu spends more that 50% on those VMs.

    In other words, I don't know why the two different counters that (it's just my understanding based on the articles read) theoretically both must show how much cpu time is used for virtual machines, display so different values (~25% and 54%).

    Wednesday, May 20, 2020 3:06 PM
  • Here's an excerpt from the following book: Pro Hyper-V: A Problem-Solution Approach

    Hyper-V schedules the processor time for guest virtual machines in the form of processor threads, the processor time for guests will be spread over the available processors in a Hyper-V host. However, the guest cannot exceed the processor capacity assigned to the virtual machine. So if a guest virtual machine is assigned two processors, it will take advantage of only two processors on the Hyper-V host at any one time. Processing time is distributed in a round-robin fashion for the guest virtual machines running on the Hyper-V host.

    Typically the \Processor(*)\% Processor Time metric would be used to measure processor performance. However this is not an accurate portrayal of the processor utilization in a guest virtual machine. Since processing time is distributed in a round-robin fashion for the guest virtual machines, the processor utilization for \Processor(*)\% Processor Time is a value that is relative to the number of virtual processors assigned to a particular guest.

    For example:

    In a two processor system, each virtual processor in a guest virtual machine will attempt to use 50% of each physical processor. So a virtual machine that is assigned one virtual processor on a four-processor host system will be utilizing only 25% of the total host system's capacity, even when the virtual processor is utilized at 100%.

    Basically there are three (3) partitions in a Hyper-V installation

    • Parent partition (where the Windows Server 20XX resides)
    • Root partition (where the actual hypervisor resides)
    • Child partition (where the guest virtual machines reside)

    Processor I/O happens between the child partitions and the root partition; this I/O is never passed to the parent partition. So when you measure Processor(*)\% Processor Time, it is actually taking a measurement of the parent partition, which should really not be utilized much at all. The hypervisor is doing all of the processor scheduling work for the virtual machines. Due to these considerations, specific processor performance counters exist for Hyper-V and Hyper-V guests.

    One is for measuring performance of the Hyper-V system as a whole, this is the \Hyper-V Hypervisor Logical Processor (_Total)\% Total Run Time counter, this measures the percentage of time that the processor is running the host and guest virtual machines.

    One of the most important counters to look at in this case is the \Hyper-V Hypervisor Virtual Processor(*)\% Total Run Time, this counter will let you see which virtual processor is taking the most processing time.


    Blog: https://thesystemcenterblog.com LinkedIn:

    Wednesday, May 20, 2020 3:39 PM