music,code,dialog,rest
分类: 虚拟化
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在.中描述。
2.3 核心部件
核心组件是一个库的集合,提供所有高性能包处理应用所需要元素。
Ring结构提供一个有限尺寸的,无锁多生产者多消费者 FIFO API的表。它在无锁队列上有一些优势;易于实现,适合批量操作,并且更快速。一个ring被用于Memroy Pool Manager(librte_mempool),并可以在核心之间或链接到一个逻辑核心的多个执行块之间,使用一个通用的通信机制。
这个ring 缓冲和它的用法在Ring 库中详细描述。
2.3.2 内存池管理器(librte_mempool)这些内存池分配器,在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头部结构。