使用DPDK收包,想要用到TCP协议栈,可选的方案有linux原生的tun/tap口以及DPDK自带的KNI驱动,这两种都是通过将DPDK收到的报文注入到linux内核来使用TCP协议栈的功能,然后,用户态协议栈可以考虑开源的f-stack,商用的可以使用6wind的协议栈(不过价格不菲)。
前面讲过f-stack的源码编译安装,最近研究了一下f-stack,对它的实现框架有了一些认识。f-stack使用的多进程单线程模型,收包模型如下图:
上图模型中,我们配置了4个cpu core,启动了4个nginx进程,其中nginx_0是DPDK Primary进程,其它三个都是Secondary进程,nginx_N绑定coreN,负责处理网卡1和网卡2的N号队列的报文,其中N=0,1,2,3。从图中可以看到,基于f-stack的应用程序都是多进程配合,每个进程的单个DPD