【问题标题】:VirtualBox - Synchronisation problemsVirtualBox - 同步问题
【发布时间】:2011-07-15 13:48:37
【问题描述】:

我在 Windows 7 主机上运行 VirtualBox,运行 Ubuntu 服务器和 XP-SP3 客户端。

我经常注意到,与主机时间相比,来宾计算机上的时钟严格迟到。 当我得到各种性能测试的奇怪基准测试结果时,我第一次注意到它,并假设在同一台机器上与自己进行比较测试是可以的——事实并非如此。

当涉及客户端-服务器测试时,情况会变得更糟。如果所有客人都保持相同的延迟可能是可以接受的,但我遇到了 XP 客户端上的时间在服务器上更高级的情况,以及 Ubuntu 服务器上的时间比 xp 上更高级的情况客户。

从某种意义上说,我可以忍受 - 因为它提供了有趣的测试用例 - 但有时它会达到 20 分钟的差异。

我尝试修改配置无济于事 - 但我应该遗漏一些东西......

有人吗? 提前致谢。

【问题讨论】:

  • 您是否尝试过将机器配置为使用网络时间服务器?这可能是让所有时间彼此保持同步的最简单方法。
  • 是 VBox 设置,还是 OS 设置?
  • 这是一个操作系统设置。 Windows 至少从 XP 开始就支持网络时间服务器;通过单击任务栏时钟找到它。我不了解 Ubuntu,但我认为类似的东西要么是内置的,要么是免费提供的。
  • 如果没有更好的方式使用 VBox 的配置——因为它们都运行在同一台主机上,为什么要涉及网络——这就是我必须做的。但这在基准测试场景中对我没有帮助 - 只要确保 cp 每隔几分钟就正确...... :(
  • 不同离散机器上的时钟也容易漂移。也许在虚拟机中运行会加剧这个问题,但它肯定没有彻底造成它。首先,您真的不应该比较从跨虚拟机的基准测试中获得的单个 time 值。我不确定您要完成什么,但这对我来说毫无意义。只需运行相对于单个主机的基准测试(这使得 机器的时间差异不是一个因素),然后比较汇总结果。

标签: windows-7 ubuntu windows-xp virtualbox


【解决方案1】:

首先确保 Windows 不限于仅使用 HPET,因为这可能会阻止主机和来宾获取准确的 RTC 源:

打开管理员 cmd.exe 并输入bcdedit /enum,然后确保useplatformclock 不存在,如果是输入 bcdedit /deletevalue useplatformclock 将其删除,然后重新启动 Windows。

我已在主机上启用此功能以修复旧的驱动程序问题(有人还说它是 no reliable proofs 性能的“最佳”),起初没有明显的问题,但后来我发现 RTC 漂移了很多很多(最多每小时 0.5 秒...)。

Windows 中还存在其他固有问题(可能已在 Windows 8 中修复),其中计时器精度是按操作系统设置的,而它可以由任何需要更高精度的应用程序更改,然后再设置回更低的精度。这些更改will also skew the RTC over time。所以最好的办法(根据我自己的经验)是:

  1. 完全禁用主机->访客时钟同步:

VBoxManage setextradata "VM name" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

(然后您需要关闭虚拟机并重新启动它才能使此更改生效)

  1. 在使用标准外部时间源的客户机上安装 NTP 包(就像任何独立计算机一样)。

  2. 在Windows主机上安装proper NTP port(我个人用Heiko Gerstung's

  3. 此外,您应该确保添加的 virtualbox 访客是 up to date

【讨论】:

    【解决方案2】:

    如果您已经安装了 virtualbox 附加功能(并且您可能已经安装了),那么来宾主机上有一个服务可以同步时间。

    如果主人和客人时钟之间的差异小于 20 分钟,此服务每 10 秒校正一次时钟漂移,如果差异大于 20 分钟,它只会将客人时钟重置为主人时间。因此,您永远不会发现一台机器不同步超过 20 分钟。

    可以使用 --timesync-set-threshold guest 参数更改 20 分钟阈值。例如,您可以将其设置为 1000 毫秒,因此您永远不应该找到相差超过一秒的机器。

    您可以使用以下命令从主机配置来宾 --timesync-set-threshold:

    VBoxManage guestproperty set <your-vm-name> "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold" 1000
    

    您应该重新启动您的访客添加服务或您的访客机器以使其生效。

    进一步阅读:

    【讨论】:

    • 太棒了!!! - 正是我想要的!将 timesync-set-threshold 设置为 50ms 正是我对基准测试所需的精度。我再次运行它们 - 这次结果非常准确:)
    • 我找到了这些参数,但并不是说我必须在guest中重新启动vboxadd-service才能生效。谢谢。
    • 我强烈建议您不要依赖客人作为时间来源。可以确认非常奇怪的系统时间行为(win10作为guest和host,guest上安装了guest工具)。行为看起来每隔一段时间,客户时钟被设置为过去几分钟 - 然后系统时钟运行得稍微快,直到它赶上“实时”时间 - 但会出现过冲。整个表演周期性地重复。
    【解决方案3】:

    一个通用的解决方案是:

    1. 在访客上托管 NTP 服务器
    2. 将主机配置为每隔几分钟与 NTP 同步一次

    关于 VirtualBox 的时钟偏差,某些配置存在此问题。对于 Windows 7 来宾,在某些情况下禁用 IO APIC 会有所帮助。

    详情:http://forums.virtualbox.org/viewtopic.php?f=8&t=21480

    【讨论】:

    • 感谢您的回答。我试了一段时间。它对一般流程有部分帮助,但对于基准测试、性能计数器和依赖于一致服务器时间流的流程来说还不够好:(
    • 我强烈建议您不要依赖客人作为时间来源。可以确认非常奇怪的系统时间行为(win10作为guest和host,guest工具安装在guest上)。在专用硬件上运行您的时间服务器,而不是在虚拟机中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2015-05-03
    • 2012-11-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多