将 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 自动启用。
参考资料¶
vhost-user: http://www.virtualopensystems.com/en/solutions/guides/snabbswitch-qemu/
Snabb NFV(最初支持 vhost-user 的 vswitch):http://snabb.co/nfv.html
Juno 规范中的 VIF_VHOSTUSER:https://review.openstack.org/#/c/96138/
dpdkvhost 的 Juno 规范 https://review.openstack.org/#/c/95805/4/specs/juno/libvirt-ovs-use-usvhost.rst
Neutron dpdk-ovs 机制驱动程序 https://blueprints.launchpad.net/neutron/+spec/ml2-dpdk-ovs-mechanism-driver
vif 插件机制的蓝图。https://blueprints.launchpad.net/nova/+spec/libvirt-vif-driver-plugin
Hugepage 支持的蓝图 https://blueprints.launchpad.net/nova/+spec/virt-driver-large-pages