支持 System z (S/390) 上 KVM/libvirt 作为虚拟机管理平台

https://blueprints.launchpad.net/nova/+spec/libvirt-kvm-systemz

在 System z 上的 Linux 中添加对 KVM/libvirt 的支持,作为 Nova 虚拟机管理平台。将使用现有的 KVM/libvirt Nova 驱动程序。为了使该平台正常运行,Nova 驱动程序中需要进行一些平台特定的更改。

超出初始 Nova 支持的附加 OpenStack 功能不属于此蓝图的范围;我们将根据需要为这些功能制定特定的附加蓝图。

将建立并维护一个用于 System z 上 KVM/libvirt 的 OpenStack 的第三方持续集成环境。

问题描述

现有的 KVM/libvirt Nova 驱动程序不能原封不动地用于 System z 上的 KVM。

目前已知的问题是

  1. 如果主机架构是 System z,则 's390-ccw-virtio' 系统 z 机器类型需要由 LibvirtDriver._get_machine_type() 返回。这将导致 libvirt domain.xml 中的 os/type/@machine 属性相应设置。

  2. System z 上 libvirt 返回的 CPU 功能不包括 model 元素。 计划将其添加到 libvirt,但在此之前,我们需要在 Nova 驱动程序中进行临时规避(如果未存在并且在 S390x 上,则从 /proc/cpuinfo 添加模型信息)。

  3. 对于 OpenStack 实例的交互式控制台和日志,如果主机架构是 System z(参见 [2]),则需要生成控制台设备(而不是串行设备)。这些控制台设备需要为 OpenStack 的交互式控制台指定目标类型 "sclp",为 OpenStack 的日志指定 "sclplm"

    背景:System z 上的 Linux 在其早期启动阶段将其消息写入一个名为“SCLP”的接口。SCLP 在 QEMU 中作为控制台设备可用。因此,它也是 libvirt 中的控制台设备,对于 OpenStack 的交互式控制台,类型为“pty”且目标类型为“sclp”,对于 OpenStack 的日志,类型为“file”且目标类型为“sclplm”(“lm”代表“行模式”)。如果使用默认目标类型(“virtio”),我们将无法捕获 Linux 在其早期启动阶段写入的消息,而我们希望提供这些消息。

    将 libvirt 中控制台设备的默认目标类型更改为“sclp”或“sclplm”(例如,取决于 console/@type 属性)将是对 libvirt 的向后不兼容的更改。

    如果跨 libvirt 平台的 Nova 驱动程序通用性很重要:控制台设备也可以用于其他平台,包括 x86,并且已经在当前 Nova 驱动程序中的一个代码路径中使用。libvirt 中的串行设备旨在表示串行端口(又名 RS-232),因此它们无论如何都不是交互式控制台和日志的理想选择。

  4. libvirt 卷驱动程序中的 FCP 支持需要调整为 System z 特定格式的设备文件路径。

在虚拟机管理程序支持矩阵中(https://wiki.openstack.org/wiki/HypervisorSupportMatrix),KVM/libvirt 在 System z 上的(新)列旨在类似于 KVM/libvirt 在 x86 上的列,除了以下功能将不受支持(除了为 KVM/libvirt 在 x86 上标记为不受支持的功能之外)

  • VNC 控制台

  • SPICE 控制台

  • 注入网络

对于块存储,将支持 Cinder。

对于网络,将支持 Neutron。Nova 网络应该可以工作,但不会是重点。

因此,https://wiki.openstack.org/wiki/HypervisorSupportMatrix/Requirements 上标记为必需的所有功能都将支持 KVM/libvirt 在 System z 上的功能。

用例

在 System z 上使用带有 KVM 的 OpenStack

项目优先级

提议的变更

更改 libvirt Nova 驱动程序中的代码以解决这些问题,具体取决于指示 CPU 架构为 arch.S390X 的主机功能。有关详细信息,请参阅 工作项目 部分。

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

无(此蓝图不需要 nova.conf 中的特定于平台的参数)

开发人员影响

无(更改不应影响其他 libvirt 平台)

实现

负责人

主要负责人

mzoeller

其他贡献者

maiera

工作项

nova/virt/libvirt/driver.py

  • 对于问题 1:在 LibvirtDriver._get_machine_type() 中,如果主机架构是 System z,则返回 System z 机器类型 ('s390-ccw-virtio')。

  • 对于问题 2:在 `` LibvirtDriver._get_host_capabilities()`` 中,如果未存在并且主机架构是 System z,则将 model 变量添加到功能中;模型基于 /proc/cpuinfo 中的机器类型。

  • 对于问题 3:在 LibvirtDriver._get_guest_config() 中,如果主机架构是 System z,则为交互式控制台和日志创建控制台设备而不是串行设备,目标类型为“sclplm”(用于日志)和“sclp”(用于交互式控制台)。

nova/virt/libvirt/config.py

  • 对于问题 3:在 LibvirtConfigGuestChar.__init__()format_dom() 中,添加支持指定目标类型。

nova/virt/libvirt/volume.py

  • 对于问题 4:libvirt 卷驱动程序中的 FCP 支持需要调整为 System z 特定格式的设备文件路径。

nova/virt/libvirt/utils.py

  • 对于问题 4:可能需要支持 FCP 支持问题的实用程序函数。

文档更改(参见 文档影响 部分)。

依赖项

  • 软件版本

    • Linux 内核:3.10 或更高版本

    • libvirt:1.0.4 或更高版本

    • qemu:1.4.0 或更高版本

  • 为 System z 上 KVM/libvirt 设置第三方 CI 环境

  • 临时规避的未来替代方案

    • libvirt 补丁,用于将模型信息添加到 CPU 功能。

测试

单元测试

  • 现有的 Nova 单元测试足以用于 Nova 的通用部分。

  • 将编写针对任何 s390 特定行为的附加 Nova 单元测试。

第三方 CI

  • IBM 将设置并运行一个用于 Systemz 上 KVM/libvirt 的第三方 CI 环境,以运行完整的 tempest 测试。

文档影响

  • config 文档中不需要更改。

  • 将根据需要对平台文档进行更改(详细信息待定)。

参考资料