即使使用NTP,Hyper-V机器也会漂移时间


10

解决 的问题是该机器上的Hyper-V。我删除了Hyper-V,安装了VMware Server,并运行了相同的VM。时间同步问题消失了(一天后相差小于100毫秒)。


我的设置是这样的:

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具有良好的同步-带状图显示不到100ms的差异。

S2像疯了似的漂移。这是针对AD1的一些图表:

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

在20秒内,它漂移了一秒钟。如果我手动将其重置为1秒以内,则几分钟后它会向后漂移约2秒。一夜之间,它从〜2s变为〜5s。S2中的Linux VM与AD1完美同步。

这是配置:

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)已关闭集成并同步到time.nist.gov。AD1很好。是物理机S1无法同步到AD1并随处飘移。所有其他物理服务器都可以同步到AD1。

更新 因此,这似乎是运行VM的问题。虚拟机关闭时,时钟缓慢滑动。打开后,它立即开始丢失秒数。我关闭了虚拟机,只使用了一半的资源,目前看来,它已经有所缓解。谢谢!

Answers:


5

根据您的描述,听起来服务器S2的主板上的RTC(http://en.wikipedia.org/wiki/Real-time_clock)确实存在硬件问题。

Hyper-V guest虚拟机最初是从主机(HYV1)获取时钟的,但是当您禁用Hyper-V时间同步时,它将从NIST获取所有其他时钟更新(工作正常)。您的Linux VM未与Hyper-V集成,因此可以从域中抽出时间来,这也可以正常工作。您的其他物理机运行良好,它只是一台物理服务器,每20秒会有1秒的漂移(这是一个疯狂的漂移)。时间漂移的速度比网络时间同步可以将时钟重置为正确的时间快得多(如果我记得正确的话,该时间每8小时进行一次)。

如果要排除Hyper-V导致S2错误的原因,请创建“无Hypervisor”启动项,在没有Hyper-V的情况下重新启动,然后查看时间是否仍然存在。此处的说明:http : //blogs.msdn.com/virtual_pc_guy/archive/2008/04/14/creating-a-no-hypervisor-boot-entry.aspx

-西恩


好的,我会尝试的。
MichaelGG,

OK,我关闭了VM(没有禁用HyperV)。时钟现在好多了。大约3分钟后,它只损失了大约100ms。它仍然在亏损,但比以前少了很多。一旦打开虚拟机,它就会发疯。在几秒钟内将其固定1秒钟。可能是因为VM没有集成服务?
MichaelGG,

迈克尔-这似乎不在这里,但是您是否在S2的父分区上运行任何类型的多媒体应用程序?-Sean
肖恩·厄普

不。问题最终是Hyper-V。取消Hyper-V,安装在Vmware Server上,运行相同的VM-没问题。时间同步<100ms。
MichaelGG

3

问题在于各种时钟源(tsc,jiffies,acpi_pm,cmos_trc)的虚拟实现。我发现解决HyperV问题的最好方法是关闭来宾计算机提供的HyperV提供的时钟同步,然后使用adjtimex调整时间。在Ubuntu来宾OS上执行此操作...

# 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

这将对您的时钟进行最小二乘分析,并找到正确的调整

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

这将重新同步您计算机上的时间,然后ntp应该能够使其保持同步,因为它不再漂移太多了。


2

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

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

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

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

希望这会有所帮助。


那正是我所做的。VM(AD1)已关闭集成,并同步到time.nist.gov。AD1很好。是物理计算机S1与AD1失去同步。
MichaelGG

像这样的小伙子说-将MaxAllowedPhaseOffset设置为1。jaylee.org/post/2009/10/14/…–
gbjbaanb

2

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

我按操作系统看服务器。我创建了Linux,Router,Windows,Novell主服务器。

您可能现在没有Novell,但请忍受我。

每个“主”服务器都同步到路由器。路由器到层。然后,每个成员服务器都有其主操作系统服务器和其他主服务器之一的辅助服务器。

  • Linux到路由器,然后到Novell
  • Novell先到路由器,再到Windows
  • Windows到路由器,然后到Linux
  • 路由到Stratum,然后到核心交换机
  • 核心切换到Stratum,然后切换到路由器

该策略的最后一部分是...所有东西都有时间服务器。如果没有时间服务器,则不会将其插入网络。从烤面包机切换到电话PBX到服务器。

当我找到一份新工作时,这是我要做的第一件事就是花时间映射网络并设置时间。然后,我可以在这里和那里进行检查,并从那时起消除时间同步问题。


嗯,我会尝试添加一个手动中学,看看是否有帮助。但是其他一切都正常工作-仅此一台物理机器在漂移。
MichaelGG

这是什么机器?戴尔/惠普/ IBM-其他?我有只需要经常调整的戴尔包装盒。
Thomas Denton

装有Pentium D920的Dell PowerEdge 850(或附近的某些设备-2.8GHz,Intel VT。)
MichaelGG,2009年

PE 350的漂移非常不好。但是那是几年前的事。我没有使用过850,但是与850相比便宜的SC1435服务器可以正常工作。也许看看环境,服务器是否在振动,CMOS电池松动或类似的东西?
托马斯·丹顿

1

时间在VM中随处可见。您确实要确保NTP服务器在任何“ server”语句中均未使用本地时钟,因为本地时钟过于可靠。我要做的一件事是为VM机上的服务器设置“ maxpoll”属性。这迫使ntp服务检查其上游时钟的频率要比配置的默认时钟检查频率高得多,这有助于使其保持真实状态。

server [timeserver] maxpoll 12

尝试一些设置,以了解保持时间相对可靠所需的时间。12个对我有用,但是每个环境都不同。


我尝试使用大约2或4(16秒)的轮询时间。仍然疯狂地漂移。
MichaelGG,

1

这听起来可能很有趣,但是我敢打赌您正在运行多处理器设置? 某些制造商 咳嗽的已知的时钟漂移问题是 AMD 咳嗽发生在多核/多插槽主板上。大量的中断活动(例如,运行一两个虚拟机)会使漂移变得更糟。您正在经历的漂移听起来非常可疑

就其价值而言,我确实更喜欢AMD的产品而不是Intel的产品,因此不要以此为a。


该机器正在运行奔腾D930,因此它是多核设置。我将禁用虚拟机,然后看看会发生什么。
MichaelGG

2
杀死VM上的内核有助于主机上的同步。
MichaelGG,

1

假设AD1是域控制器,我认为这里的问题可能与您的Hyper-V服务器从其自己的来宾VM设置其时间有关。这就是为什么当您切换到VMware时问题就消失了的原因:VMware服务器不会感到不得不将其时钟与Windows域控制器同步。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.