一、DPDK是什么
---------
DPDK是专为快速收发包所开发的一系列的库文件和驱动代码。DPDK最初的动机很简单,为了证明Intel架构多核处理器能够支撑高性能数据包处理,现在DPDK逐渐成为通用多核处理器高性能数据包处理的业界标杆。可以用来1)在极短的时间里面完成收发包2)开发快速的抓包算法。3)运行第三方的快速路径栈
二、传统数据包处理流程下的弊端
---------------
在讲解DPDK解决了什么问题之前,我们先来看看高速数据包处理领域存在的难题
传统网络设备驱动包处理的流程如下:
1、数据到达网卡设备
2、网卡通过DMA取数据
3、取到数据后,网卡发送中断,唤醒处理器。
4、驱动软件填充读写缓冲区数据结构
5、数据报文到达内核协议栈
6、将数据报文从内核态拷贝到用户态
7、用户态进而处理数据报文
传统数据包处理方式存在以下两个难题
1.每来一次报文,就触发一次中断,互联网时代的带宽从千兆到万兆,甚至运营商级别的带宽都达到了100万兆,采用中断模式时,大量数据的到来会导致频繁的中断触发,系统承受不了如此频繁的中断。
2.数据包需要从内核态拷贝到用户态,当数据量巨大时,这个拷贝操作会大幅的降低数据包处理性能。
三、DPDK使用的技术以及解决的问题
------------------
DPDK框架通过使用一些工程技术很少的解决了上述问题。
3.1 轮询采用类似网络编程中的poll模型来接收数据包,可避免中断上下文切换带来的开销
3.2 用户态驱动linux下用户态使用的技术是UIO技术,后面会做详细的介绍。在这种工作模式下,可避免不必要的内核拷贝,又避免了系统调用。一个间接的影响在于,用户态驱动不再受限于内核现有的数据格式和行为定义。
3.3 亲和性和独占DPDK工作在用户态,但是线程的调度还是依赖于内核。利用CPU的亲和性绑定,可以让指定任务运行在某个cpu逻辑核心上,避免了线程在不同核心之间频繁切换,不同核心之间切换容易导致cache miss和cache write back,从而造成性能下降。
3.4 大页内存利用大页内存可以有效的降低TLB miss,从而减少访存的开销。
3.5 软件调优比如结构体的cache line对齐比如数据在多核间访问避免跨cache line访问比如适时的预读取数据比如多元数据批量操作
3.6 充分挖掘网卡性能,使用硬件的新特性
三、DPDK应用场景
------------------
而DPDK最大的优点就是改进小封包吞吐量与作业负荷效能,传统的网路架构都是针对大封包吞吐量进行最佳化,而Intel® DPDK可以解决小封包所带来效能不佳的问题。
这几年电信网络云化逐渐成为不可逆转的趋势,而电信网络是典型的管道类业务,用ovs远远无法满足动辄上百G的转发需求,
因此DPDK被广泛应用。
华为,爱立信,思科等电信设备商的高转发电信云设备基本都已经支持DPDK,在全球上百家主流运营商部署测试活商用,如AT&T,Vodafone,中国移动等。
除了应用在企业终端外, Intel DPDK 也可以在软体定义网路 (SDN) 与网路功能虚拟化 (NFV) 中扮演着重要的角色。
相信读完这篇博客,你对dpdk的理解有了一个总体上的认识。从下节开始,我开始讲解一些DPDK开发中的基础概念,