防止虚拟机时钟运行速度过快

防止虚拟机时钟运行速度过快

我有一台 unRAID 6.6.5 服务器,时间完全正确,还有多个 Linux VM,以前也完全同步。我重新启动了其中一台 VM,突然时钟速度比 hwclock 快了一倍。通过在 2 个不同的终端中执行这 2 个循环,我可以轻松看到这一点:

while true; do date; sleep 1; done;
while true; do hwclock --show; sleep 1; done;

如果这很重要,那么 unRAID 服务器背后的硬件是 Intel Xeon E3-1245 V6,它安装在 E3C236D2I 上,带有 ECC RAM。此外,我所有的虚拟机目前都在运行 CentOS 7。默认情况下,CentOS 7 附带安装了 chronyd。执行这两个命令中的任何一个都会同步时钟,但由于时钟无论如何都会快两倍,因此在以下情况下它会立即不同步:

hwclock --localtime --hctosys
chronyc makestep

我也尝试过使用 ntpd。结果完全一样,我可以强制同步,但时钟仍然太快。此外,我的所有虚拟机都配置相同:

[root@vm ~]# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc acpi_pm
[root@vm ~]# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc

我以前也尝试过切换到 acpi_pm,但没有看到任何改进。unRAID 服务器也使用 TSC 运行:

root@server:~# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
root@server:~# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm

我遗漏了什么?我对此事进行了广泛的研究,但尚未找到任何可行的解决方案。

答案1

当系统运行时,硬件时钟不会被使用。内核维护的系统时钟是唯一重要的。内核无论如何都会每 11 分钟自动将硬件时钟与系统时间同步一次,但这只是为了应对无法正常关机的可能性。

需要问的问题是:

  1. 您的 VM 主机显示的系统时间是否准确?(即是否date显示chronyc -n tracking正确的时间,并且是否chronyc -n sources显示您的系统与其源保持合理接近?)
  2. 您的虚拟机显示的系统时间是否准确?(使用与上述相同的检查。)
  3. 重启后,你的虚拟机主机及其虚拟机是否能合理快速地恢复到正确时间?(系统可以重启期间损失或获得大量时间由于您看到的硬件/系统时钟差异。)

如果这些问题的答案是肯定的,那么您的系统就做对了。在系统运行时忽略硬件时钟。

相关内容