Chinaunix首页 | 论坛 | 博客
  • 博客访问: 220043
  • 博文数量: 61
  • 博客积分: 1547
  • 博客等级: 上尉
  • 技术积分: 659
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-12 23:46
个人简介

music,code,dialog,rest

文章分类

全部博文(61)

文章存档

2019年(6)

2018年(4)

2017年(5)

2016年(20)

2015年(4)

2014年(2)

2013年(2)

2012年(1)

2011年(1)

2010年(1)

2009年(2)

2007年(10)

2006年(3)

分类: 虚拟化

2016-11-08 08:10:02

本章节给出一个有关DPDK架构的全局概述。

DPDK的主要目标是提供一个简单完整的,用于在数据平面应用的,快速包处理的框架。用户可以使用代码理解一些使用的技术,基于此创建原型应用,或增加他们自己的协议栈。提供一个使用DPDK,另一个生态系统的选项。

框架通过EAL环境的建立,为特定的环境创建了一个库的集合, 可以是对于 linux用户空间的编译器,或一个特定的平台的,Intel 32位或64位架构的一种特别的模式。 这些环境通过使用make文件和配置文件创建。一旦EAL库创建,用户可以链接这些库,创建他们自己的应用。其他EAL外部的库,包括Hash,最长前缀匹配(LPM)和rings 库也在提供之列。还提供了应用的样例,以帮助显示给用户使用各种DPDK功能的方法。

DPDK实现了运行一个包处理的完整模型,这里所有的资源必须在调用数据应用前分配完成,作为在逻辑处理核心上运行的执行单位。模型不支持一个调度器,并且所有设备以Polling形式访问。不使用中断的主要的原因是中断处理的性能开销。

除了运行-完成模型之外,一个管道模型也可以通过利用rings在核心间传递包或消息被实现。这个允许任务以多阶段执行,并可以允许在核心上获得更高的代码效能。

2.1 开发环境

DPDK项目安装需要Linux和相关的工具链,例如一个或多个编译器,汇编器,make工具,编辑器和各种库,以创建DPDK组件和库。

一旦这些针对特定环境和架构的库被创建,它们就可以被用于创建用户数据平面的应用。

当为linux用户空间创建应用时,会使用glibc库。对于DPDK应用,两个环境变量RTE_SDK和RTE_TARGET必须在编译应用前配置好。下面是这些变量的设置方法:

export RTE_SDK=/home/user/DPDK

export RTE_TARGET=x86_64-native-linuxapp-gcc

设置开发环境的更多信息见 DPDK 启动指南。

2.2 环境抽象层
EAL层提供一个通用的接口,用于为应用和库隐藏特定的环境。这些由EAL提供的服务是:


  •          DPDK加载和启动
  •          多进程和多线程类型的支持
  •          核心亲和性/分配方法
  •          系统内存分配和回收
  •          原子/锁操作
  •          时间引用
  •          PCI总线访问
  •          跟踪和排错功能
  •          CPU特性标识
  •          中断处理
  •          告警操作
  •         内存管理(malloc)

EAL在Environment Abstraction Layer.中描述。

2.3 核心部件

核心组件是一个库的集合,提供所有高性能包处理应用所需要元素。

Core Components Architecture

2.3.1 环状缓存管理器 (librte_ring)

Ring结构提供一个有限尺寸的,无锁多生产者多消费者 FIFO API的表。它在无锁队列上有一些优势;易于实现,适合批量操作,并且更快速。一个ring被用于Memroy Pool Manager(librte_mempool),并可以在核心之间或链接到一个逻辑核心的多个执行块之间,使用一个通用的通信机制。

这个ring 缓冲和它的用法在Ring 库中详细描述。

2.3.2 内存池管理器(librte_mempool)
内存池管理器,负责在内存中分配对象池。一个池由一个名字标识并使用一个ring存放自由对象。它提供一些其他的服务,例如一个基于每核的对象缓存,和对齐帮助器用于确保对象对齐补足,以便在所有内存通道中均等分布。

这些内存池分配器,在Mempool库中描述。

2.3.3 网络包缓存管理(librte_mbuf)

Mbuf库提供创建和销毁由DPDK应用用于存储消息缓存的设施工具。这些消息缓存在启动的时候创建并存储在mempool中,使用DPDK mempool库。

这个库提供一个API分配或释放mbufs, 操纵控制信息缓存(ctrlmbuf)这些是通用的消息缓存和用于携带网络包的包缓存(pktmbuf) 。

2.3.4 计时器管理器(librte_timer)

这个库提供为DPDK执行单元提供计时器服务,提供异步执行一个函数的能力。它可以周期性地功能调用,或仅仅一次调用。它使用由EAL提供的计时器接口,获得一个精确的时间参考,并按需要基于每核心基础启动。

2.4 以太网轮询模式驱动架构

DPDK对1GbE、10GbE和40GbE,包含轮询模式驱动和设计为非异步、非中断的信号机制的半虚拟化virtio以太网控制器。

见 轮询模式驱动。

2.5 包转发算法支持

DPDK 包含librte_hash 和最长前缀匹配(LPM,librte_lpm)库,以支持对应的包转发算法。详见Hash库和LPM库。

2.6 librte_net

Librte_net库是一个IP协议定义和便利宏。它基于FreeBSD IP 协议栈,并包含协议号(在IP的头部),IP相关的宏,IPv4/IPv6 头部结构和TCP UDP和SCTP头部结构。

原文所在

zenith
20161108
阅读(1263) | 评论(0) | 转发(0) |
0

上一篇:开源python工具集

下一篇:玩转ssh

给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册