命令工具大体原理:
nginx每个worker进程都有一个独立的FreeBSD栈,执行main_loop--process_msg_ring,此函数处理流程:
1)从msg_ring[proc_id].ring[0]中出队列,取出msg;
2)判断是FF_SYSCTL类型,然后执行ff_sysctl函数获取或设置FreeBSD内核的状态参数;
3)最后再把结果msg入队列msg_ring[proc_id].ring[msg->msg_type]。
top命令行工具和nginx worker之间即使用 msg_ring 通信;
不同类型消息的ring创建:
worker的进程初始化函数 ngx_worker_process_init 中先执行 ff_mod_init, 完事执行 ff_run;
1)ff_mod_init-->ff_init-->ff_dpdk_init 函数中:
rte_eal_init:
//每个worker中针对 slave core 创建线程处理