Post

Dpdk 初学(4) 基础概念

DPDK的基础性概念

看了两个example,感觉容易云里雾里的跟着代码走但是不知道是在说什么,回去重头看看一些基础概念。

DPDK简介

DPDK全称Data Plane Development Kit,是Intel的加速包处理软件库,由多个library组合而成,通过绕过内核协议栈来提供更快的包处理速度。

DPDK为什么能更快的处理数据包

  • 多核处理器进行任务分配
  • 放弃中断,采用用户态驱动轮询模式
  • 更优的内存结构
  • 无锁结构

多核的优势

减少调度开销,可以将一个task固定在某一个逻辑核上,甚至在启动的时候直接预留指定逻辑核。

采用PMD

由于现在的内核采用中断,在数据包到达时,触发中断通知CPU,CPU再取数据。这样在面对大量数据包的时候,中断的上下文切换就是瓶颈。DPDK没有采用中断的方式,切换成轮询模式,能够极大的减少不必要开销。

内存结构

内存中的每一次miss,都要触发一次中断来进行寻址,如果能够有效命中就能减少这方面的CPU时钟周期。linux如今可以采用hugetlbfs来支持大页内存预留,DPDK通过大页内存,减少不必要的miss。同时dpdk还会利用cpu的3级缓存(LLC)和NUMA结构,尽量减少CPU直接和我们平时说的RAM进行数据交换。

无锁结构

这里应该主要指rx/tx队列实现采用了无锁环,通过去除锁来减少访问时可能带来的额外开销。无论是自旋锁还是互斥锁,如果遇见请求锁失败的情况,就会触发空等待或者调度,都会浪费大量的时钟周期。

DPDK中的一些基础概念

  1. NIC网卡

    不一定是实际的物理网卡,如果是通过Virtual Function模拟出来的nic也可以。VF是SR-IOV的一种特性,为了解决虚拟机独占物理设备的问题。

  2. RX/TX队列

    每一个NIC都有自己的收发队列(rx/tx queue),在支持多队列的NIC上,还可以存在multi queue。每一个队列中,是由收发描述符(rxd/txd)来组成的。

  3. RXD/TXD

    收发描述符16B大小(Intel 82599),他们指向了一个缓冲区(mbuf buffer),通过这个描述符来指向具体的存放数据的地址,通常是一个帧(frame)大小

This post is licensed under CC BY 4.0 by the author.