DPDK关键技术详解.docx

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DPDK关键技术 赵剑川 2014.11.26 概要 DPDK 是 INTEL提供的提升数据面报文快速处理速率的应用程序开发包,它主要利用以下几 个方面的支持特点来优化报文处理过程,从而加快报文处理速率: 1、 使用大页缓存支持来提高内存访问效率。 2、 利用 UIO 支持, 提供应用空间下驱动程序的支持, 也就是说网卡驱动是运行在用户空间 的,减下了报文在用户空间和应用空间的多次拷贝。 3、 利用 LINUX 亲和性支持, 把控制面线程及各个数据面线程绑定到不同的 CPU核,节省了 线程在各个 CPU 核来回调度。 4、 提供内存池和无锁环形缓存管理,加快内存访问效率。 整个 DPDK系统由许多不同组件组成,各组件为应用程序和其它组件提供调用接口,其结构图如下图所示: Dpdk application None Dpdk application Sched lib KNI lib Net prototol lib Hash/Lpm lib meter/power Pmd driver lib Pmd ring lib Pmd pcap lib Pmd e1000 lib Pmd ixgbe lib Pmd virtio lib mbuf lib Malloc lib Timer lib Mem pool lib Ring lib Master core Slave core pipe Per-care and Share variable Cpu feature int arlarm timer Tail queue log debug blacklist Mem zone None pci Pci Uio device memseg Pci 驱动 Igb_uio Huge page KNI A B :表示模块 A 用到模块 B Dpdk 各系统组件结构图 1、 环境抽象层: 为 DPDK其它组件和应用程序提供一个屏蔽具体平台特性的统一接口, EAL 提供的功能主要有: DPDK 加载和启动;支持多核或多线程执行类型; CPU 核亲和性处 理;原子操作和锁操作接口;时钟参考; PCI 总线访问接口;跟踪和调试接口; CPU 特 性采集接口;中断和告警接口等。 2、 堆内存管理组件( Malloc lib ):堆内存管理组件为应用程序提供从大页内存分配堆内存 的接口。当需要分配大量内存小块时(如用于存储列表中每个表项指针的内存) ,使用 这些接口可以减少 TLB缺页。 3、 环缓冲区管理组件: 环缓冲区管理组件为应用程序和其它组件提供一个无锁的多生产者 多消费者 FIFO队列 API。 4、 内存池管理组件:为应用程序和其它组件提供分配内存池的接口,内存池是一个由固定 大小的多个内存块组成的内存容器,可用于存储相同对像实体,如报文缓存块等。内存 池由内存池的名称(一个字符串)来唯一标识,它由一个环缓中区和一组核本地缓存队 列组成,每个核从自已的缓存队列分配内存块,当本地缓存队列减少到一定程度时,从 内存环缓冲区中申请内存块来补充本地队列。 5、 网络报文缓存块管理组件:提供应用程序创建和释放用于存储报文信息的缓存块的接 口,这些 MBUF 存储在一内存池中。提供两种类型的 MBUF,一种用于存储一般信息, 一种用于存储报文数据。 6、 定时器组件:提供一些异步周期执行的接口(也可以只执行一次) ,可以指定某个函数 在规定的时间异步的执行,就像 LIBC中的 timer 定时器,但是这里的定时器需要应用程 序在主循环中周期调用 rte_timer_manage 来使定时器得到执行,使用起来没有那么方 便。定时器组件的时间参考来自 EAL层提供的时间接口。 除了以上六个核心组件外, DPDK还提供以下功能: 1、 以太网轮询模式驱动( PMD)架构:把以太网驱动从内核移到应用层,采用同步轮询机 制而不是内核态的异步中断机制来提高报文的接收和发送效率。 2、 报文转发算法支持: Hash 库和 LPM 库为报文转发算法提供支持。 3、 网络协议定义和相关宏定义: 基于 FreeBSD IP 协议栈的相关定义如: TCP 、UDP 、SCTP 等协 议头定义。 4、 报文 QOS 调度库:支持随机早检测、流量整形、严格优先级和加权随机循环优先级调度等相关 QOS 功能。 5、 内核网络接口库( KNI ):提供一种 DPDK 应用程序与内核协议栈的通信的方法,类似普通 LINUX 的 TUN/TAP 接口,但比 TUN/TAP 接口效率高。每个物理网口可以虚拟出多个 KNI 接口。 以下分章节对各个组件单元进行详细分析。 日志系统篇: 1、 全局日志变量 rte_logs struct rte_logs rte

文档评论(0)

137****7230 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档