dpdk 小记

443 阅读1分钟
  1. KNI

KNI是指内核(态)虚拟出来的一个 Veth0,是内核协议栈的一个借口,kni 是用于 dpdk 与 内核通信的,不用于对外通信.

image.png

dpdk 协议栈 和 内核协议栈是同时在跑的。 dpdk 需要独占 cpu,内核不会使用。

  1. DPDK 基于多线程绑定 CPU 从而降低cpu在进程间的切换,提升包的转发效率

  2. udp

image.png

  1. 两个字节以上的包括两个字节一定要转网络字节序

  2. vpp

dpdk 是一个用户态网络开发框架 需要直接实现协议,开发难度较大。 vpp: 包括数据面与控制面: 常用于:vpn, ddos, 黑名单,安全策略,LB

vpp 结合 dpdk, 1. 基于 dpdk 抓取数据, 2. vpp 再接着处理 优点:

  1. vpp 是一个完整的数据面的开发框架, 具备 flowtable
  2. 完全以 “插件式” (plugin|node 设计) 实现开发

缺点:

  1. 需要开发者引用,不支持持久化

plugin: 表示应用,即插即用 node: 表示网络功能

ddos --> 黑名单 --> 白名单 --> nat --> flowcontrol

以上每个部分是一个node,将网络功能以链表串起来

plugin的流程:

  1. init_plugin

  2. set command

  3. function

  4. mempool 与 mempool

image.png

  1. ring buffer

image.png

  1. igb uio

igb是一个名字,uio是一个框架

    1. dpdk绑定以后,ifconfig 看不到对应网口
    1. vmxnet3/nfio/igb_uio/e1000 概念       
    1. virtio/vhost 概念                               
    1. kni

image.png

  1. kni

kni

kni_open

/dev/kni net_device

insmod kni.ko /usertools/dpdk-setup.sh 45

dpdk-rec --> alloc

kni_rx

kni_tx

kni_close