DPDK KNI模型

KNI(Kernel Interface)机制是为了让数据包重入内核协议栈,通过创建虚拟设备用于收发报文以达到利用内核本身已实现协议的目的。


DPDK KNI模型_第1张图片

其实dpdk例子中提供了两种方法与linux kernel协议栈交互: TAPKNI; 两种方法都是创建虚拟设备用于收发报文;

  1. TAP/TUN设备的创建:方法比较简单.但是这个方法的效率较低,数据需要从用户空间复制到内核空间,最后生成skb的时候可能还需要复制一次。
  2. 而KNI的方式:

    • RX方向: PMD分配mbuf, 收包线程收到后把mbuf放入rx_q FIFO, kni线程从rx_q取出mbuf然后转换为skb调用netif_rx把报文发送到协议栈中; 最后rx_q中取出来的mbuf放入free_q, 由用户空间的收包线程释放;(如下图所示

    • TX方向: 从协议栈发到kni设备上的报文,kni的发包函数kni_net_txalloc_q中取可用的mbuf, skb转换为mbuf, 并把mbuf放入tx_q, 用户空间的tx线程从tx_q取出mbuf并调用PMD驱动的发包函数发送报文;(如下图所示)

DPDK KNI模型_第2张图片


你可能感兴趣的:(网络与安全)