Open vSwitch 与 DPDK 数据平面

此页面作为 Mitaka 版本中 Networking 服务中可用的 OVS 与 DPDK 数据平面功能的指南。

基础知识

Open vSwitch (OVS) 自 OVS 2.2 起提供对数据平面开发工具包 (DPDK) 数据平面的支持,自 OVS 2.4 起提供对 DPDK 支持的 vhost-user 虚拟接口的支持。DPDK 数据平面比标准的内核 OVS 数据平面提供更低的延迟和更高的性能,而 DPDK 支持的 vhost-user 接口可以将虚拟机连接到此数据平面。有关 DPDK 的更多信息,请参阅 DPDK 网站。

OVS 与 DPDK,或 OVS-DPDK,可用于在 OpenStack 计算节点上的虚拟机之间提供高性能网络。

先决条件

在 OVS 中使用 DPDK 需要以下最低软件版本

  • OVS 2.4

  • DPDK 2.0

  • QEMU 2.1.0

  • libvirt 1.2.13

如果使用以下较新版本,则支持 vhost-user 多队列,该队列支持与 virtio-netigb_uio 配合使用

  • OVS 2.5

  • DPDK 2.2

  • QEMU 2.5

  • libvirt 1.2.17

在两种情况下,请为每个节点安装并配置带有 DPDK 支持的 Open vSwitch。有关更多信息,请参阅 OVS-DPDK 安装指南(在 分支 下拉菜单中选择合适的 OVS 版本)。

Neutron Open vSwitch vhost-user 支持 用于配置 neutron OVS 代理。

如果您希望配置多队列,请参阅 QEMU 文档中的 vhost-user 上的 OVS 配置章节

多队列的技术背景在相应的 蓝图 中进行了说明。

此外,从 Ocata 版本开始,OpenStack 支持 vhost-user 重连功能,作为修复 bug 1604924 的实现。从 OpenStack Ocata 版本开始,此功能在以下最低软件版本的情况下使用,无需任何配置

  • OVS 2.6

  • DPDK 16.07

  • QEMU 2.7

ML2 OVN 机制驱动程序目前不支持此功能。

使用 vhost-user 接口

配置好 DPDK 支持的 OVS 和 neutron 后,vhost-user 接口对虚拟机来说是完全透明的(除非在下面描述的多队列配置的情况下)。但是,虚拟机必须请求巨页。这可以通过 flavor 实现。例如

$ openstack flavor set m1.large --property hw:mem_page_size=large

有关 hw:mem_page_size 语法的更多信息,请参阅 Flavors 指南。

注意

vhost-user 需要基于文件描述符的共享内存。目前,请求此内存的唯一方法是通过请求大页。这就是为什么在具有 OVS-DPDK 的主机上启动的虚拟机必须请求大页的原因。可以使用聚合 flavor 亲和性过滤器将支持大页的 flavor 与支持 OVS-DPDK 的主机关联起来。

像配置传统接口一样创建并添加 vhost-user 网络接口到虚拟机。这些接口可以使用内核 virtio-net 驱动程序或虚拟机中的 DPDK 兼容驱动程序

$ openstack server create --nic net-id=$net_id ... testserver

使用 vhost-user 多队列

要使用此功能,应在 flavor 额外规格(flavor 键)中设置以下内容

$ openstack flavor set $m1.large --property hw:vif_multiqueue_enabled=true

如果该功能在额外规格中启用,则此设置可以被镜像元数据属性覆盖

$ openstack image set --property hw_vif_multiqueue_enabled=true IMAGE_NAME

从 Linux 内核 3.8 开始,支持 virtio-net 多队列需要在虚拟机内核中存在。

检查通道配置中组合通道的最大预设值。成功完成 OVS 和 flavor 配置后,最大值应大于“1”)

$ ethtool -l INTERFACE_NAME

要增加当前组合通道的数量,请在虚拟机中运行以下命令

$ ethtool -L INTERFACE_NAME combined QUEUES_NR

队列的数量通常应与为虚拟机定义的 vCPU 数量相匹配。在较新的内核版本中,此配置会自动完成。

已知限制

  • 此功能仅在使用 libvirt 计算驱动程序和 KVM/QEMU 超visor 时才受支持。

  • 在具有 OVS-DPDK 的主机上运行的每个虚拟机都需要巨页。如果虚拟机中不存在巨页,则该接口将出现但无法正常工作。

  • 预计使用 tap 设备的服务的性能会下降:这些设备不支持 DPDK。示例服务包括 DVR 和 FWaaS。

  • ovs_use_veth 选项设置为 True 时,从 DHCP 命名空间发送的任何流量都将具有不正确的 TCP 校验和。这意味着如果 enable_isolated_metadata 设置为 True 并且可以通过 DHCP 命名空间访问元数据服务,则由于校验和无效,元数据响应将被丢弃。在这种情况下,应将 ovs_use_veth 切换到 False 并使用 Open vSwitch (OVS) 内部端口代替。