Host power management causes problems with guest timekeeping on Linux hosts
search cancel

Host power management causes problems with guest timekeeping on Linux hosts

book

Article ID: 344116

calendar_today

Updated On:

Products

VMware VMware Desktop Hypervisor

Issue/Introduction

I have a Linux host with power management features that vary the processor speed. When the host processor speed changes, the guest clock runs too quickly or too slowly. Can I correct this?


Environment

VMware Workstation 8.x (Linux)
VMware GSX Server 3.x (Linux)
VMware Workstation 10.x (Linux)
VMware Server 1.0.x (Linux)
VMware Workstation 9.x (Linux)
VMware Workstation 7.x (Linux)
VMware Workstation 11.x (for Linux)
VMware Workstation Pro 14.x (for Linux)
VMware Workstation Pro 12.x (Linux)
VMware Workstation 6.x (Linux)
VMware Workstation 4.x (Linux)
VMware Workstation 5.x (Linux)

Resolution

This article applies to VMware Workstation 4.0 and higher, VMware GSX Server 2.5.1 and higher, and VMware Server 1.x running on Linux hosts. For more information on these products on Windows hosts, see Host power management causes problems with guest timekeeping on Windows hosts (1227).
 

This problem occurs because current VMware for Linux products do not have complete support for host power management features (such as Intel SpeedStep, or AMD PowerNow or Cool'n'Quiet) that vary the processor speed. This article gives one workaround that prevents guest clocks from running quickly and another that periodically corrects the time when guest clocks run slowly. Alternatively, for more accurate time, you can lock the host processor to a constant speed. For more information, see Locking SpeedStep, PowerNow, or Cool'n'Quiet on the Host to a Constant Speed (708) and System Clocks Running at a Slower Speed in the Guest Operating System (916).

To prevent guest clocks from running too quickly, specify the correct maximum host CPU speed in your global configuration file, /etc/vmware/config . If this file exists, edit it with a text editor, adding the lines described below. The file may not exist. If it does not exist, create it as a plain text file.

The example presented here assumes that the host computer has a maximum speed of 1700MHz. The first line is the most important one. It should be your host computer's maximum speed in kHz -- that is, its speed in MHz times 1000, or its speed in GHz times 1000000. To find your actual host's maximum CPU speed, run cat /proc/cpuinfo and look for the line cpu MHz, which is your host's maximum CPU speed. Add these lines to your global configuration file:

host.cpukHz = 1700000
host.noTSC = TRUE
ptsc.noTSC = TRUE

To periodically correct the time (once per minute) when a guest clock runs slowly, VMware Tools must be installed in the guest. On the Options tab of VMware Tools in the guest, verify that Time synchronization between the virtual machine and the host operating system is selected.

Notes:

  • If the problem is still not corrected, this may be addressed by disabling power management altogether. This can be done by adding apm=off to the boot entry of the host's /etc/grub.conf file.
  • If the problem is more widespread than just timekeeping and the virtual machine is simply running too slowly or quickly, and using apm=off is not sufficient, add acpi=off noapic to the boot entry of the host's /etc/grub.conf file.
  • If the CPU of the host machine uses Intel SpeedStep, AMD Cool-N-Quiet, VIA Longhaul, or any other CPU speed throttling and power saving technology, the cat /proc/cpuinfo command displays the current speed at which the CPU is running and not the maximum CPU speed. To get the correct speed, you need to run this command:

    cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

    If a limit has been configured for the CPU, use this command:

    cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq