Programmer’s Guide

Release 2.1.0

翻译的目的是强化自己对dpdk的理解,看看2.1版本和现在使用的版本的差异,其次就是可能要走了,为那些要上手dpdk,但是又不想看英文资料的同志们做贡献,英语不好,有些地方可能是自己理解的不对,或者是理解了翻译不出来,看到不咋对的还是去看英文资料对照一下吧,请叫我红领巾,哈哈哈。

  1. 引言

文档提供了关于软件架构.开发环境的信息和优化指导.

对于范例程序和编译指令以及运行每个例子的星系,请查看<DPDK Sample Applications User Guide>

对于编译和运行程序总的说明见<DPDK Getting Started Guide>就是那个dpdk2.1开发入门手册。

1.1  文档总览

这个还是参见入门手册吧,每个文档都有这个….

1.2  相关的出版物

下面这个文档提供了使用dpdk开发程序相关的资料:

Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide

Part1:架构概览

  1. 概要

这部分提供了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头结构。

DPDK2.1开发者手册1-2的更多相关文章

  1. DPDK2.1开发者手册4-7

    Mempool Labrary 一个内存池(memory pool)就是固定大小对象的分配器.在dpdk中,它是通过名字来标示唯一性的,且使用环形队列来保存没有使用的空闲对象.它提供了一些可选项服务例 ...

  2. DPDK2.1开发者手册3-4

    环境抽象层EAL 环境抽象层的任务对访问底层资源例如硬件和内存提供入口.它提供了隐藏应用和库的特殊性性的通用接口.它的责任是初始化分配资源(内存,pci设备,定时器,控制台等等). EAL提供的典型服 ...

  3. Cocoa编程开发者手册

    Cocoa编程开发者手册(Objective-C权威著作超一流翻译阵容) [美] 奇斯纳尔(Chisnall,D.)  著 霍炬等 译 ISBN 978-7-121-12239-2 2013年7月出版 ...

  4. 阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  5. MeterSphere开发者手册

    什么是 MeterSphere MeterSphere 是一站式的开源企业级持续测试平台, 涵盖测试跟踪.接口测试.性能测试. 团队协作等功能,兼容 JMeter 等开源标准,有效助力开发和测试团队充 ...

  6. 阿里巴巴 《Java 开发者手册》+ IDEA编码插件

    4月22日,阿里巴巴发布了泰山版<Java 开发手册>,以前以为终极版就真的是终极版了,没想到还是想的太简单了,继终极版之后又发布了详尽版.华山版,这不,泰山版又来了.想想也对,行业一直在 ...

  7. 学霸数据处理项目之数据处理网页以及后台以及C#代码部分开发者手册

    写在前面,本文将详细介绍学霸数据处理项目中的数据处理网页与后台函数,以及c#代码中每一个方法的意义及其一些在运行方面需要注意的细节,供开发人员使用,开发人员在阅读相关方法说明时请参照相关代码,对于本文 ...

  8. Angular开发者手册重点翻译之指令(一)

    创建自定义的指令 这个文章将解释什么需要在自己的angularjs应用中创建自己的指令,以及如何实现它. 什么是指令 在高的层面上讲,指令是DOM元素中的标记(例如一个属性,一个节点名,注释或者CSS ...

  9. 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』

    作者:阿里云用户mr_wid ,z)NKt#   @I6A9do   如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV   RsfTUb)<   投票标题:  28.[阿里云 ...

随机推荐

  1. Mysql + keepalived 实现双主热备读写分离【转】

    Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论   架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...

  2. iOS应用内语言切换功能

    当我们的应用仅仅面向国内用户群,一般仅支持一种语言--中文就可以了.当面向国外用户时就需要进行国际化了,不仅仅是语言的转变,也可能包括设计风格,页面布局.交互效果的转变,如微信,微博,QQ这类应用都有 ...

  3. Linux下python升级

    Centos即使用Yum更新也是Python2.6.6所以需要升级到Python2.7.8 1.先下载源码包 1 wget https://www.python.org/ftp/python/2.7. ...

  4. 安装android studio 出现的路径问题 tools.jar' seems to be not in Android Studio classpath

    尝试一下android studio  ,谁知出现路径问题 'tools.jar' seems to be not in Android Studio classpath. Please ensure ...

  5. LINUX更改时区和时间

    因为公司运营海外游戏,服务器也多数放在国外,有时候要求服务器时区和时间要与所服务的地区一致,这里就涉及到更改服务器时区和时间的问题: 下面以一台在美国的服务器为例,我们的IDC提供商是一家德国公司,服 ...

  6. 判断两条直线的位置关系 POJ 1269 Intersecting Lines

    两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...

  7. IE7append新的元素自动补充完整路径

    在IE7下,进行append操作时,会把像<img />的src补成完整路径.对于上传到临时目录的图片,提交到后台要进行路径判断的情形要十分注意.

  8. 学习WCF(1)

    1. 什么是WCF WCF是创建面向服务应用程序的一个框架,用WCF, 你可以发送异步消息. 一个服务的终结点可以是服务宿主在IIS上面,也可以是一个服务宿主在应用程序上面.一个终结点也可以是客户端的 ...

  9. js添加onclick函数

    document.getElementById('Add').setAttribute("onclick",AddNum()); 相当于不停的调用Addnum函数 应改成docum ...

  10. zookeeper主要使用场景

    场景一:有一组服务器向客户端提供某种服务,我们希望客户端每次请求服务端都可以找到服务端集群中某一台服务器,这样服务端就可以向客户端提供客户端所需的服务.对于这种场景,我们的程序中一定有一份这组服务器的 ...