dpdk学习

  • DPDK学习一
  • 1. DPDK简述
  • 1.1 核心组件
  • 1.1.1 环管理器 (librte_ring)
  • 1.1.2 内存池管理器 (librte_mempool)
  • 1.1.3 网络数据包缓冲区管理 (librte_mbuf)
  • 1.1.4 定时器管理器 (librte_timer)
  • 1.2 以太网* 轮询模式驱动程序架构
  • 1.3 数据包转发算法支持
  • 1.4 librte_net
  • 1.5 EAL(Environment Abstraction Layer)层


DPDK学习一

1. DPDK简述

1.1 核心组件

dpdk 容器网络 dpdk详解_dpdk 容器网络

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)