DPDK组成结构

        在图1-1中,在最底部的内核态(Linux Kernel)DPDK有两个模块:KNI与IGB_UIO。其中KNI提供给用户一个使用Linux内核态的协议栈以及传统的Linux网络工具(如ethool、ifconfig)。IGB_UIO(igb_uio.ko和kni.ko.IGB_UIO)则借助了UIO技术,在初始化过程中将网卡硬件寄存器映射到用户态。

        如图1-1所示,DPDK的上层用户态由很多库组成,主要包括核心部件库(core Libraries)、平台相关模块(platform)、网卡轮询模式驱动模块(PMD-natives & virtual)、Qos库、报文转发分类算法(classify算法)等几大类,用户应用程序可以使用这些库进行二次开发,下面分别进行简要介绍。

图 1-1 DPDK组成结构

(1)核心部件库

        该模块构成的运行环境建立在Liunx上,通过环境抽象层(EAL)的运行环境进行初始化,包括巨页内存分配、内存/缓冲区/队列分配与无锁操作、CPU亲和性绑定等;其次,EAL实现了对操作系统内核与底层网卡I/O操作的屏蔽(I/O旁路了内核及其协议栈),为DPDK应用程序提供了一组调用接口,通过UIO或VFIO技术将PCI设备地址映射到用户空间,方便了应用程序的调用,避免了网络协议栈和内核切换造成的处理时延。另外,核心部件还包括创建适合报文处理的内存池、缓冲区分配管理、内存复制、定时器。环形缓冲区管理等。

(2)平台相关模块

        其内部模块主要包括KNI、能耗管理以及IVSHMEM接口。其中,KNI模块主要通过kni.ko模块将数据报文从用户态传递给内核态协议栈处理,以便用户使用传统的Socket接口对相关报文进行处理;能耗管理则提供了一些API,应用程序可以根据分组接收速率动态调整处理器频率或进入处理器的不同的休眠状态;另外,IVSHEME模块提供了虚拟机与虚拟机之间,或者虚拟机与主机之间零复制共享内存机制,当DPDK程序运行时,IVSHMEM模块会调用核心部件库API,把几个巨页映射为一个IVSHMEM设备池,并通过参数传递给QEMU,这样,就实现了虚拟机之间的零复制内存共享。

(3)轮询模式驱动模块

        PMD相关API实现了在轮询方式下进行网卡报文收发,避免常规报文处理方法中因采用中断方式造成的响应时延,极大提高了网卡收发性能。此外,该模块还同时支持物理和虚拟化两种网络接口,从仅仅支持Intel网卡,发展到支持Cisco、Broadcom、Mellanox、Chelsio等整个行业生态系统以及基于KVM、VMware、XEN等虚拟化网络接口。

        DPDK还定义了大量API来抽象数据平面的转发应用,如ACL、QoS、流分类和负载均衡等。并且,除以太网接口外,DPDK还定义用于加/解密的软硬件加速接口(extension)。

        总体而言,DPDK 技术具有如下特征:

        1、DPDK支持run to completion和pipeline两种报文处理模式 ,用户可以依据需求灵活选择,或者混合使用。run to completion是一种水平调度方式,利用网卡的多队列,将报文分发给多个CPU核处理,每个核均独立处理到达该队列的报文,资源分配相对固定,减少了报文在核间的传递开销,可以随着核的数目灵活扩展处理能力;pipeline模式则通过共享环在核间传递数据报文或消息,将系统处理任务分解到不同的CPU核上处理,通过任务分发来减少处理等待时延。

        2、DPDK的库函数和样例程序十分丰富,包括L2/L3转发、散列、ACL、QoS、环形队列等大量示例供用户参考。

猜你喜欢

转载自blog.csdn.net/weixin_45337873/article/details/127221878
今日推荐