修复迁移操作(实时、冷迁移、重建)资源跟踪

https://blueprints.launchpad.net/nova/+spec/migration-fix-resource-tracking

Nova 中实例在计算主机之间迁移的操作的资源跟踪存在问题。修复需要一些重构和调整数据模型,因此在规格文档中进行了讨论。实际上是修复了几个长期存在的错误。

问题描述

实例在计算主机之间迁移的操作的资源跟踪存在问题。这些操作包括

  • 迁移/调整大小

  • 实时迁移

  • 重建/撤离

存在 2 个问题

  1. 为了使 Nova 云中的资源能够正确跟踪,每当到达计算主机的实例构建请求时,都需要进行资源声明,并持有全局进程范围的锁。未能这样做可能会导致错误的资源分配,这将不符合云管理员希望的策略,或者在某些情况下,导致实例启动失败。实时迁移和重建代码路径当前根本不使用声明。

  2. 诸如 NUMA 拓扑和 PCI 设备之类的某些资源无法简单地从 flavor 中计算出来,在迁移操作的情况下,必须在成功声明后持久化,因为它们不只是指单个统一资源的计数(如 vCPU),而是指实际的唯一设备/资源。[1]

用例

实时/冷迁移和重建,但本质上是一个错误修复。

项目优先级

由于这与资源跟踪相关,因此被视为调度器优先级工作的一部分。

提议的变更

这些更改旨在解决上述两个问题。

第一步是使撤离和实时迁移代码路径在开始工作之前进行声明(并在失败时中止声明)。这实际上是错误修复工作。它还将 [2] 提出的创建迁移条目的操作移动到声明过程中。

其次,我们将添加额外的数据来跟踪在迁移后声明的资源,我们将向 instance_extra 表添加一个 migration_context 列,并将声明的资源存储在那里,用于跟踪迁移资源。这项工作的一部分也将意味着更改资源跟踪器以在进行资源跟踪时考虑这些资源。最初它将仅包含“新的”NUMA 拓扑。

备选方案

实际上没有。

数据模型影响

在 instance_extra 表中添加一个名为 migration_context 的单列。该列默认情况下为 NULL,或者包含序列化的 MigrationContext 对象,我们也会将其作为这项工作的一部分添加。

我们将以与其他存储在 instance_extra 中的数据相同的方式在 Instance 对象上访问此数据。

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

迁移和撤离需要获取全局锁来更新跟踪的资源。这种影响性能的可能性很小。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

<ndipanov>

工作项

  • 添加 instance_extra 列和相关对象代码中的新列。

  • 将实时迁移更改为使用对 ResourceTracker.live_migrate_claim()(我们将添加)的调用来声明资源,可能作为 compute service 方法 check_can_live_migrate_destination 的一部分。将迁移对象的创建移动到此方法,或者另外翻转一个标志,让资源跟踪器知道要将其考虑用于资源计算,以防我们认为有必要在其他地方创建迁移记录。

  • 对重建执行与上述类似的操作,声明发生在 rebuild_instance compute manager 方法中。

  • 确保新添加的声明方法,持久化新计算的数据(最初是 NUMA 拓扑)。

依赖项

  • 我们依赖 [2] 来引入实时迁移和重建操作的迁移对象创建。

测试

这项工作的范围将侧重于对添加/更改的功能进行严格的单元测试。该领域是功能测试的一个良好目标,但是,与所有需要不同的执行线程来命中有趣边缘情况的类似功能一样,很难提出可重复的自动化测试。

文档影响

参考资料

历史

Liberty 提供的可选部分,旨在每次更新规格说明时描述新的设计、API 或任何数据库模式更新。有助于读者了解随着时间推移发生的变化。

修订

发布名称

描述

Liberty

引入