前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >创建自己的核绑定线程

创建自己的核绑定线程

作者头像
dpdk-vpp源码解读
发布2023-03-07 17:14:36
8730
发布2023-03-07 17:14:36
举报
文章被收录于专栏:DPDK VPP源码分析
  • 线程启动流程 以worker线程为例,介绍线程启动流程:
  • 线程注册: VLIB_REGISTER_THREAD线程注册宏注册到全局 vlib_thread_main->next链表上。
代码语言:javascript
复制
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 线程注册

  • 线程启动接口: VLIB_MAIN_LOOP_ENTER_FUNCTION函数注册到vlib_main_t的main_loop_enter_function_registrations链表,在VPP启动时调用vlib_main->vlib_call_all_main_loop_enter_functions进行加载。 所有的线程都在这里启动。

1、线程启动过程 是vlib_main函数中下面代码启动的。

代码语言:javascript
复制
/* 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);
  }
  • 疑惑解读 1. works线程的数量是哪里决定的? 由配置文件中corelist-workers 2-3 决定worker线程的创建数量,下图中vlib_unix_mian函数第三步调用early配置函数中调用cpu-config进行赋值的。

2.works线程私有的vlib_main_t结构是哪里创建的? src/vlib/threads.c文件中函数start_workers,根据workers线程和其他线程数量复制vlib_global_main到vlib_mains中,包括创建私有的线程栈。具体可以看代码。

  • 创建自己的shaping work线程: 1.注册自己的work线程 Shaping 线程需要绑核和转发报文,所以就workers线程设置一样就OK、

书写自己的函数只需要参照workers线程的就OK,vlib_worker_thread_fn 有一点比较重要就是在while循环中必须有main线程同步操作。

2.启动文件配置自己线程绑核 只需要在配置文件中增加corelist就OK。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档