(dpdk f-stack)-通过kni与kernel上服务通信

Posted ygmdream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(dpdk f-stack)-通过kni与kernel上服务通信相关的知识,希望对你有一定的参考价值。

fstack利用dpdk读取物理网卡通过kni虚拟网卡将数据包发给kernel协议栈:
     dpdk从物理网卡读取数据包--》将此数据包入ring--》kni_process_tx读取ring中数据包--》将数据包发给 kni虚拟网卡--》kernel协议栈将包给应用程序。fstack从kni虚拟网卡读取kernel协议栈发来的数据包再利用dpdk从物理网卡发出去:
     应用程序发包给kernel协议栈--》将数据包发给 kni虚拟网卡--》ff_eth_tx_burst从kni虚拟网卡读取数据包--》调用dpdk api将数据包从物理端口发出去。
     
kni代码分析:
    ff_kni_init--判断当前是 RTE_PROC_PRIMARY worker 才初始化kni网卡 rte_kni_init(nb_ports)即dpdk接管的每个物理网卡对应一个虚拟网卡;
    
    /*每个nginx worker将需要给kernel的数据包放到当前虚拟网卡的ring队列中: kni_rp[port_id]*/
    每个worker执行 main_loop-->process_packets--ff_kni_enqueue(port_id, rtem);
    int
    ff_kni_enqueue(uint16_t port_id, struct rte_mbuf *pkt)
    
        int ret = rte_ring_enqueue(kni_rp[port_id], pkt);
        if (ret < 0)
            rte_pktmbuf_free(pkt);

        return 0;
    

    ff_dpdk_if.c--worker的main_loop

以上是关于(dpdk f-stack)-通过kni与kernel上服务通信的主要内容,如果未能解决你的问题,请参考以下文章

(dpdk f-stack)-通过kni与kernel上服务通信

运行DPDK KNI示例的问题

DPDK KNI 接口1

DPDK KNI 接口2

(dpdk f-stack) -网卡多队列

(dpdk f-stack) 为何使用巨页