OpenvSwitch系列之十一 ovs-dpdk
Open vSwitch系列之一 Open vSwitch诞生
Open vSwitch系列之二 安装指定版本ovs
Open vSwitch系列之三 ovs-vsctl命令使用
Open vSwitch系列之四 ovs-ofctl命令使用
Open vSwitch系列之五 网桥特性功能配置
Open vSwitch系列之六 vlan隔离
Open vSwitch系列之七 meter表限速
Open vSwitch系列之八 vxlan隧道
Open vSwitch系列之九 Group表
Open vSwitch系列之十 调用北向接口下发流表
OpenvSwitch系列之十一 ovs-dpdk
1|0DPDK介绍
DPDK
(Data Plane Development Kit):
是一组快速处理数据包的开发平台及接口。有intel主导开发,主要基于Linux系统,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。
DPDK的作用
:
在数据平面应用中为快速处理数据包提供一个简单而完善的架构。在理解此工具集之后,开发人员可以以此为基础进行新的原型设计处理大并发网络数据请求。
当前数据包的处理流程是这样:
数据包到达网卡,网卡发送中断通知CPU,CPU将数据包拷贝到内核空间中,应用程序从内核空间中拷贝数据到用户态空间,数据处理。
在这个过程中数据包处理耗时的操作有:
- 网卡每次收到数据都发送中断,打断cpu的工作。切换和恢复过程都耗时
- 网络数据包经过TCP/IP协议栈,达到真正的应用处理程序时走过很多的流程
- 应用程序拿到网络数据时需要经过内核空间到用户态空间的一次copy,增加耗时
dpdk解决问题办法:
- DPDK技术是重载网卡驱动,直接将数据传递给用户态的应用程序,避免了中间环节的经过TCP/IP协议栈,内核空间到用户空间的copy。
- 同时针对第一点网卡频繁的中断,应用程序可以使用轮询的方式获取网卡上的数据,避免中断造成的场景切换和恢复浪费的时间。
2|0ovs-dpdk
2|1普通ovs
ovs
处理流表的过程是:
1.ovs的datapath接收到从ovs连接的某个网络设备发来的数据包,从数据包中提取源/目的IP、源/目的MAC、端口等信息。
2.ovs在内核状态下查看流表结构(通过Hash),观察是否有缓存的信息可用于转发这个数据包。
3.内核不知道如何处置这个数据包会将其发送给用户态的ovs-vswitchd。
4.ovs-vswitchd进程接收到upcall后,将检查数据库以查询数据包的目的端口是哪里,然后告诉内核应该将数据包转发到哪个端口,例如eth0。
5.内核执行用户此前设置的动作。即内核将数据包转发给端口eth0,进而数据被发送出去。
2|2ovs-dpdk
DPDK加速的OVS与原始OVS的区别在于,从OVS连接的某个网络端口接收到的报文不需要openvswitch.ko内核态的处理,报文通过DPDK PMD驱动直接到达用户态ovs-vswitchd里。
DPDK加速的OVS
数据流转发的大致流程如下:
1.OVS的ovs-vswitchd接收到从OVS连接的某个网络端口发来的数据包,从数据包中提取源/目的IP、源/目的MAC、端口等信息。
2.OVS在用户态查看精确流表和模糊流表,如果命中,则直接转发。
3.如果还不命中,在SDN控制器接入的情况下,经过OpenFlow协议,通告给控制器,由控制器处理。
4.控制器下发新的流表,该数据包重新发起选路,匹配;报文转发,结束。
总结
主要区别在于流表的处理。普通ovs流表转发在内核态,而ovs-dpdk流表转发在用户态
3|0ovs-dpdk 安装
3|1安装环境
3|2编译工具安装
3|3编译安装dpdk
3|4编译安装ovs
3|5网卡绑定
系统设置
找到引导的相应内核参数,在后面添加:iommu=pt intel_iommu=on
重启生效
设置dpdk驱动
配置大页
查看当前的hugepage
修改hugepage的页数为1024
临时设置大页的方法,重启失效:
配置保存的设置方法,重启生效:
挂载hugepages
3|6启动ovs进程
准备ovs相关路径
删除旧的ovs配置数据和创建新的(可选)
如果不需要旧配置时,可以选择该操作
3|7启动ovsdb server
3|8第一次启动ovs需要初始化
3|9初始化dpdk
从ovs-v2.7.0开始,开启dpdk功能已不是vswitchd进程启动时指定–dpdk等参数了,而是通过设置ovsdb来开启dpdk功能
3|10自定义一些dpdk的参数(可选)
指定的sockets从hugepages预先分配的内存
指定在某些core上运行
查看自定义的dpdk参数
3|11启动vswitchd进程
3|12ovs工具使用
创建openvswitch网桥
把dpdk端口加入网桥
先使用dpdk-devbind命令查看当前已绑定的dpdk网卡,并记住相应的PCI地址
3|13完成分割线
到这里就安装完成了,并且两台主机之间可以直接转发数据。
3|14测速
在两主机之间使用iperf工具测速,服务端收集到的测速信息如下:
两主机之间是1000Mb的带宽
目前只使用了iperf
的测速方法,发现ovs-dpdk和ovs的转发效率没有什么区别,可能并没有找到合适的测试方法,待补充。
4|0报错解决
在安装过程中可能会出现的报错:
解决方法:
__EOF__

本文链接:https://www.cnblogs.com/goldsunshine/p/14260941.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理