我是疯子
感谢阅读。
后面我会把我遇到的问题,和一些关于DPDK的想法,持续更新。因为公司业务需求,需要对 网络流量 进行拆包解析。
本人对目前市面上 高性能网络技术 进行了一些对比选型,在些把这个文章当成笔记本,
记录一下这个过程中的一些想法和总量。
目前市面上 高性能网络技术 都有哪些:
- DPDK
- RDMA
- XDP
在选型的过程中还看到了
VPP,它与 DPDK 是一个主从关系;DPDK 作为 VPP 的一个插件,主要用来从网卡收发包。也就是说VPP的网络高性能本质还是来自DPDK。
1、DPDK已经发展了很多年,技术成熟,对应的资料、使用样例、遇到的问题等,前辈们都已经解决,可以直接拿来使用。
2、RDMA的使用成本过高,公司的资源支持不起 时间和金钱 上的成本。
3、XDP技术相对来说比新,资料少,学习成本也更高;并且XDP是内核态程序,不确定会因为什么原因会把内核搞崩,那麻烦就太大了。
// 4、使用了市面上大多数的 招聘软件 ,发现了解 RMDA 和 XDP 的简历少之又少,后面如果走这2条路,招人都不好招。
- 软件运行时频繁地在内核态与用户态之间切换;
- 在内核空问与用户空间的缓存之问,存在大量的数据复制行为;
- 数据包的封装和解析工作由 CPU 执行。
这些问题之所以成为问题,是因为它们都会消耗大量的 CPU 运行时间,增加了发送和接收数据包过程中的 时延。
并且 CPU 的 计算资源 总量就那么多,过多分给 网络传输处理 ,就会导致只剩较少的 CPU 资源提供给用户。
注:DPDK 技术可用于解决前两个问题。
Q:哪么那种可以把上面三个问题都解决了?
A:远程直接存储器访问(remote direct memory access, RDMA)技术可用于解决全部三个问题。不过,与 DPDK 主要在软件方面进行处理不同,RDMA 将数据包的封装和解析工作移交给硬件执行,因此需要引入专用的 RDMA 网卡甚至其他组网设备,在降低了 CPU 负载的同时,也增加了使用成本。
2023-05-08 更新
如图,正常没有使用任何优化技术的情况下(使用Linux内核网络协议栈方案),
数据在2台PC间流向的过程,一共出现了 5次 数据复制。

数据复制是非常耗时的行为,会增大数据传输之间的 时延。
现在按照现代计算机硬件系统的 硬件架构 当中,
在不同物理硬件之间进行数据传输,那么数据复制就是 无法避免 的!
(🤷♂️没办法物理条件决定的)
也就是上图中的:
- 2、DMA数据复制(内存 ----> 网卡)
- 3、数据发送(网卡 ----> 网卡)
- 4、DMA数据复制(网卡 ----> 内存)
第1 和 第5 次数据复制,是在 内存中 内部进行的,也就是可以避免数据的多次复制(零拷贝)
而目前比较新的高性能网络技术也就把 第1、第5次数据复制给 “打掉”!如:DPDK
这几天对DPDK内部使用的技术点来看,其实DPDK并没有什么特别新,或精奥深邃的技术。
它本质更像是 一系列性能优化实践的合集 :
通过多种性能优化手段,一点一点的加快网络数据流的处理速度。
也就是在没有新技术突破的环境下,怎么把现有的优化技术发挥到极致并组合起来使用。