dpdk的kni模块实现原理

一、kni虚拟网卡与物理网卡的对比

        相同点:

         kni虚拟网卡驱动与物理网卡驱动一样,需要在linux内核申请虚拟网卡设备的struct net结构体,并注册到网络命名空间,交由linux内核net模块进行网卡资源的操作;

        其与网卡驱动一样,kni内核模块需要对该其网卡队列分配用于收发包的mbuf内存,要实现虚拟网卡的收发包方法,已经通过ethtool对虚拟网卡进行管理的接口;

       不同点: 

       与物理网卡驱动不同的是,kni虚拟网卡设备是没有物理网卡设备的,其网卡队列不存在物理网卡的收发fifo与之对应,故不存在DMA过程,故其收发包函数不存在dma过程,不需要申请环形缓冲区,其主要的操作为将报文在网卡队列与dpdk之间进行传递;

      kni虚拟网卡的收发队列是直接申请的队列结构体,通过将kni虚拟网卡注册到网络命名空间的设备链表上,由软中断函数do_softirq直接访问虚拟网卡收发队列上的skb buf;

二、kni虚拟网卡的实现模型简述

1、kni内核模块在内核注册网卡设备结构体注册到内核网络命名空间;

2、kni内核模块在linux内核创建杂类设备,文件的file_ops定义对kni设备文件到操作,用户态程序可通过打开kni设备文件,通过ioctl向kni设备文件下发ioctl命令实现对kni设备文件的操作。其中最主要的是kni_create方法,该方法用于在内核创建kni虚拟网卡;

3、用户态程序通过打开kni设备文件&#x

上一篇:java中 静态代理模式


下一篇:英维克喜获2017“数据中心科技奖”最高奖项!