dpdk学习
DPDK学习一
1. DPDK简述
1.1 核心组件
1.1.1 环管理器 (librte_ring)
环形结构在有限大小的表中提供了无锁的多生产者、多消费者 FIFO API。它比无锁队列有一些优势;更易于实施,适应批量操作且速度更快。环由librte_mempool使用,可用作核心和/或逻辑核心上连接在一起的执行块之间的通用通信机制。
1.1.2 内存池管理器 (librte_mempool)
内存池管理器负责在内存中分配对象池。池由名称标识并使用环来存储空闲对象。它提供了一些其他可选服务,例如每核对象缓存和对齐帮助器,以确保对象被填充以在所有 RAM 通道上平均分布。
1.1.3 网络数据包缓冲区管理 (librte_mbuf)
mbuf 库提供了创建和销毁缓冲区的工具,DPDK 应用程序可以使用这些缓冲区来存储消息缓冲区。消息缓冲区是在启动时创建的,并使用 DPDK 内存池库存储在内存池中。
该库提供了一个 API 来分配/释放 mbuf,操作用于承载网络数据包的数据包缓冲区。
1.1.4 定时器管理器 (librte_timer)
该库为 DPDK 执行单元提供定时器服务,提供异步执行函数的能力。它可以是周期性的函数调用,也可以是一次性调用。它使用环境抽象层 (EAL) 提供的计时器接口来获取精确的时间参考,并且可以根据需要在每个内核的基础上启动。
1.2 以太网* 轮询模式驱动程序架构
DPDK 包括用于 1 GbE、10 GbE 和 40 GbE 的轮询模式驱动程序 (PMD),以及准虚拟化 virtio 以太网控制器,这些控制器旨在在没有异步、基于中断的信号机制的情况下工作。
1.3 数据包转发算法支持
DPDK 包括哈希(librte_hash)和最长前缀匹配(LPM,librte_lpm)库,以支持相应的数据包转发算法。
1.4 librte_net
librte_net 库是 IP 协议定义和便利宏的集合。它基于来自 FreeBSD* IP 堆栈的代码,并包含协议号(用于 IP 标头)、IP 相关宏、IPv4/IPv6 标头结构以及 TCP、UDP 和 SCTP 标头结构。
1.5 EAL(Environment Abstraction Layer)层
提供以下服务
- DPDK 加载和启动
- 支持多进程和多线程执行类型
- 核心关联/分配程序
- 系统内存分配/解除分配
- 原子/锁定操作
- 时间参考
- PCI 总线访问
- 跟踪和调试功能
- CPU 特征识别
- 中断处理
- 报警操作
- 内存管理(malloc)