将 VIF_VHOSTUSER vif 类型添加到 libvirt 驱动

https://blueprints.launchpad.net/nova/+spec/libvirt-vif-vhost-user

我们建议在 libvirt 驱动中添加一个新的 VIF 类型,以支持 QEMU 中的新的 vhost-user 接口。vhost-user 是 QEMU 的一项新功能,支持在客户机和用户空间 vswitch 之间高效的 Virtio-net I/O。vhost-user 是 /dev/vhost-net 的用户空间等效物,它基于 Unix socket 进行通信,而不是内核设备文件。

问题描述

QEMU 有一种新型网络接口,vhost-user,我们希望将其提供给 Neutron 驱动程序。这将支持为基于 OpenStack 的应用程序部署高吞吐量的用户空间 vswitch。可以使用 vhost-user 接口的 vSwitch 有两种类型:通用 vhost-user vSwitch 和基于 ovs 的 vSwitch,应该支持这两种类型。

用例

此更改将允许使用 vhost-user 接口运行用户空间 vSwitch。通用 vhost-user vSwitch 和基于 OVS 的 vSwitch 都将得到支持。

项目优先级

提议的变更

我们建议在 Nova 中添加 VIF_VHOSTUSER,用于基于 vhost-user 创建网络接口。该 VIF 类型将由 Neutron 驱动程序通过使用 portbindings 扩展并设置 vif_type 为 VIF_VHOSTUSER 来启用。为了支持通用和基于 ovs 的 vSwitch,将在 vif_details 中传递其他信息。对于基于 ovs 的 vSwitch,如果 vif_details 中将 ‘vhost_user_ovs_plug’ 设置为 True,则 plug/unplug 方法将创建/删除 ovs 端口。

VIF_VHOSTUSER 驱动程序将允许 Neutron 机制驱动程序指定 qemu 应该以服务器模式还是客户端模式工作。机制驱动程序可以在 vif_details 中传递 ‘vhost_user_mode’ 来指定模式。socket 的名称将与 Neutron 端口的 ID 相同。对于基于 ovs 的 vSwitch,socket 的名称将与 ovs 端口的名称相同。

备选方案

在 Juno 周期中,有两项计划支持 Nova 中的用户空间 vhost user。一项基于 Qemu 中的 vhost-user 接口,另一项基于 DPDK 实现。由于 DPDK 正在迁移到仅支持 vhost-user,因此只需要一个驱动程序。

或者,可以使用 vif libvirt 驱动程序的插件机制来支持 libvirt 驱动程序中的 vhost-user。此处提出了这种机制

https://blueprints.launchpad.net/nova/+spec/libvirt-vif-driver-plugin

数据模型影响

无。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

使用 VIF_VHOSTUSER 对 Openstack 性能没有影响。使用 vhost-user 的用户空间 vSwitch 将提高客户机网络性能。

其他部署者影响

VIF_VHOSTUSER 不需要部署者启用。如果计算主机上的代理是合适的选择,Neutron 驱动程序将通过端口绑定自动启用 VIF_VHOSTUSER。

VIF_VHOSTUSER 需要一个带有 vhost-user 支持的 QEMU 版本,该版本目前已上游并将在 QEMU 2.1 中发布。

VIF_VHOSTUSER 还需要一个带有 vhost-user 支持的 Libvirt 版本。

开发人员影响

无。

实现

负责人

主要负责人

Przemyslaw Czesnowicz <pczesno>

工作项

  • 向 Nova 添加 VIF_VHOSTUSER 支持。

依赖项

正在为 Neutron 提出一个 ml2 dpdk ovs 驱动程序。此功能不直接依赖于它。

此功能依赖于 bp/virt-driver-large-pages。

测试

VIF_VHOSTUSER 将由 DPDK Ovs 机制驱动程序的第三方 CI 进行测试。

文档影响

预计 Nova 不会有任何文档更改。VIF_VHOSTUSER 将在适当的情况下由 Neutron 自动启用。

参考资料