Thoughts about Disabling VM/Host Time Synchronization

Time synchronization is very important in any production environment, as a correct time configuration is mandatory for many applications. Some examples of this are authentication DB replication, and backup…etc.

I had recently noticed continuous security alerts appearing in my monitoring tool, showing hundreds of repetitive events related to system time change in some VMs running on our virtual infrastructure in vSphere and vCenter 6.7.

System Time Change Warnings

After connecting to the concerned VMs and checking closely these events, it was effectively shown in the Security section of the Windows Event Viewer.

Event Viewer Security Logs

Quite interesting! Why such events keeps prompting while no manual change in time has been made on any of these VMs? Moreover, why is the VMware tools daemon (vmtoolsd.exe) playing with this setting?

In this infrastructure, all affected servers were domain joined virtual servers running on vSphere 6.7 environment.

First things first, and the key thing here is to understand how servers are synchronizing time and the steps followed to do so. Below is how a server behaves for time synchronization when it first boots up.

If it is a physical Windows Server, it tries to synchronize first from its hardware clock (CMOS) then from any NTP server (Domain Controller) configured. For most Microsoft infrastructure, where a Microsoft Active Directory Domain is installed, it is the PDC server who is the time source for your domain environment. All clients, Servers, Additional DCs sync their time from PDC by default and PDC sync its time from given time source.

Time Synchronization from the PDC Controller – Credits: Micrsosoft

Virtual servers have the exact same behavior when it comes to time synchronization. However, the the hardware clock in this case will be the one of the virtualization host, so the VM will synchronize time from the host it is running as a first step.

In my case, all affected servers were virtual and none of them were restarted recently, so hardware clock synchronization was not intended to happen whatsoever.

After some investigation, I realized that system time on those virtual machines was triggered even though the VMware tools Time Synchronization setting was disabled for those VMs.

What is VMware Tools Time Synchronization?

One of the many settings you can configure on the VM Tools control Panel is the virtual machine and the host operating system setting. This setting allows you to ensure the guest operating system’s time has not fallen behind of the host system. Clearing this option prevents VMware Tools from performing this check while the guest system is up and running.

VMware Tools Time Synchronization Setting on vCenter

It’s worth noting though, it does not prevent the synchronization check from being performed when the virtual machine is started, resumed, restored from a snapshot, or when the size of virtual disk is reduced using VMware Tools. This simply means that Time Synchronization will effectively happen in case one of these action happens. Taking into consideration how the underlying hardware behaves with regard to the different interruptions it has to manage, the result of this is that time appears to drift inside those guest VMs, compared to the real hardware clock.

In my case, it was a 2 seconds lag, as shown below.

In fact, and because a planned update that needed to be applied on the hosts on the maintenance mode state, I had to manually evacuate those hosts, and therefore many VMs were moved (vMotion) back and forth across the hosts in the cluster. This resulted in triggering the time synchronization on the VMs and prompting the change time alerts in the monitoring system.

The environment I am managing runs on VMware vSphere, but this actually applies to both VMware and Hyper-V environments. You can find more information on this VMware Knowledge Base article, and this Microsoft Virtualization blog.

How to Disable VM/Host Time Synchronization?

Depending on your environment, you may want to keep time synchronization with the default configuration. However, if you are in situation where you want to go ahead and disable completely this setting and make your VMs avoid the step of adjusting time with their host, and contact directly the NTP server of your environment.

On Microsoft Hyper-V

For Hyper-V virtual machines, simply disable Time Synchronization in its VM settings. 

  • Open Hyper-V Manager.
  • Select the Virtual Guest DC.
  • Click Settings.
  • Click Integration Services.
  • Clear the Time Synchronization option.
  • Click OK then restart your VM.
Disabling Time Synchronization on a Hyper-V VM

On VMware vCenter

For VMware virtual machines, you have a finer grained control over time synchronization settings, but it is necessary to edit the virtual machine’s .vmx configuration file and set the respective options to either TRUE or FALSE based on the following table:

Configuration SettingDescription whether a time synchronization between guest and host is performed when the virtual machine is started or rebooted.
time.syncTimeSpecifies whether a check should be performed every minute to ensure the time of a running guest system does not lag that of the host.
time.synchronize.restoreSpecifies whether a time synchronization between guest and host is performed when the virtual machine is restored from a snapshot.
time.synchronize.resume.diskSpecifies whether a time synchronization between guest and host is performed when a suspended virtual machine session is resumed.
time.synchronize.continueSpecifies whether a time synchronization between guest and host is performed when a snapshot of the virtual machine is taken.
time.synchronize.shrinkSpecifies whether a time synchronization between guest and host is performed when VMware Tools are used to shrink a virtual disk assigned to the virtual machine.

Once these settings are applied, running, rebooted, resumed, or restored VMs should not trigger any time synchronization with the host whatsoever. All time synchronization will happen against the configured NTP server.

Disabling VM/Host Time Synchronization from Windows

If you’re not sure or not want to take the risk of messing up with VM settings, or may also change the time synchronization behavior for the Windows OS itself, by changing below registry key to TRUE or FALSE.

HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\VMICTimeProvider and the Enabled value to 0 (disabled) or 1 (Enabled).

Disabling Time Synchronization from Windows registry

Alternatively, you may also run this command from the command line Window:

Reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\VMICTimeProvider /v Enabled /t reg_dword /d 0

After disabling synchronization by any of the described methods, it is necessary to restart the time service, this will reset it to a new source.

net stop w32time

net start w32time
 w32tm /resync /force

Changing the time synchronization from registry can be used as a backup solution in case the settings changed from the VM configuration don’t work. Preparing a VM template with this registry setting may also apply.

1 Comment

  1. Mohamed

    Salam alikum….Bravo!!!


Leave a Comment

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