QNX Hypervisor —— 时间

运行在QNX Hypervisor上的客户机的时间,总是滞后于宿主机上的时间,但是虚拟机管理器会采取纠正措施来最小化这种偏差。

漂移

对于虚拟机管理器系统中的客户机来说,时间是虚拟化的。也就是说,托管客户机的VM (qvm进程实例)提供了虚拟计时器滴答(timer tick),并虚拟出客户机希望在其环境中看到的硬件计时器。因此,虚拟机管理器宿主机控制着其客户机看到的时钟。在客户机退出的期间,虚拟机管理器宿主机对客户机的时钟的操作方式,对客户机有着显著影响,特别是对于客户机的时间预算。当客户机退出后,虚拟机管理器宿主机可以让客户机时钟维持运转,也可以停止客户机时钟。而这两种选择都不理想。

客户机时钟在退出期间维持运转

如果虚拟机管理器允许客户机的时钟运转,使客户机时钟与宿主机时钟保持同步,那么两者的差别只在于偏移量,也即从宿主机开始计算时间到客户机开始计算时间之间所经过的时间。(请参阅下面的“偏移量”)

然而,允许时钟运转会扭曲客户机的时间计算,因为从客户机退出到重新进入期间的时间,被追加到客户机中请求退出的那个任务所花费的时间中。例如,任务可能会耗尽时间预算并被抢占,除了退出之外实际上也做不了什么。

客户机时钟在退出期间停止

当客户机退出时停止客户机的时钟,解决了客户机退出期间偏离时间预算的问题。当客户机退出时,客户机时钟将停止,直到客户机重新进入,并且客户机只记录实际运行在任务时间预算的时间。然而,随着每次客户机退出时停止客户机的时钟,客户机的时钟将越来越落后于宿主机的时钟。这种滞后被称为漂移。

随着每次客户机退出,漂移逐步增加。如果允许漂移未经纠正地增加,客户机很快就会遇到可能阻止其按要求行事的情况:客户机可能会错过计时器中断,一天中的时间将越来越不准确,等等。

跳过

为了让客户机合理地控制其时间预算,QNX Hypervisor在每次客户机退出时停止客户机的时钟,并在客户机进入时重新启动它(请参阅“体系结构”中的Lahav行)。然而,为了减轻漂移的影响并避免未纠正的漂移最终导致的问题,QNX Hypervisor会周期性地让客户机中的时间向前跳过;也就是说,它将当前漂移时间的一部分,追加到客户机的时间中。

虚拟机管理器只跳过客户机和主机之间延迟的一部分,因为向前跳过客户机中的时间,会扭曲客户机的时间计算。

例如,考虑一个比主机慢10微秒的客户机。这个客户现在正在运行foo。如果虚拟机管理器跳过了整个10微秒的客户机时间,而这10微秒(foo没有使用)仍然会被填充到foo,因为从foo开始到结束的时间间隔包括跳过的10微秒。因此,虚拟机管理器只跳过客户时间漂移的一部分,以便在客户机的活动中更平均地分配跳过时间。

如果您在您的客户机身上实施了任何类型的时间预算,您应该考虑漂移和纠正跳过对这些预算的影响。特别要记住:

  • 只有当客户机退出了所有的vCPU时,才可以跳过;这意味着跳过必须以不规则的间隔发生。

  • 虚拟机管理器主机会在必须这样做的每一个机会上跳过客户机的时间。

  • 虚拟机管理器主机只跳过当前漂移的一部分。

  • 总会有一些漂移,而这种漂移会随着客户机的生命周期而变化。

有关如何检索客户当前时间漂移的信息,请参阅“监视、故障排除和调优”一章中的“查找当前时间漂移”。

偏移

客户机只能在宿主机启动之后才能启动,因此客户机开始计算时间的时间必然比它的宿主机要晚(在虚拟机管理器系统之外测量)。这种差异是一种偏移,它与漂移的联系只是因为它与时间相关。

原文链接:

http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.hypervisor.user/topic/virt/time.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值