本文作为指南,解释如何使用带有DPDK数据路径功能的OVS虚拟交换机,作为Mitaka发布版中的网络服务部分的功能。
基础
Open vSwitch (OVS) 在2.2版本后,开始支持Data Plane Development Kit (DPDK)数据路径,并在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安装指南, (在Branch
下拉菜单中选择合适的OVS版本)。
参考OpenStack官方文档/contributor/internals/ovs_vhostuser
,获取关于Neutron OVS agent的配置信息。
如果你打算配置多队列(multiqueue)支持,参考QEMU文档:OVS 配置中关于vhost-user的章节。
多队列的技术背景解释在相关的蓝皮书中.
另外,OpenStack自Ocata发布版之后支持vhost-user
接口的重连特性,作为bug 1604924的修复实现。从OpenStack Ocata版本开始,无需任何配置,此特性默认开启,确保使用以下的最低版本软件:
- OVS 2.6
- DPDK 16.07
- QEMU 2.7
此特性的支持还没有添加到ML2 OVN 和 ODL机制驱动(mechanism drivers)中。
使用vhost-user接口
一旦OVS和Neutron正确配置了DPDK支持,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 keys
)中设置以下内容:
$ openstack flavor set $m1.large --property hw:vif_multiqueue_enabled=true
如果在额外规范extra specs
中启用了该功能,则image
镜像元数据属性可以覆盖此设置:
$ openstack image set --property hw_vif_multiqueue_enabled=true IMAGE_NAME
需要在客户机虚拟机的内核中提供对virtio-net
多队列的支持,Linux内核是从3.8版本开始提供对此功能的支持。
检查网卡通道配置中组合通道数量的预设最大值。
成功配置OVS和flavor
应导致组合通道的最大值超过1
):
$ ethtool -l INTERFACE_NAME
要增加当前组合通道的数量,请在客户机虚拟机中运行以下命令:
$ ethtool -L INTERFACE_NAME combined QUEUES_NR
队列数量通常应与客户机实例定义的vCPUs数量匹配。为实例定义。在更新的内核版本中这是自动配置的。
已知限制
-
只有在使用Libvirt计算驱动程序和KVM/QEMU Hypervisor时支持。
-
在使用OVS-DPDK的宿主机上运行的每个实例都需要巨页支持。如果客户机中没有巨页,那么接口存在,但是不起作用。
-
使用TAP设备的服务的性能预期会降低:这些设备不支持DPDK。示例服务包括DVR、FWaas或LBaas。