订阅移动开发RSS CSDN首页> 移动开发

在虚拟机间 NFV 应用上使用采用 DPDK 的 Open vSwitch*

发表于2016-01-12 14:10| 次阅读| 来源CSDN| 0 条评论| 作者csdn

摘要:数据平面开发套件 (DPDK) 可提供高性能的数据包处理库和用户空间驱动程序。 自 Open vSwitch (OVS) 2.4 版 (http://openvswitch.org/releases/NEWS-2.4.0)起,我们将可在 OVS 中使用 DPDK 优化的 vHost 路径。 OVS 自 2.2 版起开始提供 DPDK 支持。

概述

数据平面开发套件 (DPDK) 可提供高性能的数据包处理库和用户空间驱动程序。 自 Open vSwitch (OVS) 2.4 版 (http://openvswitch.org/releases/NEWS-2.4.0)起,我们将可在 OVS 中使用 DPDK 优化的 vHost 路径。 OVS 自 2.2 版起开始提供 DPDK 支持。

将 DPDK 与 OVS 结合使用可为我们带来诸多性能优势。 与其他基于 DPDK 的应用相同,我们可以在 OVS 中看到网络包吞吐量显著提升,延迟显著降低。

此外,DPDK 包处理库还对 OVS 内的多个性能热点区域进行了优化。 例如,转发平面进行了优化,能够作为单独的 vSwitch 后台程序线程在用户空间内运行(虚拟交换)。 实施 DPDK 优化的 vHost 客户机界面,虚拟机-虚拟机或物理机-虚拟机-物理机类型使用案例可获得出色的性能。

在本文中,我们将逐步展示如何面向虚拟机间应用使用案例配置采用 DPDK 的 OVS。 具体来说,我们将创建一个带有两个 DPDK vhost-user 端口的 OVS vSwitch 桥。 每个端口与一个虚拟机相连。 然后,我们将运行一个简单的 iperf3 吞吐量测试来确定性能。 我们将该性能与非 DPDK OVS 配置的性能进行比较,以便观察采用 DPDK 的 OVS 能为我们带来多少性能提升。

Open vSwitch 可通过常见 Linux* 发行版本上的标准包安装程序进行安装。 但是系统在默认情况下未启用 DPDK 支持,我们需要使用 DPDK 构建 Open vSwitch 才可以继续。

安装和使用采用 DPDK 的 OVS 的具体步骤:https://github.com/openvswitch/ovs/blob/master/INSTALL.DPDK.md。 在本文中,我们将介绍基本步骤,尤其是 DPDK vhost-user 使用案例。

OVS 和 DPDK 要求

在编译 DPDK 或 OVS 前,确保您满足全部要求:

http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html#compilation-of-the-dpdk

标准 Linux 分发版中的开发工具包通常能够满足大部分要求。

比如,在基于 yum (或基于 dnf)的分发版上,您可以使用以下安装命令:

yum install "@Development Tools" automake tunctl kernel-tools "@Virtualization Platform" "@Virtualization" pciutils hwloc numactl

此外,还需确保系统上的 qemu 版本是 v2.2.0 或更高版本,如https://github.com/openvswitch/ovs/blob/master/INSTALL.DPDK.md 中的“DPDK vhost-user 前提条件”

面向 OVS 构建 DPDK 目标

如要构建采用 DPDK 的 OVS,我们需要下载 DPDK 源代码并准备其目标环境。 关于 DPDK 使用的更多详细信息,请参阅:http://www.dpdk.org/doc/guides/linux_gsg/index.html。 以下代码片段展示了基本步骤:

1 curl -O http://dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz

2 tar -xvzf dpdk-2.1.0.tar.gz

3 cd dpdk-2.1.0

4 export DPDK_DIR=`pwd`

5 sed 's/CONFIG_RTE_BUILD_COMBINE_LIBS=n/CONFIG_RTE_BUILD_COMBINE_LIBS=y/' -i config/common_linuxapp

6 make install T=x86_64-ivshmem-linuxapp-gcc

7 cd x86_64-ivshmem-linuxapp-gcc

8 EXTRA_CFLAGS="-g -Ofast" make -j10

Building OVS with DPDK

借助 DPDK 目标环境 built,我们现在可以下载最新的 OVS 源,并将其与支持的 DPDK 构建起来。 采用 DPDK build 的 OVS 的标准文档:https://github.com/openvswitch/ovs/blob/master/INSTALL.DPDK.md。 在下文中,我们将介绍基本步骤。

1 git clone https://github.com/openvswitch/ovs.git

2 cd ovs

3 export OVS_DIR=`pwd`

4 ./boot.sh

5 ./configure --with-dpdk="$DPDK_DIR/x86_64-ivshmem-linuxapp-gcc/" CFLAGS="-g -Ofast"

6 make 'CFLAGS=-g -Ofast -march=native' -j10

现在,我们已经获得带 DPDK 支持的完整 OVS built。 所有的标准 OVS 实用程序均位于 $OVS_DIR/utilities/ 下和 $OVS_DIR/ovsdb/ 下的 OVS DB。 我们将使用上述位置下的实用程序来完成接下来的步骤。

创建 OVS DB 并启动 ovsdb-server

在开始主要的 OVS 后台程序 “ovs-vswitchd” 前,我们需要初始化 OVS DB 并启动 ovsdb-server。 以下命令展示了如何清除或创建一个新的 OVS DB 和 ovsdb_server 实例。

01 pkill -9 ovs

02 rm -rf /usr/local/var/run/openvswitch

03 rm -rf /usr/local/etc/openvswitch/

04 rm -/usr/local/etc/openvswitch/conf.db

05 mkdir -/usr/local/etc/openvswitch

06 mkdir -/usr/local/var/run/openvswitch

07 cd $OVS_DIR

08 ./ovsdb/ovsdb-tool create /usr/local/etc/openvswitch/conf.db ./vswitchd/vswitch.ovsschema

09 ./ovsdb/ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach

10 ./utilities/ovs-vsctl --no-wait init

配置用于 OVS DPDK 的主机和网卡

DPDK 需要使用主机系统来支持 hugepage,并且需要启用网卡以便配合用户空间 DPDK 轮询模式驱动程序 (PMD) 使用。

为支持 hugepage 并使用 VFIO 用户空间驱动程序,将参数附加至下列 /etc/default/grub 中的 GRUB_CMDLINE_LINUX,然后运行 grub 更新并重启系统:

1 default_hugepagesz=1G hugepagesz=1G hugepages=16 hugepagesz=2M hugepages=2048 iommu=pt intel_iommu=on isolcpus=1-13,15-27

2 grub2-mkconfig -/boot/grub2/grub.cfg

3 reboot

hugepage 的数量和类型可根据系统中的可用内存进行调整。 isolcpus 参数支持我们将某些 CPU 与 Linux 调度程序隔离,以便基于 DPDK 的应用能够锁定到这些 CPU 上。

重启系统后,查看内核 cmdline 并按照如下方式分配 hugepage。

查看全文

0
0