一、概述
数据面开发套件 (DPDK)提供高性能数据包处理库和用户空间驱动程序。从Open vSwitch (OVS)版本 2.4 (http://openvswitch.org/releases/NEWS-2.4.0)开始,我们可以进行 OVS 中,使用 DPDK 优化 vHost 路径。DPDK 支持后的 OVS 中可用的 2.2 版。
使用 OVS 与 DPDK 为我们提供了巨大的性能优势。类似于其它基于 DPDK 的应用,我们可以看到激增网络数据包吞吐量和更低的延迟。
Inside OVS 的多个性能热点区域是还优化使用 DPDK 的数据包处理库。例如,经优化转发平面可作为单独的 vswitch 后台程序 (vswitchd) 的线程运行在用户空间。DPDK 优化 vHost 来宾接口的实现支持高性能 VM 到 VM 或 PHY 的虚拟机的 PHY 类型使用案例。
本文档中,我们将展示分步指导如何使用 DPDK 的 OVS 配置虚拟机间的应用程序使用情况。具体而言,我们将使用 DPDK vhost 用户的 2 个端口创建 OVS vSwitch 桥接。每个端口将挂接到单独的虚拟机。然后,我们将运行简单 iperf3 吞吐量测试以确定的业绩。我们将使我们可以看到提高多少 dpdk 的 OVS 为我们提供的性能与中的非 DPDK 的 OVS 配置中,将进行比较。
可以通过在通用 Linux * 发行版本的标准包安装程序安装 open vSwitch。但由于默认情况下不启用 DPDK 支持,我们需要构建 dpdk 的 Open vSwitch,我们可以继续操作之前。
有关安装和使用 DPDK 的 OVS 的详细的步骤可在OvS 与 DPDK 安装手册 》。在本文中,我们将介绍的基本步骤,并专门 DPDK vhost 用户使用案例。
二、OVS 与 DPDK 的要求
编译 DPDK 或 OVS 前, 请确保您有了满意的所有要求:
2. System Requirements — Data Plane Development Kit 22.11.0-rc2 documentation
开发工具程序包标准 Linux 发行版本中的通常满足这些要求的大部分。
例如,在基于 yum (或基于 dnf) 发行的版本,您可以使用以下安装命令:
yum install "@Development Tools" automake tunctl kernel-tools "@Virtualization Platform" "@Virtualization" pciutils hwloc numactl
此外,确保在系统上的 qemu 版本是 v2.2.0 或以上所述"DPDK vhost 用户前提条件"下OvS 与 DPDK 安装指南.
三、构建面向 OVS 的 DPDK 目标
要编译 dpdk 的 OVS,我们需要下载 DPDK 源代码并准备好其目标环境。DPDK 使用更多详细信息,请参阅Getting Started Guide for Linux — Data Plane Development Kit 22.11.0-rc2 documentation。下面的代码段显示的基本步骤:
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
四、构建与 DPDK 的 OVS
采用内置 DPDK 目标环境中,我们现在可以下载最新的 OVS 来源和构建它具有启用 DPDK 支持。OVS 与 DPDK 生成的标准文档是OvS 与 DPDK 安装手册 》。此处我们将介绍的基本步骤。
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
我们现在拥有了完整的 OVS 采用 DPDK 支持启用。$OVS_DIR/实用程序可以找到所有标准 OVS 实用程序,并在 $OVS_DIR/ovsdb OVS DB /。我们将为我们的下一步骤,在这些位置下使用这些实用程序。
五、创建 OVS DB 和启动 ovsdb server
我们可以开始主守护程序"ovs 的 ovs-vswitchd"之前,我们需要初始化 OVS DB 启动 ovsdb 服务器。以下命令告诉您如何清除/创建一个新的 OVS DB 和 ovsdb_server 实例。
1 pkill -9 ovs 2 rm -rf /usr/local/var/run/openvswitch 3 rm -rf /usr/local/etc/openvswitch/ 4 rm -f /usr/local/etc/openvswitch/conf.db 5 mkdir -p /usr/local/etc/openvswitch 6 mkdir -p /usr/local/var/run/openvswitch 7 cd $OVS_DIR 8 ./ovsdb/ovsdb-tool create /usr/local/etc/openvswitch/conf.db ./vswitchd/vswitch.ovsschema 9 ./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 要求的主机系统以支持 hugepages,并需要与用户空间 DPDK 轮询模式驱动程序 (PMD) 启用的 nic 进行通信。
要启用 hugepages 并使用 VFIO 用户空间驱动程序,附加的参数所示为中的 GRUB_CMDLINE_LINUX /etc/default/grub,然后运行 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 -o /boot/grub2/grub.cfg 3 reboot
这取决于您的系统中的可用内存,可调整的数量和类型的 hugepages。isolcpus
参数使我们能够隔离某些 Linux 计划程序上,从 Cpu,从而基于 DPDK 的应用程序对他们可以"锁定"。
一旦系统重新启动、 检查内核 cmdline 和分配作为 hugepages 如下所示。
下一步是安装 hugepages 文件系统和加载vfio-pci
用户空间驱动程序。
1 mkdir -p /mnt/huge 2 mkdir -p /mnt/huge_2mb 3 mount -t hugetlbfs hugetlbfs /mnt/huge 4 mount -t hugetlbfs none /mnt/huge_2mb -o pagesize=2MB 5 6 modprobe vfio-pci 7 cp $DPDK_DIR/tools/dpdk_nic_bind.py /usr/bin/. 8 dpdk_nic_bind.py --status 9 dpdk_nic_bind.py --bind=vfio-pci 05:00.1
下面的屏幕快照显示了使用上述命令的输出的示例。请注意,由于 DPDK v16.07 dpdk_nic_bind.py 更改为$DPDK_DIR
/tools/
dpdk devbind.py。
如果目标的使用案例仅为 VM 到 VM,并且使用无物理网卡,我们可以跳过上述 NIC vfio-pci 驱动,步骤。
七、启动 ovs 的 ovs-vswitchd
我们拥有 OVS 数据库配置和设置 OVS DPDK 使用主机。下一步是开始主ovs 的 ovs-vswitchd过程。
1 modprobe openvswitch 2 $OVS_DIR/vswitchd/ovs-vswitchd --dpdk -c 0x2 -n 4 --socket-mem 2048 -- unix:/usr/local/var/run/openvswitch/db.sock --pidfile --detach
八、创建一个桥接和 DPDK vhost 用户端口虚拟机间的使用案例。
我们示例测试用例,我们将创建一座桥梁,并添加两个 DPDK vhost 用户端口。或者,我们可以添加 vfio-pci 驱动,物理网络接口卡我们先前配置。
1 $OVS_DIR/utilities/ovs-vsctl show 2 $OVS_DIR/utilities/ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev 3 $OVS_DIR/utilities/ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk 4 $OVS_DIR/utilities/ovs-vsctl add-port br0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser 5 $OVS_DIR/utilities/ovs-vsctl add-port br0 vhost-user2 -- set Interface vhost-user2 type=dpdkvhostuser
下面的屏幕快照显示了最后的 OVS 配置。
学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,久学习,或点击这里加qun免费
领取,关注我持续更新哦! !
九、与虚拟机使用 DPDK vhost 用户端口
创建虚拟机不在本文档的范围。一旦我们有两个虚拟机创建 (例如,f21vm1.qcow2 和 f21vm2.qcow2),以下命令将显示如何使用 DPDK vhost 用户端口我们之前创建。
1 qemu-system-x86_64 -m 1024 -smp 4 -cpu host -hda ~/f21vm1.qcow2 -boot c -enable-kvm -no-reboot -nographic -net none \ 2 -chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user1 \ 3 -netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \ 4 -device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1 \ 5 -object memory-backend-file,id=mem,size=1024M,mem-path=/dev/hugepages,share=on \ 6 -numa node,memdev=mem -mem-prealloc 7 8 qemu-system-x86_64 -m 1024 -smp 4 -cpu host -hda ~/f21vm2.qcow2 -boot c -enable-kvm -no-reboot -nographic -net none \ 9 -chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user2 \ 10 -netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \ 11 -device virtio-net-pci,mac=00:00:00:00:00:02,netdev=mynet1 \ 12 -object memory-backend-file,id=mem,size=1024M,mem-path=/dev/hugepages,share=on \ 13 -numa node,memdev=mem -mem-prealloc
十、与 iperf3 简单的 DPDK vhost 用户虚拟机间性能
登录到虚拟机,并具有静态 IP 同一个子网上配置 Nic。安装iperf3
,然后再运行简单的网络测试。
一台虚拟机,在服务器模式iperf3 -s
启动iperf3
并运行客户端iperf3
。下面的屏幕快照显示样本结果。
十二、复制与标准的 OVS (无 DPDK) 的性能测试
我们在前面几节中创建,并用于 OVS-DPDK 生成的 $OVS_DIR 文件夹,然后重试。我们未安装它在系统上。复制与标准的 OVS (非 DPDK) 测试用例,我们可以只需从安装标准分发版安装程序。例如,在基于 yum (或基于 dnf) 系统中,我们可能会安装为:
1 pkill -9 ovs 2 3 yum install openvswitch 4 5 rm -f /etc/openvswitch/conf.db 6 mkdir -p /var/run/openvswitch 7 ovsdb-tool create /etc/openvswitch/conf.db /usr/share/openvswitch/vswitch.ovsschema 8 ovsdb-server --remote=punix:/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach 9 ovs-vsctl --no-wait init 10 11 ovs-vswitchd unix:/var/run/openvswitch/db.sock --pidfile --detach 12 13 ovs-vsctl add-br br0 14 ovs-vsctl show
至此,我们已安装最新的 OVS 数据库配置和非 DPDK 的 ovs 的 ovs-vswitchd 进程已启动。
要为分路器设备非 DPDK 的 OVS 网桥 (br0) 上配置两个虚拟机,请参阅文档Open vSwitch kvm中的说明。然后启动虚拟机使用相同的图像我们以前使用,例如:
1 qemu-system-x86_64 -m 512 -smp 4 -cpu host -hda ~/f21vm1c1.qcow2 -boot c -enable-kvm -no-reboot -nographic -net nic,macaddr=00:11:22:EE:EE:EE -net tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown 2 qemu-system-x86_64 -m 512 -smp 4 -cpu host -hda ~/f21vm1c2.qcow2 -boot c -enable-kvm -no-reboot -nographic -net nic,macaddr=00:11:23:EE:EE:EE -net tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown
重复我们之前所做的简单iperf3
性能测试。以下是示例输出;您的结果可能有所差异,具体取决于您的系统配置。
如上图所示,我们注意到 OVS dpdk 性能显著提升。同时在同一系统上执行性能测试,唯一的区别使用标准-与 OVS 与 DPDK 的 OVS。
十三、摘要
Open vSwitch 2.4 版本,使 DPDK 的支持,带来了巨大的性能优势。在本文中,我们介绍了如何构建和使用 DPDK 的 OVS。我们将介绍如何使用 DPDK vhost 用户虚拟机的英特尔® 应用程序使用案例的端口配置简单的 OVS 桥。我们展示了采用iperf3性能指标评测,性能提升将采用 DPDK 和不 DPDK 的 OVS 进行比较。
十四、作者简介
Ashok Emani 拥有超过 14 年的嵌入式/系统编程,存储/IO 技术、 计算机架构、 虚拟化和性能分析/性能指标评测的工作经验,是英特尔公司高级软件工程师。他目前致力于研究 SDN/NFV 支持的项目。
有关编译器优化的更完整信息,请参阅我们的优化通知.
原文链接:【https://www.cnblogs.com/howardgoogle/p/7227499.html