Latency-sensitivity features of ESXi

In ESXi 5.5 there was a latency sensitive feature added to the web client.  This feature applies to individual virtual machines.  It was specifically added for latency sensitive applications.  VMware full recommendations for latency sensitive applications can be found here.   There are four settings exposed in the web client for latency sensitivity each denotes a maximum latency in micro-seconds for CPU scheduling:

  • Low
  • Normal – Latency sensitive features are disabled and the normal setting for all virtual machines by default
  • Medium
  • High – Feature is enabled

This left me with question related to the low and medium setting.   Official documentation does not even mention them as options.  I have requested they be documented in the future but what I can tell you is this:

  • Low = worse than normal shares think of it as limits for latency sensitivity
  • Medium = Not disabled and not fully enabled

End result don’t use Low or Medium you should be either normal or high today.

What does Enabled do?

CPU:

Enabled latency sensitivity essentially gives exclusive access to physical resources, bypassing all virtualization layers and tunes network virtualization layer.   Due to the bypass access to CPU the number of virtual CPU’s should not exceed the number of physical cores + 2 for VMkernel threads.   The lack of CPU scheduling from the virtualization layer reduces latency on CPU operations even more than just CPU reservation can. The effects you can see in esxtop are 100% run for each vCPU of a VM.

RAM:

Enabling the feature creates and automatic reservation for the full virtual machine memory.

Network:

Network frames will not be coalesced when enabled.

Design Guidance:

Don’t use this feature unless you really need the latency sensitivity.  You should design clusters around latency sensitivity instead of using commodity clusters.   The latency sensitive settings will not play with with others.

6 thoughts on “Latency-sensitivity features of ESXi

  1. so thanks

    i have read many documents about yhis feature but realy so confused now i have some question :

    1- do i have to just enable reserve memory when select Latency Sensitivity in high?
    2- how can understand on which vm i had to select Latency Sensitivity ?
    3- while select Latency Sensitivity drs or vmotion on that vm will be disabled?

    BR

    1. Thanks for reading.

      1- do i have to just enable reserve memory when select Latency Sensitivity in high?
      – Yes when set to high it is enabled and your don’t have a choice to change it.
      2- how can understand on which vm i had to select Latency Sensitivity ?
      – Use PowerCLI with this type of command:
      Get-View -ViewType VirtualMachine -Property Name,Config.LatencySensitivity | Select Name,@{N=’Sensitivity Level’;E={$_.Config.LatencySensitivity.Level}} – From LucD

      3- while select Latency Sensitivity drs or vmotion on that vm will be disabled?
      – No it should not effect DRS or vMotion other than the normal challenges with reservations (destination has to have enough capacity for reservation – creates some skew on DRS)

  2. this is my output :

    PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Get-View
    -ViewType VirtualMachine -Property Name,Config.LatencySensitivity | Select Name
    ,@{N=?Sensitivity Level?;E={$_.Config.LatencySensitivity.Level}} ? From LucD
    Select-Object : A positional parameter cannot be found that accepts argument ‘?
    ‘.
    At line:1 char:84
    + Get-View -ViewType VirtualMachine -Property Name,Config.LatencySensitivity |
    Select <<<< Name,@{N=?Sensitivity Level?;E={$_.Config.LatencySensitivity.Level
    }} ? From LucD
    + CategoryInfo : InvalidArgument: (:) [Select-Object], ParameterB
    indingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell
    .Commands.SelectObjectCommand

    why not work ???

    1. Try this:

      Get-View -ViewType VirtualMachine -Property Name,Config.LatencySensitivity | Select Name,@{N=?Sensitivity Level?;E={$_.Config.LatencySensitivity.Level}}

      As a single line.

      Works on my side… I believe the problem was the comment I made afterwards.

  3. unfortunately

    i get this error

    PowerCLI C:\> Get-View -ViewType VirtualMachine -Property Name,Config.LatencySen
    sitivity | Select Name,@{N=?Sensitivity Level?;E={$_.Config.LatencySensitivity.L
    evel}}
    The term ‘?Sensitivity’ is not recognized as the name of a cmdlet, function, sc
    ript file, or operable program. Check the spelling of the name, or if a path wa
    s included, verify that the path is correct and try again.
    At line:1 char:106
    + Get-View -ViewType VirtualMachine -Property Name,Config.LatencySensitivity |
    Select Name,@{N=?Sensitivity <<<< Level?;E={$_.Config.LatencySensitivity.Level
    }}
    + CategoryInfo : ObjectNotFound: (?Sensitivity:String) [], Comman
    dNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    1. I am not sure where you got the command since it’s not from my post. But just looking at the command you have ?Sensitivity Level? and I suspect it should be ‘Sensitivity Level’ instead.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.