【DPDK】使用 Open vSwitch * 采用 DPDK 帧间 VM NFV 应用程序

news2025/7/20 17:19:54

一、概述

数据面开发套件 (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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaSE——包装类、装箱与拆箱

目录 一、基本概念 1.1 八种包装类及使用场景 1.2 装箱与拆箱的概念 二、以Integer包装类为例 2.1 Integer的构造方法 2.2 通过常量获取最大值与最小值 2.3 自动装箱和自动拆箱(非常重要的面试题) 三、Integer常用方法 3.1 手动拆箱(过时…

LeetCode-剑指44-数字序列中某一位的数字

1、找规律 我们通过找规律可以发现&#xff0c;当位数为xxx时&#xff0c;其占用的位数为x910x−1x\times9\times10^{x-1}x910x−1。因此我们可以不断循环并增大位数xxx直至n−x<x910x−1n-x<x\times9\times10^{x-1}n−x<x910x−1&#xff0c;此时数字落在剩余的位数…

HTTP协议加强

HTTP协议加强[TOC](HTTP协议加强)一、HTTP协议简介1.1 什么是通信1.2 什么是通信协议1.3 HTTP二、HTTP请求2.1 什么是HTTP请求消息2.2 HTTP请求消息的组成部分三、HTTP响应3.1 什么是HTTP响应消息3.2 HTTP响应消息的组成部分四、HTTP请求方法4.1 什么是HTTP请求方法4.2 HTTP的请…

接口性能调优的方法,这有11种,你知道几种?

​当我们谈到“软件测试”时&#xff0c;是指软件测试的相关工作&#xff0c;如单元测试、集成测试、系统测试等&#xff0c;但不局限于动态测试&#xff0c;也可以包括静态测试——需求评审、设计评审、代码评审和借助工具进行代码静态分析。 接口性能调优共11种方法&#xf…

Nftea: 世界杯文化、 NFT与 期权的首度碰撞

体育文化&#xff0c;正在成为加密行业发展的新驱动力 卡塔尔世界杯即将在2022年11月20日开幕&#xff0c;随着开赛日期的临近&#xff0c;作为四年一度的足球狂欢盛会&#xff0c;也吊足了全球足球球迷们的胃口。当然&#xff0c;从上个世纪开始&#xff0c;体育文化就成为了商…

Slurm作业管理系统常用命令和教程

Slurm &#xff08; Simple Linux Utility for Resource Management &#xff09;是开源的、具有容错性和高度可扩展大型和小型 Linux集群资源管理和作业调度系统。超级计算系统可利用 Slurm 进行资源和作业管理&#xff0c;以避免相互干扰&#xff0c;提高运行效率。所有需运行…

charles

charles中文名叫青花瓷&#xff0c;是一款基于HTTP协议的代理服务器。通过电脑或浏览器的代理来截取请求和请求结果&#xff0c;达到抓包并进行数据分析的目的。charles可以截取HTTP和HTTPS的网络封包&#xff0c;支持重发网络请求、修改网络请求参数、流量控制等场景 安装 由…

LeetCode刷题(python版)——Topic65.有效数字

一、题设 有效数字&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 一个 小数 或者 整数&#xff08;可选&#xff09;一个 e 或 E &#xff0c;后面跟着一个 整数 小数&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; &#xff08;可选&…

Vue:搭建前端项目-----我给你打个样

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞&#x1f44d;&#x1f44d;&#x1f44d;收藏⭐⭐⭐】一键三连&#xff01;一起努力&#xff01; 家人们好久不见&#xff0c;这次我们继续上干货&#xff0c;我们来介绍一下如何使用vue搭建一个前端项目&#xff1b; 在这里我会…

pytest fixture 中的使用包信scope skip conftest.py 和参数化等功能使用

pytest中所谓的夹具&#xff1a; fixture scope参数详解&#xff1a; scope&#xff1a; 表示fixture共享夹具的范围&#xff0c;有以下五个范围 function 功能&#xff1a; 在函数或方法运行时执行fixture函数的功能 默认作用域 class 功能&#xff1a;在类运行时调用一次。…

Mindspore网络构建

网络构建 神经网络模型是由神经网络层和Tensor操作构成的&#xff0c;mindspore.nn提供了常见神经网络层的实现&#xff0c;在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff0c;也是网络的基本单元。一个神经网络模型表示为一个Cell&#xff0c;它由不同的子Cell…

【python】常见的正则表达式用法;匹配字符串

本文仅仅展现了python正则表达式中的一小部分内容&#xff0c;但是包含了实际应用中非常被频繁使用的例子&#xff0c;本文重在举例&#xff0c;即不需要相关语法知识就能够会用~ 目录re.match()re.findall()匹配两个字符串之间的字符串并返回匹配某字符串之前/之后的所有字符串…

matlab使用NCL提供的colormap

一、自带的colormap matlab默认提供了几个基础的colormap&#xff0c;比如常见的jet和parula matlab里调用colormap的命令是 colormap(jet) jet到底代表什么呢。 可以看到其表示n*3的矩阵&#xff0c;数字介于0-1之间&#xff0c;分别代表红绿蓝。 二、m_map的colormap m_…

数据库系统概论第六章(关系数据理论)知识点总结(2)—— 码的概念总结

本专栏收录了数据库的知识点&#xff0c;而从本文起&#xff0c;将讲述有关于关系数据理论中的第一范式、第二范式、第三范式以及BC范式有关知识点&#xff0c;提供给有需要的小伙伴进行学习&#xff0c;本专栏地址可以戳下面链接查看 &#x1f388; 数据库知识点总结&#xff…

今年的数据安全风险点是什么?看数据

2022年已接近尾声&#xff0c;降低数据安全风险&#xff0c;加强防御能力依然是政企发展中的重点和目标。 2022年全球网络安全、数据安全事件频发&#xff0c;钓鱼、勒索、欺诈等复合攻击层出不穷&#xff0c;这里对2022年部分时间段的数据进行统计&#xff0c;并且这一趋势很…

基于微信小程序的高校餐厅食品留样管理系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Mav…

图形学-几何-曲线与曲面

1.什么是曲线 我们使用一系列的点去定义一条曲线。这些控制点描述了曲线的一些性质。最常见的曲线叫做贝塞尔曲线&#xff08;Bzier Curve&#xff09;。 1.1 贝塞尔的画法 在三个点的情况下。在二维情况下&#xff0c;使用三个控制点画出的贝塞尔曲线称为二次贝塞尔曲线&am…

第三节.常用Linux命令—文件和目录

第三节.常用Linux命令—文件和目录 1.查看目录内容:ls 1).功能: 列出目录的内容 2).常用选项: 参数含义-a显示指定目录下所有子目录和文件&#xff0c;包含隐藏文件(以 开头的文件)-l以列表形式显示文件的详细信息-h配合 -l 以人性化的方式显示文件大小 3).计算机中文件大小…

【数据结构初阶】(栈和队列)图文详解四道oj+三道easy概念题

你也会感到孤独吗&#xff1f; 文章目录一、队列和栈的接口二、有效的括号2.1 思路呈现2.2 代码呈现细节讲解三、用队列实现栈3.1 思路呈现3.2 代码呈现细节讲解3.3 总结四、用栈实现队列4.1 思路呈现4.2 代码呈现细节讲解4.3 总结五、设计循环队列5.1 思路呈现5.2 数组5.3 链表…

海思3559AV100 gdb+gdbserver调试·基础篇

问题描述 随着程序越来越复杂&#xff0c;单靠输出信息调试程序已然是不合适的&#xff0c;所以必须考虑使用gdb调试&#xff0c;由于板子上比较难加载代码&#xff0c;所以最合适的办法应该是gdbgdbserver远程调试&#xff0c;这样我们可以清楚地看到程序的运行信息。gdb官方…