5

当虚拟机迁移到不同的硬件时,是否可以通知在谷歌计算虚拟机上运行的应用程序?

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

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

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

4

2 回答 2

4

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

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

于 2017-06-12T20:05:21.977 回答
4

根据实时迁移文档:

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

Google 确实提供了很少的控件来设置实例可用性策略,这也让您可以控制实时迁移的各个方面。在这里,他们还提到了您可以寻找什么来确定何时进行实时迁移。

实时迁移

默认情况下,标准实例设置为实时迁移,Google Compute Engine 会自动将您的实例从基础设施维护事件中迁移出去,并且您的实例在迁移期间保持运行。您的实例可能会在短时间内出现性能下降,但通常大多数实例不会注意到任何差异。这对于需要持续正常运行时间并且可以容忍短期性能下降的实例来说是理想的选择。

当 Google Compute Engine 迁移您的实例时,它会报告一个发布到区域操作列表的系统事件。您可以通过执行 gcloud compute operations list --zones ZONE 请求或查看 Google Cloud Platform Console 中的操作列表或通过 API 请求来查看此事件。该事件将显示以下文本:

compute.instances.migrateOnHostMaintenance

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

获取实时迁移通知

元数据服务器通过调度/目录和维护事件属性提供有关实例 调度选项和设置的信息。您可以使用这些属性来了解虚拟机实例的调度选项,并使用此元数据通过maintenance-event属性。默认情况下,所有虚拟机实例都设置为实时迁移,因此元数据服务器将在虚拟机实例实时迁移之前收到维护事件通知。如果您选择在维护期间终止您的 VM 实例,那么如果设置了 automaticRestart 属性,Compute Engine 将自动终止并选择性地重新启动您的 VM 实例。要了解有关维护事件和事件期间实例行为的更多信息,请阅读计划选项和设置

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

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

您还可以选择终止并选择性地重新启动您的实例。

终止并(可选)重新启动

如果您不希望您的实例实时迁移,您可以选择终止并选择性地重新启动您的实例。使用此选项,Google Compute Engine 将向您的实例发出关闭信号,等待一小段时间让您的实例彻底关闭,终止该实例,然后重新启动它以摆脱维护事件。此选项非常适合需要恒定、最高性能的实例,并且您的整个应用程序旨在处理实例故障或重启。

查看设置可用性策略部分,了解有关如何配置的更多详细信息。

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

实时迁移和 GPU

连接了 GPU 的实例无法实时迁移。它们必须设置为终止并可选择重新启动。Compute Engine 会在连接了 GPU 的 VM 实例终止前提前 60 分钟发出通知。要了解有关这些维护事件通知的更多信息,请阅读获取实时迁移通知。

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

抢占式实例的实时迁移

您不能将抢占式实例配置为实时迁移。默认情况下,抢占式实例的维护行为始终设置为 TERMINATE,您无法更改此选项。也无法为抢占式实例设置自动重启选项。

正如 Ramesh 提到的,您可以指定最低 CPU 平台,以确保您只迁移到至少具有您指定的最低 CPU 平台的实例。在高层次上,它看起来像

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

  • Compute Engine 始终使用可用的最低 CPU 平台。
  • 如果最低 CPU 平台不可用或最低 CPU 平台早于区域默认值,并且以相同的价格提供更新的 CPU 平台,则 Compute Engine 使用更新的平台。
  • 如果指定区域中没有最低 CPU 平台可用,并且没有额外费用的较新平台可用,则服务器返回 400 错误指示 CPU 不可用。
于 2017-06-13T02:47:18.137 回答