DPDK(六):DPDK整体介绍

    DPDK是由INTEL开源的数据报文加速框架,由一组共享库和驱动组成,提供一个简洁但是完整的框架。 用户可以通过代码来理解其中使用的一些技术,并用来构建自己的应用原型或是添加自己的协议栈。 用户也可以替换DPDK提供的原生的选项。因为DPDK是基于Open Source BSD licensed开源的项目,BSD开源协议给与用户很大的权限,可以基于开源代码进行修改替换而不必公布源代码,这个应该算INTEL的推广策略,当然INTEL的最终目标是商业上的成功,多卖一些X86服务器、切入数据通信领域等。

下图是目前我的理解,绿色部分由DPDK提供,在内核态、用户态均有代码,主要的功能在用户态。


DPDK的各组成部分:

1、环境抽象层:

环境抽象层提供一层通用的接口给DPDK各种库使用,是对底层架构的抽象同时屏蔽硬件的各种形态的差异,提供了以下各种功能:

  • DPDK的加载和启动
  • 支持多线程和多进程执行方式
  • CPU亲和性设置
  • 系统内存分配和释放
  • 原子操作
  • 定时器引用
  • PCI总线访问
  • 跟踪和调试功能
  • CPU特性编号
  • 中断处理
  • 警告操作
  • 内存管理
2、核心组件:

 指一系列的库,用于为高性能包处理程序提供所有必须的元素。核心组件及其之间的关系如下图所示:


2.1、 环形缓冲区管理(librte_ring)

Ring数据结构提供了一个无锁的多生产者,多消费者的FIFO表处理接口。 他比无锁队列优异的地方在于它容易部署,适合大量的操作,而且更快。 Ring库在 Memory Pool Manager (librte_mempool) 中使用到, 而且ring还用于不同核之间或是逻辑核上处理单元之间的通信。 Ring缓存机制及其使用可以参考 Ring Library

2.2. 内存池管理(librte_mempool)

内存池管理的主要职责就是在内存中分配指定数目对象的POOL。 每个POOL以名称来唯一标识,并且使用一个ring来存储空闲的对象节点。 它还提供了一些其他的服务如对象节点的每核备份缓存及自动对齐以保证元素能均衡的处于每核内存通道上。 内存池分配器具体行为参考 Mempool Library

2.3. 网络报文缓冲区管理(librte_mbuf)

报文缓存管理器提供了创建、释放报文缓存的能力,DPDK应用程序中可能使用这些报文缓存来存储消息。 而消息通常在程序开始时通过DPDK的MEMPOOL库创建并存储。 BUFF库提供了报文申请释放的API,通常消息buff用于缓存普通消息,报文buff用于缓存网络报文。 报文缓存管理参考 Mbuf Library

2.4. 定时器管理(librte_timer)

这个库位DPDK执行单元提供了定时服务,为函数异步执行提供支持。 定时器可以设置周期调用或只调用一次。 使用EAL提供的接口获取高精度时钟,并且能在每个核上根据需要初始化。 具体参考 Timer Library

3、 以太网轮询驱动架构

DPDK的PMD驱动支持1G、10G、40G。 同时DPDK提供了虚拟的以太网控制器,被设计成非异步,基于中断的模式。 详细内容参考 Poll Mode Driver

4、 报文转发算法支持

DPDK提供了哈希(librte_hash)、最长前缀匹配的(librte_lpm)算法库用于支持包转发。 详细内容查看 Hash Library 和 LPM Library 。

5、网络协议库(librte_net)

这个库提供了IP协议的一些定义,以及一些常用的宏。 这些定义都基于FreeBSD IP协议栈的代码,并且包含相关的协议号,IP相关宏定义,IPV4和IPV6头部结构等等。


参考:http://dpdk-docs.readthedocs.io/en/latest/prog_guide/overview.html

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值