使用内核变体驱动程序实时迁移 VFIO 设备¶
https://blueprints.launchpad.net/nova/+spec/migrate-vfio-devices-using-kernel-variant-drivers
本文档描述了使用新的内核 VFIO SR-IOV 变体驱动程序接口实时迁移 SR-IOV 设备的必要步骤。
问题描述¶
使用变体驱动程序接口的设备支持的详细信息请参阅此 规范。
但是,迁移过程并未在其中涵盖。以下部分对此进行了说明,描述了 Nova 更新,这些更新对于使用 VFIO SR-IOV 变体驱动器的 SRIOV 设备,以便将其实时迁移到支持相同设备的其他主机,是必需的。
用例¶
作为操作员,如果变体驱动程序支持,我希望能够实时迁移具有 SR-IOV 设备的虚拟机。
作为操作员,我希望声明设备是可实时迁移的还是不可实时迁移的。
作为操作员,我希望定义使用可实时迁移或不可实时迁移设备的风味。
提议的变更¶
描述:¶
配置 PCI 设备规范:¶
管理员必须指定设备是否有资格迁移到另一个计算节点上的类似设备。
建议的解决方案是在 [pci]dev_spec 配置中向设备规范添加一个 live_migratable 标签。
live_migratable='yes'表示该设备可以实时迁移。live_migratable='no'表示该设备不能实时迁移。
当 PCI 资源跟踪器遇到此标签时,相应的信息将存储在各自的 PciDevice 对象中的 extra_info 字段中。
如果未指定,则默认行为等效于 live_migratable='no'。但是,此值不会持久保存在 PciDevice 对象中。
注意
PciDevice 对象版本保持不变。
此外,如果 placement 中的 pci 已启用并且 live_migratable='yes',它将记录一个新的标准特征 HW_PCI_LIVE_MIGRATABLE,在表示物理设备的资源提供程序中。虽然此特征不会被迁移流程使用,但它可以作为库存的参考,并且 placement 中的 PCI 代码路径可以扩展为自动请求此特征,如果 PCI 别名请求 live_migratable=yes 设备。
注意
由于这对于迁移不是强制性的,因此它将包含在单独的提交中。
配置 PCI 别名:¶
用户必须指定 PCI 请求,以及随之而来的风味,是否需要可实时迁移的设备。
建议的解决方案是在 [pci]alias 配置中的 PCI 别名定义中添加一个新的 live_migratable 键。
live_migratable='yes'表示用户希望能够迁移到另一个主机上类似设备的设备。live_migratable='no'明确表示用户需要不可实时迁移的设备,从而使迁移不可能。如果未指定,则默认值为
live_migratable=None,这意味着将自动选择可实时迁移或不可实时迁移的设备。但是,在这种情况下,迁移将**不会**是可能的。
实时迁移修改:¶
在 _check_can_migrate_pci() 中验证源实例是否包含可实时迁移的设备。如果没有找到可实时迁移的设备,则引发异常,指示迁移是不可能的。
注意
源主机上的虚拟机可能附加了与任何 PCI 别名无关的 PCI 设备,但它存在于 neutron direct 或 direct-physical 端口中。在这种情况下,nova 应该像今天一样执行操作,在迁移开始时分离这些端口,并在目标主机上迁移后重新附加它们。 此外,在 extra_info 中没有 live_migratable=yes 键的此类 PCI 设备不应阻止接受实时迁移。
修改 stats.py 中的 filter_pools() 函数以处理对可实时迁移设备的 PCI 请求。确保它通过添加新的过滤器来检索具有适当数量的可实时迁移设备的宿主机。
由于 VIF 字段在此上下文中未使用,我们需要声明 PCI 设备并检索目标主机的 PCI 地址。
更新 LiveMigrateData 对象,以包含源设备和目标设备地址之间的 PCI 设备映射。将添加一个新的字段 pci_dev_map_src_dst,定义为 DictOfStringsField,用于此目的。
更新 _live_migration_operation() 函数,重点关注 get_updated_guest_xml() 函数,以使用 LiveMigrateData 对象提供的数据,将源 PCI 地址映射到目标 XML 文件中的目标地址。
注意
如果 placement 中的 PCI 已启用,则实时迁移将像今天一样为 neutron 请求的 PCI 设备工作(即,旧行为有效)。
如果 placement 中的 PCI 已启用,则本文档中提出的 SR-IOV 实时迁移仍然有效(即,新功能有效)。
可选地,placement 中的 PCI 将扩展为自动请求 HW_PCI_LIVE_MIGRATABLE 特征,如果别名具有 live_migratable=”yes”。
进一步的增强是扩展 [pci]alias 规范到 placement RequestGroups 以支持禁止的特征。因此,当别名中存在 live_migratable=no 时,将请求 HW_PCI_LIVE_MIGRATABLE 特征作为禁止的特征。
对于 Mellanox ConnectX-7 等网卡,如果同时设置了 live_migrate=yes 和 physical_network=”label”,则将使用本文档中定义的迁移机制,而不是旧机制。
但是,此更改将
在单独的补丁中实现,以便首先着陆基本情况。
确保使用新代码路径正确实时迁移此类网卡。
备选方案¶
不适用
REST API 影响¶
需要修改 PCI 别名的模式定义,以允许指定可实时迁移的设备。
但是,此更改不应需要微版本更新。
数据模型影响¶
LiveMigrateDate 对象将扩展为提供目标主机的 PCI 设备信息,引入一个新的 pci_devices 字段。
安全影响¶
不适用
通知影响¶
不适用
其他最终用户影响¶
不适用
性能影响¶
如果 placement 中的 PCI 已启用,则应考虑此 错误,因为它可能会影响性能。
目前正在开发 缓解措施 以尽量减少此影响。
其他部署者影响¶
用户对以下内容的配置全权负责
设备规范和别名。
风味:如果用户需要支持多种类型的 VF,则必须为每种 VF 类型使用不同的风味。
开发人员影响¶
无
升级影响¶
所有依赖于 VFIO SR-IOV 变体驱动程序的设备的虚拟机,在它们使用包含正确更新的别名指向修订后的 PCI 设备规范的新风味之前,都无法迁移。
可以通过调整虚拟机的大小并将其风味更改为新的风味来实现。
对于网卡,另一种方法可能是分离并重新连接设备。
实现¶
负责人¶
- 主要负责人
Uggla (René Ribaud)
- 主要贡献者
Bauzas (Sylvain Bauza)
功能联络人¶
- 功能联络人
N/A
工作项¶
从 [pci]dev_spec 配置中解析 live_migratable。
添加 HW_PCI_LIVE_MIGRATABLE 特征。
检查源实例是否存在适当的可实时迁移设备。
在 filter_pools 中添加一个新的过滤器以管理可实时迁移的设备。
更新 LiveMigrateData 以包含 PCI 设备信息。
更新 get_updated_guest_xml() 函数以包含 PCI 设备信息。
依赖项¶
使用变体驱动程序接口的设备支持。 规范。
性能影响错误。
测试¶
单元测试和功能测试。
由于硬件限制,无法在 CI 中执行 Tempest 和/或白盒测试。但是,可以并行开发它们,并将其推迟到以后包含在 CI 中。
文档影响¶
将提供详细的管理员和用户文档。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Epoxy |
引入 |