Google Compute上的虚拟机可以检测迁移时间吗?

时间:2017-06-12 19:11:00

标签: virtual-machine google-compute-engine avx avx512

当VM迁移到不同的硬件时,是否可以通知在Google Compute VM上运行的应用程序?

我是应用程序(HMMER)的开发人员,它大量使用向量指令(SSE / AVX / AVX-512)。我正在开发的版本在启动时探测其硬件,以确定哪些矢量指令可用并选择最佳集合。

我们一直在考虑在Google Compute和其他云引擎上运行我们的程序,一个问题是,如果VM在运行我们的程序时从一台物理机迁移到另一台,新机器可能支持不同的指令,导致我们的程序要么崩溃要么执行得比它慢。

当VM迁移时,有没有办法通知在Google Compute VM上运行的应用程序?我发现的唯一相关信息是,您可以将VM设置为在迁移时执行关闭/重启序列,这会杀死当前正在执行的任何程序,但至少会让用户知道他们需要重新启动程序。

2 个答案:

答案 0 :(得分:4)

根据Live Migration文档:

  

实时迁移不会更改VM的任何属性或属性   的本身即可。实时迁移过程只是从中传输正在运行的VM   一台主机到另一台。保留所有VM属性和属性   不变,包括内部和外部IP地址,   实例元数据,块存储数据和卷,操作系统和应用程序   状态,网络设置,网络连接等。

Google确实提供了一些控件来设置instance availability policies,这也可以让您控制实时迁移的各个方面。在这里,他们还提到了您可以查找的内容,以确定何时进行实时迁移。

  

Live migrate

     

默认情况下,标准实例设置为实时迁移,即Google   Compute Engine会自动将您的实例迁移出来   基础架构维护事件,您的实例仍在运行   在迁移过程中。您的实例可能会经历短暂的一段时间   性能下降,但通常大多数情况下不应该   注意任何差异。这非常适合需要的实例   持续正常运行时间,可以忍受短时间的减少   性能

     

当Google Compute Engine迁移您的实例时,它会报告一个系统   发布到区域操作列表的事件。你可以复习   此事件通过执行gcloud计算操作列表--Zones ZONE   请求或查看Google Cloud中的操作列表   平台控制台,或通过API请求。该事件将出现   使用以下文字:

compute.instances.migrateOnHostMaintenance

此外,您可以在维护事件即将发生时直接在VM上进行检测。

  

Getting Live Migration Notices

     

元数据服务器提供有关实例的信息   scheduling options and settings,通过安排/   目录和维护事件属性。你可以使用这些   用于了解虚拟机实例的调度的属性   选项,并使用此元数据在维护事件时通知您   即将通过maintenance-event属性发生。通过   默认情况下,所有虚拟机实例都设置为实时迁移所以   元数据服务器将在VM之前收到维护事件通知   实例是实时迁移的。如果您选择拥有VM实例   在维护期间终止,然后计算引擎将自动终止   如果是,则终止并可选地重新启动VM实例   automaticRestart属性已设置。要了解有关维护的更多信息   事件期间的事件和实例行为,请阅读scheduling options and settings

     

您可以通过查询来了解维护事件何时发生   maintenance-event定期定义属性。这个的价值   属性将在维护事件开始前60秒更改,   为您的应用程序代码提供一种触发您想要的任何任务的方法   在维护事件之前执行,例如备份数据或   更新日志。计算引擎还提供sample Python script   演示如何检查维护事件通知。

     

您可以在等待时使用maintenance-event属性   更新功能,以便在a时通知您的脚本和应用程序   维护事件即将开始和结束。这可以让你自动化   您可能希望在事件之前或之后运行的任何操作。该   以下Python示例提供了一个如何实现的示例   这两个特征在一起。

您也可以选择终止并选择重启您的实例。

  

Terminate and (optionally) restart

     

如果您不希望实例迁移,可以选择   终止并可选择重启您的实例。有了这个选项,   Google Compute Engine会发出关闭您的实例的信号,等待   您的实例可以在短时间内完全关闭,   终止实例,并从维护中重新启动它   事件。此选项非常适合需要不变的实例,   最高性能,您的整体应用程序可以处理   实例失败或重启。

请查看Setting availability policies部分,了解有关如何配置此内容的更多详细信息。

如果您使用具有GPU或可抢占实例的实例,请注意不支持实时迁移:

  

Live migration and GPUs

     

附加了GPU的实例无法进行实时迁移。必须设置它们   终止并可选择重启。计算引擎提供60分钟   连接GPU的VM实例终止前的通知。至   了解有关这些维护事件通知的更多信息,请阅读“获取”   移民通知。

     

要了解有关使用GPU处理主机维护的更多信息,请阅读   关于GPU文档的Handling host maintenance

     

Live migration for preemptible instances

     

您无法将preemptible instances配置为实时迁移。该   可抢占实例的维护行为始终设置为   默认情况下为TERMINATE,您无法更改此选项。也是   无法为preemptible设置automatic restart选项   实例

正如Ramesh所提到的,您可以指定最小CPU平台,以确保您只迁移到至少具有您指定的最小CPU平台的实例。 At a high level it looks like

  

总之,当您指定最小CPU平台时:

     
      
  • Compute Engine始终使用最小的CPU平台。
  •   
  • 如果最小CPU平台不可用或最小CPU平台早于区域默认值,并且较新的CPU平台是   Compute Engine以相同的价格提供,使用更新的平台。
  •   
  • 如果指定区域中没有最小CPU平台,并且没有额外成本的新平台可用,则   服务器返回400错误,指示CPU不可用。
  •   

答案 1 :(得分:3)

我们确保您的VM实例永远不会在物理机之间实时迁移,从而导致程序以您描述的方式崩溃。

但是,对于您的用例,您可能希望指定最低CPU平台版本。您可以使用它来确保例如您的实例具有新的Skylake AVX指令。有关详细信息,请参阅Specifying the Minimum CPU Platform上的文档。