当VM迁移到不同的硬件时,是否可以通知在Google Compute VM上运行的应用程序?
我是应用程序(HMMER)的开发人员,它大量使用向量指令(SSE / AVX / AVX-512)。我正在开发的版本在启动时探测其硬件,以确定哪些矢量指令可用并选择最佳集合。
我们一直在考虑在Google Compute和其他云引擎上运行我们的程序,一个问题是,如果VM在运行我们的程序时从一台物理机迁移到另一台,新机器可能支持不同的指令,导致我们的程序要么崩溃要么执行得比它慢。
当VM迁移时,有没有办法通知在Google Compute VM上运行的应用程序?我发现的唯一相关信息是,您可以将VM设置为在迁移时执行关闭/重启序列,这会杀死当前正在执行的任何程序,但至少会让用户知道他们需要重新启动程序。
答案 0 :(得分:4)
根据Live Migration文档:
实时迁移不会更改VM的任何属性或属性 的本身即可。实时迁移过程只是从中传输正在运行的VM 一台主机到另一台。保留所有VM属性和属性 不变,包括内部和外部IP地址, 实例元数据,块存储数据和卷,操作系统和应用程序 状态,网络设置,网络连接等。
Google确实提供了一些控件来设置instance availability policies,这也可以让您控制实时迁移的各个方面。在这里,他们还提到了您可以查找的内容,以确定何时进行实时迁移。
默认情况下,标准实例设置为实时迁移,即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或可抢占实例的实例,请注意不支持实时迁移:
附加了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上的文档。