Agent timers

Overview

Timers measure method execution time. Different timers provide different accuracy and granularity, based on the OS and architecture.

If a selected timer is not available on the agent platform, the Agent uses the standard run-time (Low-Res System Clock) timer. If changing the timer type, you must restart the Agent for the change to take effect.

Use the Agents Overview dashlet to see the timer used by a specific Agent. To do this, select the desired Agent in the Agent list. The HiResClock and Timer properties in the Details pane indicate the type of timer for the Agent.

See Set up Agents and Agent Group - Agent Mapping for information on different ways to specify a timer type for an agent.

Timer types

Values for <id>:

  • 0x10000: Physical host TSC The physical host TSC may change its counting rate, jump to a different value, or both, when the virtual machine migrates to a different host, or is resumed from suspend or reverted to a snapshot.
  • 0x10001: Elapsed real time in ns The elapsed real time counter runs at a constant rate but may jump to a different value when the virtual machine migrates to a different host, or is resumed from suspend or reverted to a snapshot.
  • 0x10002: Elapsed apparent time in ns Elapsed real time and elapsed apparent time were introduced in VMware ESX 3.5 and VMware Workstation 6.5. The zero point for the counters is unspecified.

Issues

Frequency scaling

Timers affected by dynamic frequency scaling are not used unless forced. The Agent typically issues warnings in such cases.

Multiple CPUs/cores

Several timers may make problems on systems with multiple CPUs and multiple cores per CPU. These include rdtsc() and possibly QueryPerformanceCounter() and JVMTI->GetTime().

QueryPerformanceCounter()

On a multiprocessor computer, it should not matter which processor is called. However, you can get different results on different processors due to bugs in the basic input/output system (BIOS) or the hardware abstraction layer (HAL). To specify processor affinity for a thread, use the SetThreadAffinityMask function.

Also, the Performance counter value may unexpectedly leap forward.

See http://msdn.microsoft.com/en-us/library/ms644904.aspx for more information.