博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
f-stack 队列和进程关系
阅读量:4056 次
发布时间:2019-05-25

本文共 1581 字,大约阅读时间需要 5 分钟。

f-stack官网:

f-stack详细解释:

f-stack是支持多进程的,进程分为RTE_PROC_PRIMARY(只有一个)和RTE_PROC_SECONDARY(可以多个)

RTE_PROC_PRIMARY进程是主进程,做所有初始化的工作,RTE_PROC_SECONDARY进程会通过共享内存获取RTE_PROC_PRIMARY进程初始化好的数据。

各进程绑定独立的网卡队列和 CPU,请求通过设置网卡 RSS 散落到各进程进行处理,

队列和进程是怎么分配的呢?

最好先理解dpdk收发包原理()

config.ini里参数lcore_mask决定了启用几个进程,eg lcore_mask=1 启用一个;lcore_mask=3启用2个进程。16进制的位掩码。

init_port_start函数中调用rte_eth_dev_configure(port_id, nb_procs, nb_procs, &port_conf)设置接收和发送队列。假如nb_procs=2的话,这个动作会初始化0,1接收队列和0,1发送队列,0号进程使用0号接收和发送队列,以此类推。

f-stack启动脚本在解析config.ini(lcore_mask=3)后执行启动命令,以nginx为例
nginx ./config.ini -c 3 --proc-type=primary --num-procs=2 --proc-id=0

nginx./config.ini -c 3 --proc-type=primary --num-procs=2 --proc-id=1

f-stack库解析参数,num-procs参数解析ff_global_cfg.dpdk.nb_procs,也就是上面的nb_procs,proc-id解析为ff_global_cfg.dpdk.procs_id.lcore_conf.nb_rx_queue变量会存储进程队列个数,lcore_conf.rx_queue_list存储队列编号。

在main_loop函数里
for (i = 0; i < qconf->nb_rx_queue; ++i) {                        port_id = qconf->rx_queue_list[i].port_id;            queue_id = qconf->rx_queue_list[i].queue_id;            ctx = veth_ctx[port_id];                        if (enable_kni && rte_eal_process_type() == RTE_PROC_PRIMARY) {                ff_kni_process(port_id, queue_id, pkts_burst, MAX_PKT_BURST);            }            process_arp_ring(port_id, queue_id, pkts_burst, ctx);                        nb_rx = rte_eth_rx_burst(port_id, queue_id, pkts_burst,                MAX_PKT_BURST);            if (nb_rx == 0)                {                    continue;                }
上面代码就是进程在自己接收队列接收数据,按照上面配置,0号进程只会从0号接收队列接收数据,1号进程只会接收1号接收队列数据。发送同理。

转载地址:http://xbqci.baihongyu.com/

你可能感兴趣的文章
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
自定义 select 下拉框 多选插件
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>
gdb debug tips
查看>>
linux和windows内存布局验证
查看>>
linux insmod error -1 required key invalid
查看>>
linux kconfig配置
查看>>
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>