当您在虚拟机中同步硬件时钟时会发生什么?

当您在虚拟机中同步硬件时钟时会发生什么?

我突然想到了这一点,虽然这不是一个实际问题,但我还是很好奇。当虚拟机将其时钟与硬件时钟同步时,是否会同步主机的硬件时钟?更改为主机的软件时钟?主机和软件之间的时间差异是否会存储在虚拟机的文件中?什么都没有发生吗?

我知道这是一个随机且看似毫无意义的问题,但我想了解我所有系统背后发生了什么。对我来说,直接用例是 Linux Xen VM 中的 NTPD SYNC_HWCLOCK,但我对其他虚拟化平台也很好奇,因为它们的运行方式都不同。

答案1

在 VMWare 中,至少虚拟机操作系统看到的硬件时钟并不比其自己的软件时钟更准确,因为该时钟基于对虚拟硬件的中断和滴答等进行计数,因此当虚拟机或其主机处于负载之下时容易出现偏差。

VMWare 工具时钟同步不会与虚拟硬件中的时钟所呈现的硬件时钟同步 - 它通过 VM/主机边界与 VMWare 的主机部分进行对话(将其与主机上的操作系统时钟同步,而不是硬件时钟)。

当然,其他虚拟化解决方案的工作方式会有所不同。我使用 Xen 的时间还不够长,因此无法具体了解它在这方面的表现。一些 VM 解决方案(包括 UML 等用户模式方案以及对现有内核进行分区而不是实际虚拟化硬件的安排)将直接使用主机 OS 时钟作为 VM 的时钟,因此您需要做的就是保持主机时钟同步。

一般来说,即使在物理硬件上,我也不会让 NTP 使用硬件时钟作为参考。

此外,如果您在虚拟机内部使用 NTP,请确保在 ntp.conf 顶部有“tinker panic 0”,以便当 ntp 守护进程看到由于虚拟机/主机上最近的负载过大而导致的时钟偏差时,它不会放弃并停止尝试将时钟滑回正确位置。

编辑:漏掉了一点...另外,如果在虚拟机中使用 Linux,请确保使用现代“无滴答”内核 - 据说这些内核不太容易受到时钟偏差问题的影响。大多数现代 Linux 版本都默认使用此内核选项,因为它可以降低 CPU 功耗。

答案2

不,它不会同步主机的硬件或软件时钟。虚拟机的硬件时钟是虚拟的,在启动期间与主机同步(至少与 ESX 同步)。此后,虚拟机会保持自己的时间。对于 VMware,最好在虚拟机中运行 ntpd,对于 Xen 我不知道,但我认为是一样的。

答案3

我认为这是虚拟机的“硬件”时钟;它将与主板的其余部分一起进行模拟。VMWare 工具中有一个单独的选项,用于将虚拟机的硬件时钟与主机的硬件时钟同步,我建议您使用此选项,以及让主机与外部 NTP 服务器同步,因为这样就无需在所有虚拟机上配置 NTP。我不知道是不是只有我们,但我们在实施 VMWare 环境时没有这样做,在解决之前,我们遇到了各种与时间相关的问题和一般怪异现象。

答案4

当你尝试逻辑思考时,你可能会发现:

  • 当有多个虚拟机运行时,每个虚拟机都会更新主机时钟,这不是有点过度了吗(独立于每个虚拟机的时间可能略有不同,从而导致主机上出现“微时间抖动”)?

  • 当两台虚拟机尝试设置主机的时钟,而其中一台虚拟机的时间完全错误(甚至可能出于攻击目的)时,会发生什么?

  • 如果允许虚拟机设置主机时钟,那么这是否会破坏基本的安全假设,例如主机受到虚拟机的保护,以及虚拟机受到另一个虚拟机的保护?那么虚拟机中是否应该有一个 API 来设置主机的硬件或软件时钟?

  • 在没有可用 API 来设置主机时钟的情况下,是否应允许 VM 访问主机的硬件(因此直接设置时钟芯片)?我猜:不,出于安全原因。

相关内容