typedef struct vlib_thread_registration_ {
/* constructor generated list of thread registrations */
struct vlib_thread_registration_ * next;
/* config parameters */
char * name;/*启动文件中启动几个"workers"线程 corelist-workers 3-11*/
char * short_name; /*线程重命名使用*/
vlib_thread_function_t * function;
uword mheap_size;
int fixed_count;
u32 count;
/*这个参数比较重要,如果线程不需要转发报文,可以置位1*/
int no_data_structure_clone;
u32 frame_queue_nelts;
/* All threads of this type run on pthreads */
int use_pthreads;/*设置变量标识绑定在父线程,就是可以理解为不绑核,共用父线程的资源*/
u32 first_index;
uword * coremask;
} vlib_thread_registration_t;
workers 线程注册
1、线程启动过程 是vlib_main函数中下面代码启动的。
/* Call all main loop enter functions. */
{
clib_error_t *sub_error;
sub_error = vlib_call_all_main_loop_enter_functions (vm);
if (sub_error)
clib_error_report (sub_error);
}
2.works线程私有的vlib_main_t结构是哪里创建的? src/vlib/threads.c文件中函数start_workers,根据workers线程和其他线程数量复制vlib_global_main到vlib_mains中,包括创建私有的线程栈。具体可以看代码。
书写自己的函数只需要参照workers线程的就OK,vlib_worker_thread_fn 有一点比较重要就是在while循环中必须有main线程同步操作。
2.启动文件配置自己线程绑核 只需要在配置文件中增加corelist就OK。
本文分享自 DPDK VPP源码分析 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!