随着软件定义网络SDN的不断发展,网络数据转发面的需求越来越多样化,这体现在更快的数据包处理速率,更高的网络吞吐带宽,更灵活的自定义网络协议。传统的硬件设备无法满足网络协议的自定义,而基于Linux内核网络协议栈的网络数据转发则存在处理流程繁琐,效率低下等问题。在此背景下,Intel公司提供了一款高性能网络数据平面开发套件DPDK(data plane development kit),它提供了一个简单方便的,完整的,快速的数据包处理解决方案。
目前,DPDK被广泛应用在网络转发组件的开发当中,如负载均衡网关,NAT网关,虚拟机交换机OVS也同样包含了对DPDK的支持。由于DPDK能够向网络转发面组件提供快速高效的对原生数据包进行处理的能力,其在DPU的研发上也扮演着重要的角色。
DPDK主要包含以下几大特性,借助这些特性网络转发面组件得以实现快速高效的数据包处理:
- 用户态数据包处理
传统情况下,当网卡收到数据包时,需要经过内核网络协议栈的处理,协议栈将头部一层层进行剥离之后,才能将最终数据交付给用户态进程;过程中会存在内核空间向用户空间进行内存拷贝的情况,这会消耗大量的计算资源。
Linux内核源码中提供了uio驱动模块,网卡硬件设备在绑定该模块之后,会将设备暴露在用户空间;DPDK通过读取该uio文件,能够直接收取原始的二层数据包并直接写入用户态进程的内存空间当中;用户态进程可直接对数据包的各层数据进行分析并根据需要进行修改、转发或选择丢弃;发送数据包时,则通过写入该uio文件进行发送。
在收取-处理-发送的过程中,数据包绕开了内核网络协议栈的处理逻辑,且处理过程中未发生过内存的拷贝,这就节省了大量的开销;且用户态进程拿到的数据包是原始的二层数据包,开发者可根据需要自主决定对该数据包的处理方式,更便于自定义网络协议的实现。
无DPDK与有DPDK的对比
DPDK工作原理
- PMD轮询模式收包
传统Linux系统中,当网卡收到数据包时,会借助DMA技术将数据包发送到预先分配好的内存缓冲区里面,之后产生中断通知内核有数据包过来。Linux内核会对中断进行响应,将接收到的数据帧交给内核中的网络协议栈进行处理,最后数据被复制到了用户空间或者直接在内核协议栈中处理完毕。
通过中断通知内核有数据包到来的方法在低带宽低吞吐等环境下能够满足需求,但在云平台这样要求高带宽高吞吐的情况下,中断方式会引发中断风暴,内核需不间断的处理中断请求,不利于内核对数据包和其他内核运算的处理。
DPDK提供了PMD(Poll mode driving)轮询模式实现对数据包的收取,不需要网卡通过中断通知内核收取到数据包,而是由用户态进程不间断去查询网卡是否收取到数据包,有则处理之,无则进行下一轮查询。在高吞吐情况下,一次轮询可批量处理多个数据包,减少了中断引发的系统开销。
- 大页内存
Linux内核中默认页面的大小是4KB,在64位系统中页表被划分为5级,用户态进程在寻址时需要经过4次页表查找才能将虚拟地址转换为物理地址。页表查找过程是高性能处理进程的一项瓶颈,而使用大页内存可有效减少页表查询的次数,减轻TLB的查询压力和查询miss的概率。在64位系统中支持2MB和1GB两种类型的大页内存,分别需要4级和3级页表的支持,DPDK一般使用1G大页内存,仅需2次页表查询即可实现虚拟地址到物理地址的转换。
- CPU独占及亲和性
运行基于DPDK的网络转发面处理组件的主机会提前将部分CPU的Processor隔离出来专门提供给DPDK使用,DPDK进程在初始化阶段会根据配置初始化线程数量,并将线程和Processor进行绑定。绑定之后Processor不会再处理绑定线程以外的其他线程,被绑定线程也不会调度到其他Processor上进行处理,此举有效减少了因线程调度产生的上下文切换的开销,并减少了Cache Miss发生的概率。
- 有助于转发处理逻辑的数据结构
DPDK提供了一些有助于编写网络转发平面处理逻辑的数据结构,如Timer,Mbuf,Ring等。Timer实现了计时器的功能;Mbuf提供了基本的内存缓存片段,用于缓存数据包,并支持片段向前后进行扩展;Ring实现了FIFO队列,且该队列是无锁的。
- QoS和ACL
DPDK提供了相应的数据结构,基于此数据结构及关联的API,可以在用户态进程中实现限速和访问控制这两项网络转发平面必须的功能。
- 适配多种类型的实体或虚拟网络设备
DPDK是由Intel开发并维护的,最初仅支持对Intel系列网卡的支持,后DPDK陆续支持了对Mellanox,Virtio等设备的支持,使得DPDK的使用范围进一步扩大。
以上是DPDK的在加速网络数据面处理上减少的开销和提供的便利,底层实现上仍然是基于Linux内核提供的功能,在接下来的几期文章中将对DPDK深入分析,以理清其内部实现机制。
原文链接:https://zhuanlan.zhihu.com/p/551726020
(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! !