DPDK系列之三十五DPDK网络数据发送

一、网络数据发送

DPDK分析了不少,但DPDK主要功能是啥?网络通信。所以还得回归到本源来分析一下其对网络数据是如何发送的,也就是说,DPDK如何保证网络数据的高效发送,采用了什么相应的技术手段。
本篇分析介绍一下DPDK中整个网络数据发送的相关模块并初步进行说明,然后会在后面逐一展开分析。

二、DPDK对网络数据的处理

DPDK中对网络数据的处理主要有以下几个方面,涉及到从硬件(网卡等)到数据通信(DMA等);从基础数据包到上层分发处理队列;从IO处理到性能优化等等多个方面。
1、基础数据包的转发
也就是数据报文的转发就是最基础的网络数据的转发,它涉及到报文的输入、输出、调度、缓存等方方面面。
2、IO处理
在计算机中,目前PCIe是CPU和IO通信的重要总线。一般来说,在计算机,限制IO速度的除了IO通信本身的速度外,计算机总线的带宽也是一个重要的瓶颈。在DPDK中对其进行了淡民的优化并且使用DMA等技术尽量减少中间环节提高通信效率。
3、硬件优化
特别是网卡的优化,是重中之重。在计算软件的设计中,有一个原则,就是最小功能原则,自己只管自己的事。这从设计一般来说是最优的,但在性能角度未必。DPDK就是抓住了这一点,把网卡等硬件整体来看,通过一系列的软件设计和硬件优化达到了一个整体的最优的效果。
4、流分类和多队列技术
网卡多队列技术是指一个网卡上的DMA队列有多个,即网卡有基于多个DMA队列分配的机制。而流分类则是指网卡可根据具体的网络数据包的性质将其分成不同的类型的技术。前者很好理解,多队列意味着数据包转发可以并行进行;而后者稍微难以理解,其实分析后就明白了。流分类和多队列技术是一个衔接匹配的流程,只有将原始数据包可以根据一定类别进行分类,才可以有针对性的对某些数据进行加速或者优化。比如实时控制数据,就可以专门分流出来引导入一个专门的队列进行数据处理。

5、软件定义网络和硬件加速和卸载
软件定义网络(SDN)是指抽象出控制平面、数据平面、管理平面三个不同的层,通过分层实现网络流量的灵活控制,使网络更加智能并提供一个应用创新的良好平台。它其实就是网络虚拟化的一种实现形式。
硬件卸载是指将某些任务或计算从计算机的CPU 转移到专用硬件组件(例如 NIC 或GPU等硬件专门芯片)的过程,以提高系统性能和效率。
软件定义网络相当抽象,大家可以简单理解为一种网络虚拟化,和硬件虚拟化有些类似,只是抽象的层次更高一些。而硬件卸载主要是不要被名字卸载误导,硬件卸载指的是对主流的混合处理单元(如CPU等)进行功能卸载,卸载的功能由于处理呢?即专门的硬件芯片也就是刚刚提到的网卡或者GPU等。
前者的意义不必多说,后者主要是降低了CPU与网卡等的来回通信浪费的时间,一种很好的优化手段。

三、总结

DPDK的设计精髓在分析的流程中,逐渐变得越来越清晰。还是那句话,重点是借鉴DPDK的设计思想和具体实现方法为我所用。拿来主义,好的,就得要拿来,不但拿来,还要消化吸收。intel能发起这个项目,也正是因为自身有这方面的需求。而国内的开发者也可以从这个角度来学习并从中有所启发,搞好自己的项目。

你可能感兴趣的:(网络开发,网络)