Programmer’s Guide算法
Release 2.1.0缓存
翻译的目的是强化本身对dpdk的理解,看看2.1版本和如今使用的版本的差别,其次就是可能要走了,为那些要上手dpdk,可是又不想看英文资料的同志们作贡献,英语很差,有些地方多是本身理解的不对,或者是理解了翻译不出来,看到不咋对的仍是去看英文资料对照一下吧,请叫我红领巾,哈哈哈。网络
文档提供了关于软件架构.开发环境的信息和优化指导.多线程
对于范例程序和编译指令以及运行每一个例子的星系,请查看<DPDK Sample Applications User Guide>架构
对于编译和运行程序总的说明见<DPDK Getting Started Guide>就是那个dpdk2.1开发入门手册。框架
1.1 文档总览异步
这个仍是参见入门手册吧,每一个文档都有这个….ide
1.2 相关的出版物函数
下面这个文档提供了使用dpdk开发程序相关的资料:性能
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide
Part1:架构概览
这部分提供了DPDK架构概览。dpdk的目的是针对数据平台上快速包处理,提供一个简单的,完整的框架。用户使用代码来理解一些技术细节,在其之上开发协议或者是计入本身的协议栈。这二者使用dpdk都是能够实现的。
dpdk框架经过创建一个EAL来实现建立一系列的针对特定环境的库,这是对于intel32/64位架构,linxu用户态编译或者是特定平台的特殊模式。这些环境的建立时经过使用Make文件和配置文件。一旦EAL库建立,用户会将其链接到本身建立的程序上。在EAL以外的其它库,包括哈希算法,最长前缀匹配,ring操做这些库也都提供。范例程序用来向用户展现如何使用dpdk的各类特性。
dpdk实现了包处理的完整的模式,在调用数据平台处理程序前须要分配全部的资源,执行单元运行在逻辑处理核上。(这个我理解的是相对于物理核,intel的超线程将其弄成了两个逻辑核,啥时候看到农企的超线程啊)。这种模式下不支持系统调度和全部的网卡设备都是轮询方式的访问。不使用中断的方式就是由于中断处理程序对性能的影响(深有感触啊)。
此外对于那种运行到完成的模式,管道模式就是经过使用ring在核之间传递报文或者是消息也被用到。这就可使得工做被分割成多步在不一样的核上执行,这样代码运行的更加有效,计算性能用的更完全。
2.1 开发环境
这部分仍是看入门手册吧,感受有点重叠了。
2.2 环境抽象层EAL
EAL提供了通用的接口,而隐藏了和环境相关的细节。EAL提供的服务有:
l DPDK加载和启动
l 支持多进程和多线程的执行方式
l cpu亲和性的设置
l 系统内存的分配和释放
l 原子操做
l 定时器
l 访问PCI总线
l 调试功能
l CPU 编号
l 中断处理
l 告警操做内存管理
详细信息看第三章《EAL》
2.3 核心模块
核心模块的一系列库对高性能包处理程序提供了全部必须的接口。
Fig.2.1:核心模块结构
2.3.1 ring管理(librte_ring)
ring结构提供了一个无锁的多生产者,多消费者的先进先出的对指定大小表处理的API。它比无锁队列有不少好处,更容易部署,适合大量的操做且更快。ring在《Memory Pool Manager (librte_mempool)》中用到且能够最为不一样的核之间或者是在逻辑核上的处理单元直接联系的通用通讯机制。
ring 缓存和它的用法见《Ring Library》
2.3.2 Memory Pool管理(librte_mempool)
Memory Pool管理的职责是在内存中分配指定数目对象的pool。每一个pool都有以名字区别的id且使用ring来存储未使用的对象。它还提供了其它服务,例如对应core的处理对象入CPU缓存和自动对齐以确保对象都均匀相等处于每一个内存通道上。内存pool的分配见《Mempool Library》
2.3.3 网络报文缓存管理(librte_mbuf)
mbuf库提供了建立和销毁buffer的能力,后者可能被dpdk程序用于存储消息缓存。消息缓存能够经过使用dpdk的mempool库在程序启动时建立且存于mempool中。这个库提供了API申请和释放mbufs,操做控制消息buffer(ctrlm-buf)用于普通的消息buffer,以及报文buffer(pktmbuf)用于传输网络报文。
具体看《Mbuf Library》
2.3.4 定时器管理(librte_timer)
这个库向dpdk执行单元提供定时器服务,提供异步执行某一个函数的能力。能够是周期性的调用,也能够是只有一次的调用。 使用EAL提供的定时器接口获取高精度时钟且能在每一个核上基于须要初始化。
具体参见《timer libarary》
2.4 网卡的轮询模式驱动PMD架构
dpdk包含支持1gbe,10gbbe和40gbe的PMD,且提供虚拟的以太网控制器,设计成工做在非异步的状况下,基于信号的中断机制。
参见《Poll Mode Driver》
2.5 包转发算法支持
dpdk有哈希(librte_hash)和最长前缀匹配(LPM,librte_lpm)库来支持包转发。
详见《Hash Library》和《LPM Library》
2.6 librte_net
这个库收集了ip协议定义和方便的宏定义。这些都基于FreeBSD IP协议栈的代码且包含协议号(IP头用到的),ip相关的宏定义,IPv4和IPv6头结构和SCTP头结构。