接前一篇文章:零知识学习之DPDK与RDMA(3)—— 认识DPDK(3)
本文内容参考:
《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社
https://blog.51cto.com/u_15301988/5181201
特此致谢!
本回继续讲解DPDK体系结构第2部分内容——轮询模式驱动。
一、认识DPDK
3. DPDK体系结构
(1)核心组件
(2)轮询模式驱动
DPDK的源码中已经包含了很多网卡的驱动程序,这些驱动程序都采用了轮询模式。
轮询模式驱动程序(poll mode driver,PMD)需要提供一系列API,用于配置设备、创建队列、发送数据包、接收数据包等。PMD直接访问接收队列和发送队列的描述符以及寄存器,无须处理任何中断(除了链路状态更新中断),即可在用户态的应用程序中快速接收、处理和发送数据包。
1)两种数据包处理模式
2)驱动程序原则
PMD应该协助上层应用达到全局目标。例如,PMD提供的接收API和发送API都要有一个参数用来表明每次最多处理多少个数据包或描述符。换一种说法,PMD需要支持burst方式,即一次性接收和发送多少个数据包。这使得使用运行到完成模式的程序可以根据具体情况,动态调整自己的收发策略。比如:
- 以零碎的方式一次一个地接收、处理和发送数据包;
- 接收尽可能多的数据包,然后处理所有接收到的数据包,并立即发送它们;
- 接收给定最大数量的数据包,处理接收到的数据包并累积,最后将所有积累的数据包一次性发送出去。
3)处理器核、内存核队列之间的关系
DPDK支持NUMA 架构。当处理器核和网络接口使用本地内存时(即CPU、网卡、DDR属于同一个NUMA结点),可以获得更好的性能。因此,应该从位于本地内存的内存池中分配数据包缓存(mbuf)。
多个核不应该共享接收队列或发送队列,因为这将需要引领全局锁,从而影响性能。
4)设备配置
PMD需要提供一些API对设备进行配置,这些配置包括但不限于:
- 重置(reset)设备为默认状态;
- 使能或断开物理链接;
- 初始化硬件中的数据包计数;
- 启动/停止多播功能;
- 使能/禁止某些硬件卸载(offload)功能,比如分片、校验等。
更多内容请看下回。