diff options
author | Tom Seidenberg <tseidenb@cisco.com> | 2020-07-10 15:49:03 +0000 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2020-07-16 21:44:42 +0000 |
commit | 6c81f5a2493ff65b4dacfef45db8a1ee459a738f (patch) | |
tree | 24343a92e18599be4e4b4aa360ab7b2c13cdb878 /src/plugins/mdata/mdata.c | |
parent | bab02f0b184b63c4159ded030cf34044be10da40 (diff) |
misc: add callback hooks and refactor pmc
Callbacks for monitoring and performance measurement:
- Add new callback list type, with context
- Add callbacks for API, CLI, and barrier sync
- Modify node dispatch callback to pass plugin-specific context
- Modify perfmon plugin to keep PMC samples local to the plugin
- Include process nodes in dispatch callback
- Pass dispatch function return value to callback
Type: refactor
Signed-off-by: Tom Seidenberg <tseidenb@cisco.com>
Change-Id: I28b06c58490611e08d76ff5b01b2347ba2109b22
Diffstat (limited to 'src/plugins/mdata/mdata.c')
-rw-r--r-- | src/plugins/mdata/mdata.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/plugins/mdata/mdata.c b/src/plugins/mdata/mdata.c index fc5bbfbb571..f74564eb33c 100644 --- a/src/plugins/mdata/mdata.c +++ b/src/plugins/mdata/mdata.c @@ -21,6 +21,7 @@ #include <vlibapi/api.h> #include <vlibmemory/api.h> +#include <vppinfra/callback_data.h> #include <vpp/app/version.h> #include <stdbool.h> @@ -42,9 +43,8 @@ static mdata_t mdata_none; before_or_after: 0 => before, 1=> after */ static void -mdata_trace_callback (vlib_main_t * vm, u64 * c0, u64 * c1, - vlib_node_runtime_t * node, - vlib_frame_t * frame, int before_or_after) +mdata_trace_callback (vlib_node_runtime_perf_callback_data_t * data, + vlib_node_runtime_perf_callback_args_t * args) { int i; mdata_main_t *mm = &mdata_main; @@ -53,6 +53,12 @@ mdata_trace_callback (vlib_main_t * vm, u64 * c0, u64 * c1, u32 n_left_from; mdata_t *before, *modifies; u8 *after; + vlib_main_t *vm = args->vm; + vlib_frame_t *frame = args->frame; + vlib_node_runtime_t *node = args->node; + + if (PREDICT_FALSE (args->call_type == VLIB_NODE_RUNTIME_PERF_RESET)) + return; /* Input nodes don't have frames, etc. */ if (frame == 0) @@ -68,7 +74,7 @@ mdata_trace_callback (vlib_main_t * vm, u64 * c0, u64 * c1, vlib_get_buffers (vm, from, bufs, n_left_from); b = bufs; - if (before_or_after == 1 /* after */ ) + if (args->call_type == VLIB_NODE_RUNTIME_PERF_AFTER) goto after_pass; /* Resize the per-thread "before" vector to cover the current frame */ @@ -152,11 +158,9 @@ mdata_enable_disable (mdata_main_t * mmp, int enable_disable) if (vlib_mains[i] == 0) continue; - clib_callback_enable_disable - (vlib_mains[i]->vlib_node_runtime_perf_counter_cbs, - vlib_mains[i]->vlib_node_runtime_perf_counter_cb_tmp, - vlib_mains[i]->worker_thread_main_loop_callback_lock, - (void *) mdata_trace_callback, enable_disable); + clib_callback_data_enable_disable + (&vlib_mains[i]->vlib_node_runtime_perf_callbacks, + mdata_trace_callback, enable_disable); } return rv; |