支持 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。
目前已知的问题是
如果主机架构是 System z,则
's390-ccw-virtio'系统 z 机器类型需要由LibvirtDriver._get_machine_type()返回。这将导致 libvirt domain.xml 中的os/type/@machine属性相应设置。System z 上 libvirt 返回的 CPU 功能不包括
model元素。 计划将其添加到 libvirt,但在此之前,我们需要在 Nova 驱动程序中进行临时规避(如果未存在并且在 S390x 上,则从 /proc/cpuinfo 添加模型信息)。对于 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),因此它们无论如何都不是交互式控制台和日志的理想选择。
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 文档中不需要更改。
将根据需要对平台文档进行更改(详细信息待定)。
参考资料¶
[1] libvirt:Domain XML 格式,设备地址,http://libvirt.org/formatdomain.html#elementsAddress
[2] libvirt:Domain XML 格式,控制台,http://libvirt.org/formatdomain.html#elementCharConsole
[3] System z 上的 Linux 设备驱动程序手册,http://public.dhe.ibm.com/software/dw/linux390/docu/l316dd25.pdf
[4] System z 上的 Linux,http://www.ibm.com/developerworks/linux/linux390/