Hyper-V机器即使在NTP的情况下也能完成漂移

已解决问题是该机器上的Hyper-V。 我删除了Hyper-V,安装了VMware Server,运行同一个VM。 时间同步问题消失(一天之后<100ms的差异)。


我的设置是这样的:

HYV1 - HyperV machine (non domain) - sync irrelevant AD1 - VM AD server on HYV1, sync'd to time.nist.gov. HyperV time sync off. S1 - Physical machine, sync'd to domain. S2 - Physical machine running HyperV, sync'd to domain. V1 - Linux VM machine on S2, sync'd to AD1. No HyperV integration. 

AD1和S1具有精细同步 – 带状图显示小于100毫秒的差异。

S2发疯似的。 以下是AD1中的一些条形图:

 18:33:22 d:+00.0010138so:+05.4101899s 18:33:24 d:+00.0010138so:+05.4319765s 18:33:26 d:+00.0000000so:+05.4788429s 18:33:28 d:+00.0000000so:+05.6089942s 18:33:30 d:+00.0010138so:+05.7240269s 18:33:32 d:+00.0000000so:+06.0421911s 18:33:34 d:+00.0081104so:+06.5613708s 18:33:37 d:+00.0000000so:+06.9096594s 18:33:39 d:+00.0000000so:+06.8867838s 18:33:41 d:+00.0010127so:+06.8936401s 

在20秒内,它飘过了一秒钟。 如果我手动将其重置为1秒内,在几分钟内它会回来约2秒漂移。 隔夜从〜2s到〜5s。 S2内的Linux VM与AD1完美同步。

这是configuration:

 C:\Users\mgg>w32tm /dumpreg /subkey:Parameters Value Name Value Type Value Data ------------------------------------------------------------ ServiceDll REG_EXPAND_SZ %systemroot%\system32\w32time.dll ServiceMain REG_SZ SvchostEntry_W32Time ServiceDllUnloadOnStop REG_DWORD 1 Type REG_SZ NT5DS NtpServer REG_SZ ad01.mydomain ad02.mydomain C:\Users\mgg>w32tm /dumpreg /subkey:Config Value Name Value Type Value Data ----------------------------------------------------------- FrequencyCorrectRate REG_DWORD 4 PollAdjustFactor REG_DWORD 5 LargePhaseOffset REG_DWORD 50000000 SpikeWatchPeriod REG_DWORD 900 LocalClockDispersion REG_DWORD 9 HoldPeriod REG_DWORD 5 PhaseCorrectRate REG_DWORD 1 UpdateInterval REG_DWORD 30000 EventLogFlags REG_DWORD 2 AnnounceFlags REG_DWORD 5 TimeJumpAuditOffset REG_DWORD 28800 MinPollInterval REG_DWORD 2 MaxPollInterval REG_DWORD 8 MaxNegPhaseCorrection REG_DWORD -1 MaxPosPhaseCorrection REG_DWORD -1 MaxAllowedPhaseOffset REG_DWORD 300 

我查看了事件日志,除了关于同步的警告(在它失去同步之后)之外,没有其他的警告。

我该如何解决这个问题? 这是唯一有这个问题的机器。 所有其他机器(物理和虚拟)都做得很好。

编辑:澄清:VM(AD1)已集成closures并同步到time.nist.gov。 AD1很好。 这是物理机器S1不能同步到AD1并漂移。 所有其他的物理服务器都能够很好地同步到AD1。

更新所以,这似乎是一个运行虚拟机的问题。 随着VMclosures,时钟慢慢滑动。 打开,它立即开始失去秒。 我把虚拟机只用了一半的资源,现在看起来似乎已经稍微减轻了一些。 谢谢!

从您的描述来看,服务器S2的主板上的RTC( http://en.wikipedia.org/wiki/Real-time_clock )有一个实际的硬件问题。

Hyper-V guest虚拟机最初从主机(HYV1)获取时钟,但由于您禁用了Hyper-V时间同步,因此它将从NIST(工作正常)中获取所有更新的时钟更新。 你的Linux虚拟机没有与Hyper-V集成,所以它是从域中得到的,这也正常工作。 你的其他物理机器工作正常,它只是一个物理服务器,每20秒钟有1秒的漂移(这是一个疯狂的漂移量)。 时间漂移比networking时间更快,可以将时钟重置到正确的时间(如果我记得正确的话每8小时发生一次)。

如果您想排除Hyper-V导致S2出错的原因,请创build一个“无Hypervisor”引导项,在没有Hyper-V的情况下重新启动,并查看时间漂移是否持续。 这里的说明: http : //blogs.msdn.com/virtual_pc_guy/archive/2008/04/14/creating-a-no-hypervisor-boot-entry.aspx

-Sean

问题在于各种时钟源(tsc,jiffies,acpi_pm,cmos_trc)的虚拟实现。 我发现用HyperV解决这个问题的最好方法是closures客户机的HyperV提供的时钟同步,然后使用adjtimex来调整时间。 在Ubuntu客户操作系统上做这个…

 # rm /var/log/clocks.log # /etc/init.d/ntp-server stop # ntpdate ntp.ubuntu.com # hwclock -u --systohc # adjtimex -l -u -h ntp.ubuntu.com 

对这两个问题都回答“否”

 # while [ /bin/true ] ; do yes | adjtimex -l -u -h ntp.ubuntu.com ; sleep 60 ; done 

保持运行几个小时来校准,按Ctrl-C退出它。

 # adjtimex -r -a -u -h ntp.ubuntu.com 

这将做你的时钟的最小二乘分析,并会find正确的调整

 # ntpdate ntp.ubuntu.com # hwclock -u --systohc # /etc/init.d/ntp-server start 

这将重新同步你的机器上的时间,ntp应该能够保持同步,因为它不应该漂移太多了。

这似乎是VM的一个非常普遍的问题。 请参阅以下网站:

http://www.vmwareinfo.com/2008/04/enabling-ntp-on-esx-servers.html

http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/6fff3eef-1b5b-4059-8618-22ab3f5c293c

我的build议是只与外部时间服务器同步,并禁用任何集成时间同步

希望这有助于。

我们已经在Core上运行了Hyper-v了一段时间。 起初,我们有时间同步问题…..我从旧的Windows NT时代恢复到最佳做法。

我看操作系统的服务器。 我创build一个Linux,路由器,Windows,Novell主。

你现在可能没有Novell,但裸露在我身边。

每个“主”服务器同步到路由器。 路由器到地层。 然后,每个成员服务器都有其主OS服务器和另一个其他主服务器的辅助服务器。

  • Linux到路由器,然后到Novell
  • Novell到路由器,然后到Windows
  • Windows到路由器,然后到Linux
  • 路由器到层,然后到核心交换机
  • 核心交换到层,然后到路由器

这个战略的最后一部分是…一切都有一个时间服务器。 如果它没有时间服务器,那么它不会被插入networking。 从烤面包机切换到电话交换机到服务器。

这是我做新工作时做的第一件事情就是花时间来映射networking并设定时间。 然后,我可以在这里和那里检查,并消除时间同步作为一个问题从这一点上。

时间在虚拟机中遍地开花。 你真的要确保NTP服务器在任何“服务器”语句中都不使用本地时钟,因为本地时钟太不可靠了。 我所做的一件事就是为VMed机器上的服务器设置“maxpoll”属性。 这迫使ntp服务检查上游时钟比configuration的默认更频繁,这有助于保持它的真实性。

 server [timeserver] maxpoll 12 

尝试几个设置,看看你需要多久才能保持时间相对可靠。 12适合我,但是每个环境都不一样。

这听起来很有趣,但我敢打赌你正在运行一个多处理器设置? 有些厂商已经知道时钟漂移问题, 咳嗽 AMD多核心/多sockets主板发生咳嗽 。 大量的中断活动 – 比如说,运行一个或两个虚拟机 – 使得漂移更糟糕。 你正在经历的漂移听起来像这样非常可疑

对于它的价值,我更喜欢AMD对Intel的产品,所以不要把它当作是对他们的抨击。

假设AD1是一个域控制器,我认为这里的问题可能与您的Hyper-V服务器从它自己的一个来宾虚拟机中设置它的时间有关。 这就是为什么当你切换到VMware时,问题就消失了:VMware服务器不需要与Windows域控制器同步时钟。