Issues when TSCs are incorrectly detected to be unsynchronized
search cancel

Issues when TSCs are incorrectly detected to be unsynchronized

book

Article ID: 321363

calendar_today

Updated On:

Products

VMware vSphere ESXi

Issue/Introduction

Symptoms:
  • During boot, the vmkernel logs a message containing the phrase "TSC disabled as reference timer: multiple clock domains" or "TSC disabled as reference timer: diverging NUMA TSCs".  
  • Subsequently, virtual machines show unusually poor performance when executing the rdtsc instruction.
  • On some machines, the vmkernel may fail to boot, instead halting with a Purple Diagnostic Screen.


Environment

VMware vSphere ESXi 6.5
VMware vSphere ESXi 6.0
VMware vSphere ESXi 6.7
VMware vSphere ESXi 5.5

Cause

On most modern x86-compatible machines, hardware ensures that the TSC (timestamp counter) registers of all logical CPUs are synchronized at boot time and remain always in sync with each other unless changed by software, so the TSCs can be treated as a single global reference timer.  ESXi runs best on machines with such synchronized TSCs. ESXi also has support for machines with unsynchronized TSCs, but with a significant performance penalty.  In particular, executing the rdtsc instruction in a virtual machine can be on the order of 100 times slower if the host has unsynchronized TSCs.

On a few current machines, ESXi incorrectly detects the host TSCs as being unsynchronized because of a difference in interpretation of certain ACPI table fields provided by firmware.  Currently, most HPE Superdome series machines are affected by this issue.

Resolution

There is no resolution for the issue at the moment.

Workaround:
NoteDo not apply this setting on a machine that does not really have synchronized TSCs. If you do, the machine will eventually crash when the TSCs drift too far apart, and there may be confusing symptoms prior to the crash.

If the host definitely has synchronized TSCs, you can force the vmkernel to use the TSC as a global reference timer with the following boot option:
esxcli system settings kernel set --setting=timerForceTSC --value=TRUE
A reboot is required for the change to take effect.

Note: If this issue prevents the vmkernel from booting, you need to apply the workaround manually during boot in order to get the system to come up to the point where you can issue the esxcli command shown above. 

During the pre-boot splash screen, press Shift+O (the letter O) to modify the boot options. In the resulting screen, add the following to the end of the boot line: timerForceTSC=TRUE.