零知识学习之DPDK与RDMA(3)—— 认识DPDK(3)

发布于:2024-07-03 ⋅ 阅读:(67) ⋅ 点赞:(0)

接前一篇文章:零知识学习之DPDK与RDMA(2)—— 认识DPDK(2)

本文内容参考:

Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社

https://blog.51cto.com/u_15301988/5181201

特此致谢!

上一回讲解了DPDK体系结构的第1部分内容——核心组件,本回开始讲解第2部分内容——轮询模式驱动。

一、认识DPDK

3. DPDK体系结构

(1)核心组件

(2)轮询模式驱动

DPDK的源码中已经包含了很多网卡的驱动程序,这些驱动程序都采用了轮询模式。

轮询模式驱动程序(poll mode driver,PMD)需要提供一系列API,用于配置设备、创建队列、发送数据包、接收数据包等。PMD直接访问接收队列和发送队列的描述符以及寄存器,无须处理任何中断(除了链路状态更新中断),即可在用户态的应用程序中快速接收、处理和发送数据包。

1)两种数据包处理模式

为了支持处理数据包的应用程序,DPDK提供了两种模式:运行到完成模式和流水线模式。运行到完成模式属于同步模式,流水线模式属于异步模式。

  • 运行到完成(run-to-completion)模式

接收时,通过API轮询特定网络接口的接收队列描述符/寄存器,以获取数据包。然后,在同一核上处理数据包。处理完毕后,通过其它API将数据包放置在网络接口的发送队列描述符中,进行数据发送。

运行到完成模式的示意图如下所示:

运行到完成模式下,一个核运行一个包处理循环,该循环包括以下三步:

a)通过PMD提供的接收API从硬件接收数据包;

b)处理接收到的数据包;

c)通过PMD提供的发送API把数据包发送出去。

  • 流水线(pipeline)模式

接收时,一个核上运行的程序通过API轮询一个或多个网络接口的接收队列描述符/寄存器。数据包被接收后,通过环形队列传递给另一个核。另一个核会继续处理数据包,处理完毕后,通过API将数据包放在网络接口的发送队列描述符中,进行数据发送。

流水线模式的示意图如下所示:

流水线模式下,一个或多个核负责接收数据包,并将数据包放入环形队列。其它核会从环形队列中取出数据包,并负责处理和发送。

接收数据包的核执行接收循环,该循环包括以下两步:

a)通过PMD提供的接收API从硬件接收数据包;

b)把接收到的数据包放入环形队列。

负责处理数据包的核执行包处理循环,该循环有三步:

a)从环形队列取出数据包;

b)处理接收到的数据包;

c)如果需要的话,通过PMD提供的发送API把数据包发送出去。

更过内容请看下回。