DPDK 开发相关问题记录
967
2023.05.04
2023.05.08
发布于 未知归属地

我是疯子
感谢阅读。

后面我会把我遇到的问题,和一些关于DPDK的想法,持续更新。

0、写这个文章的原因和目的

因为公司业务需求,需要对 网络流量 进行拆包解析。
本人对目前市面上 高性能网络技术 进行了一些对比选型,在些把这个文章当成笔记本,
记录一下这个过程中的一些想法和总量。

目前市面上 高性能网络技术 都有哪些:

  • DPDK
  • RDMA
  • XDP

在选型的过程中还看到了 VPP ,它与 DPDK 是一个主从关系;DPDK 作为 VPP 的一个插件,主要用来从网卡收发包。也就是说VPP的网络高性能本质还是来自DPDK。

为什么最后选了DPDK
1、DPDK已经发展了很多年,技术成熟,对应的资料、使用样例、遇到的问题等,前辈们都已经解决,可以直接拿来使用。
2、RDMA的使用成本过高,公司的资源支持不起 时间和金钱 上的成本。
3、XDP技术相对来说比新,资料少,学习成本也更高;并且XDP是内核态程序,不确定会因为什么原因会把内核搞崩,那麻烦就太大了。
// 4、使用了市面上大多数的 招聘软件 ,发现了解 RMDA 和 XDP 的简历少之又少,后面如果走这2条路,招人都不好招。

1、基于内核协议栈(早期网络传输处理技术)为基础的网络方案存在的问题

  1. 软件运行时频繁地在内核态与用户态之间切换;
  2. 在内核空问与用户空间的缓存之问,存在大量的数据复制行为;
  3. 数据包的封装和解析工作由 CPU 执行。

这些问题之所以成为问题,是因为它们都会消耗大量的 CPU 运行时间,增加了发送和接收数据包过程中的 时延
并且 CPU 的 计算资源 总量就那么多,过多分给 网络传输处理 ,就会导致只剩较少的 CPU 资源提供给用户。

注:DPDK 技术可用于解决前两个问题。

Q:哪么那种可以把上面三个问题都解决了?
A:远程直接存储器访问(remote direct memory access, RDMA)技术可用于解决全部三个问题。不过,与 DPDK 主要在软件方面进行处理不同,RDMA 将数据包的封装和解析工作移交给硬件执行,因此需要引入专用的 RDMA 网卡甚至其他组网设备,在降低了 CPU 负载的同时,也增加了使用成本


2023-05-08 更新

2、DPDK技术本质上解决了什么问题

如图,正常没有使用任何优化技术的情况下(使用Linux内核网络协议栈方案),
数据在2台PC间流向的过程,一共出现了 5次 数据复制。

image.png

数据复制是非常耗时的行为,会增大数据传输之间的 时延
现在按照现代计算机硬件系统的 硬件架构 当中,
在不同物理硬件之间进行数据传输,那么数据复制就是 无法避免 的!
(🤷‍♂️没办法物理条件决定的)
也就是上图中的:

  • 2、DMA数据复制(内存 ----> 网卡)
  • 3、数据发送(网卡 ----> 网卡)
  • 4、DMA数据复制(网卡 ----> 内存)

第1 和 第5 次数据复制,是在 内存中 内部进行的,也就是可以避免数据的多次复制(零拷贝)

而目前比较新的高性能网络技术也就把 第1、第5次数据复制给 “打掉”!如:DPDK

这几天对DPDK内部使用的技术点来看,其实DPDK并没有什么特别新,或精奥深邃的技术。
它本质更像是 一系列性能优化实践的合集

  • 减少数据复制的次数(零拷贝)
  • 绑核,减少切换带来的CPU消耗
  • 并行计算,利用多核资源
  • Cache预处理,增大Cache的命中率
    ...

通过多种性能优化手段,一点一点的加快网络数据流的处理速度。
也就是在没有新技术突破的环境下,怎么把现有的优化技术发挥到极致并组合起来使用。

评论 (0)