summaryrefslogtreecommitdiffstats
path: root/src/vlib/init.h
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2019-06-03 19:48:22 -0400
committerDamjan Marion <dmarion@me.com>2019-06-04 13:04:42 +0000
commitc602b384ac022f70690a3a7c711149f7cb63ad12 (patch)
treecad51d5702502d35c714b3a003d000ffe7aae4db /src/vlib/init.h
parentc424de75e561b2197d29812b3900db58a06096d7 (diff)
sort worker-thread init functions in advance
Otherwise, all N worker threads try to sort the list at the same time: a good way to have a bad day. This approach performs *far* better than maintaing order by adding a spin-lock. By direct measurement w/ elog + g2: 11 threads execute the per-thread init function list in 22us, vs. 50ms with a CLIB_PAUSE() enabled spin-lock. Change-Id: I1745f2a213c0561260139a60114dcb981e0c64e5 Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/vlib/init.h')
-rw-r--r--src/vlib/init.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/vlib/init.h b/src/vlib/init.h
index 6d2711489d8..fc638013efc 100644
--- a/src/vlib/init.h
+++ b/src/vlib/init.h
@@ -328,7 +328,11 @@ clib_error_t *vlib_call_all_main_loop_exit_functions (struct vlib_main_t *vm);
clib_error_t *vlib_call_init_exit_functions (struct vlib_main_t *vm,
_vlib_init_function_list_elt_t **
headp, int call_once);
-
+clib_error_t *vlib_call_init_exit_functions_no_sort (struct vlib_main_t *vm,
+ _vlib_init_function_list_elt_t
+ ** headp, int call_once);
+clib_error_t *vlib_sort_init_exit_functions (_vlib_init_function_list_elt_t
+ **);
#define foreach_vlib_module_reference \
_ (node_cli) \
_ (trace_cli)