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中的一些基础概念
NIC网卡
不一定是实际的物理网卡,如果是通过Virtual Function模拟出来的nic也可以。VF是SR-IOV的一种特性,为了解决虚拟机独占物理设备的问题。
RX/TX队列
每一个NIC都有自己的收发队列(rx/tx queue),在支持多队列的NIC上,还可以存在multi queue。每一个队列中,是由收发描述符(rxd/txd)来组成的。
RXD/TXD
收发描述符16B大小(Intel 82599),他们指向了一个缓冲区(mbuf buffer),通过这个描述符来指向具体的存放数据的地址,通常是一个帧(frame)大小