DPDK:简介

背景:最近因为要移植一些项目到国产化设备上,但是涉及到网间通信,在10GE以上网络间通信,国产化CPU存在较大的性能问题,会有cpu中断处理不及时而造成网卡队列充满的情况。所以产生了有没有啥办法能降低cpu软中断的办法。这就引入了今天的主题DPDK,网上DPDK的资料茫茫多,有很多写的很好的,但是也有不少明显就是在注水,所以对于一个新人小白来说,这一点还是不够友好。

DPDK是什么:DPDK全称是Intel Data Palne Development Kit,是Intel 提供的数据平面开发工具,为Inter architecture(IA)处理器架构下用户高效的数据包处理提供库函数和驱动的支持,它不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。具体体现在DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。

传统报文收发的缺点:

  1. 传统的收发报方式都必须采用用硬中断来做通讯,每次硬中断大约消耗100微妙,这还不算因为终止上下文所带来的Cache Miss。
  2. 数据必须从内核态用户态之间切换拷贝带来大量CPU消耗,全局锁竞争。
  3. 收发包都有系统调用的开销。
  4. 内核工作在多核上,为可全局一致,即使采用Lock Free,也避免不了锁总线,内存屏障带来的性能损耗。
  5. 从网卡到业务进程,经过的路径太长,有些其实未必需要,例如netfilter框架,这些都带来了一定的消耗,而且容易Cache Miss。

DPDK的优点:

性能高、用户态开发、死后易恢复。

DPDK基本原理:

DPDK基于UIO(Userspace I/O)旁路数据。数据从网卡->DMA接收到硬件中断->将数据拷贝到大页内存->DPDK轮询模式->DPDK基础库->业务进程。

下图是普通linux网卡数据报文与DPDK数据报文走向流程对比。

DPDK:简介_第1张图片

未完待续。。。

你可能感兴趣的:(DPDK)