Ⅰ Dpdk与OpenvSwitch
1、DPDK
DPDK是X86平台报文快速处理的库和驱动的集合,大多数情况下运行在linux的用户态空间。
2、Open vSwitch
简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。
在这种某一台机器的虚拟化的环境中,一个虚拟交换机(vswitch)主要有两个作用:传递虚拟机VM之间的流量,以及实现VM和外界网络的通信。
在 OVS 中, 有几个非常重要的概念:
Bridge: Bridge 代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个 Bridge 设备。
Port: 端口与物理交换机的端口概念类似,每个 Port 都隶属于一个 Bridge。
Interface: 连接到 Port 的网络接口设备。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 是一对多的关系。
Controller: OpenFlow 控制器。OVS 可以同时接受一个或者多个 OpenFlow 控制器的管理。
Datapath: 在 OVS 中,datapath 负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。
Flow table: 每个 datapath 都和一个“flow table”关联,当 datapath 接收到数据之后, OVS 会在 flow table 中查找可以匹配的 flow,执行对应的操作, 例如转发数据到另外的端口。
3、OVDK
Ⅱ DPDK pf-ring pf-ring-zc
DPDK vs pf-ring vs pf-ring-zc https://blog.csdn.net/whatday/article/details/89242246
基于VPP+DPDK开源框架开发UPF https://workerwork.github.io/posts/vpp/
VPP vs OVS
浅析基于DPDK框架下OVS与VPP的差异点 https://www.secrss.com/articles/14352
论用户态协议栈--DPDK与他的哪些小伙伴们(VPP, OVS, TREX,mTCP,f-Stack等)
InfiniBand RDMA/ROCE
Open Fast Path
《深入浅出DPDK》读书笔记(十六):DPDK应用篇(基于DPDK的存储软件优化:SPDK) https://rtoax.blog.csdn.net/article/details/109371661
Ⅲ 如何借助 OVN 来提高 OVS 在云计算环境中的性能
虽然 OVN 是 OVS 社区在 2015 年 1 月份才宣布的一个子项目,但是到目前为止 OVN 已经支持了很多功能,
Logical switches:逻辑交换机,用来做二层转发。
L2/L3/L4 ACLs:二到四层的 ACL,可以根据报文的 MAC 地址,IP 地址,端口号来做访问控制。
Logical routers:逻辑路由器,分布式的,用来做三层转发。
Multiple tunnel overlays:支持多种隧道封装技术,有 Geneve,STT 和 VXLAN。
TOR switch or software logical switch gateways:支持使用硬件 TOR switch 或者软件逻辑 switch 当作网关来连接物理网络和虚拟网络。
OVN 对于运行平台没有额外的要求,只要能够运行 OVS,就可以运行 OVN,所以 OVN 可以和 Linux,Docker,DPDK 还有 Hyper-V 兼容,从 OVS 升级到 OVN 是非常容易的。
另外 OVN 可以和很多 CMS(Cloud Management System)集成到一起,比如 Openstack neutron,这些 CMS 只需要添加一个 plugin 来配置 OVN 即可。
Ⅳ 编译和运行DPDK示例程序
DPDK(Data Plane Development Kit)是数据平面开发工具包,由用于加速在各种CPU架构上运行的数据包处理的库组成。
在Linux上部署DPDK的方法请参考:
在Linux(CentOS)上部署DPDK------命令行方式
该章节的内容参照自官网的 DPDK build sample apps
当DPDK的target环境创建好后(例如 x86_64-native-linuxapp-gcc ), x86_64-native-linuxapp-gcc 目录中会包含编译应用程序的库和头文件。
在编译DPDK应用程序之前,首先需要指定两个环境变量:
在DPDK的 examples 路径下面有许多示例应用,这里以其中的 helloworld 为例进行编译:
DPDK的 examples 路径下面的应用均可以通过这种方式编译,也可以直接在 examples 路径下面运行 make ,将这些应用全都编译好。
在运行应用程序之前,需要确保:
DPDK应用程序与DPDK target环境的环境抽象层EAL(Environmental Abstraction Layer )库相关联,该库提供了一些通用于每个DPDK应用程序的选项。
EAL的详细配置请参照: DPDK EAL参数
可按照下列参数运行 ./helloworld :
其中 -l 命令指定cpu cores list是EAL必须的配置;若没有指定 --socket-mem ,则默认会按照预留的hugepages size来分配。
Ⅳ DPDK实验环境搭建
事情是是是是是这样的!
我要用DPDK,但是我觉得搞两台服务器连端口发包,太麻烦,虽然实际上,可能并不麻烦。。。。但我就是想在单台服务器上做。
docker+DPDK+OVS 这种方式来做测试。
然后呢就在网上找了个教程,和我的需求真的是一模一样。。但是按照那个教程做的过程中啊,出了一些问题。记录一下~
教程链接: https://blog.csdn.net/me_blue/article/details/78589592
其中安装部分按照教程里的做就可以了。
安装完dpdk和ovs之后创建网桥以及下发流表用的脚本可以在我的github上获取。 https://github.com/LinanJ/DPDK-OVS-
在这个实验中,把pktgen和testpmd放在两个容器中,然后进行测试。创建容器都没问题,问题是在启动pktgen的时候,总是报内存的错误,要么是内存没有,要么是内存不足!!!
重点来了,朋友们,教程里的socket_mem部分是两个1024对吧。那是因为人家有连个NUMA节点,你有么???
我是没有的。。所以,就会报错,说是socket1上没有内存。。显然没有。所以啊,如果你只有一个numa节点,那么你在pktgen上和testpmd上的命令应该是这样的:
dpdk挂载的就是红线框的这两条
这样就可以了。
Ⅵ ovs 基于dpdk性能优化的原理
得益于用户态网络协议栈处理,用户空间,巨页,内存索引,数据预取, IPC等dpdk的设计,如下维度都有一定性能的提升
除了网络协议栈完全在用户态处理,内存数据访问的命中率也有50%+的提升,上下文切换大幅度减少。
性能提升机制主要包括: 提升IPC,内存索引,通过软件预期降低cache未命中,通过巨页内存降低TLB未命中,通过用户空间驱动降低上下文切换次数。
参考: