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-net 和 igb_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) 内部端口代替。