From c0c4eec3bc309bcc656eade82f17754875f9ed7c Mon Sep 17 00:00:00 2001 From: Dave Wallace Date: Tue, 21 Jan 2020 16:56:19 +0000 Subject: nsim: enable output scheduling on main thread Type: fix Change-Id: I5d47cb9bc7eb7f3c8485e3b42f0701e81d87ba2a Signed-off-by: Dave Wallace --- src/plugins/nsim/nsim.c | 30 ++++++++++++++++++++++++++++-- src/plugins/nsim/nsim.h | 1 + 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/plugins/nsim/nsim.c b/src/plugins/nsim/nsim.c index 5bc9eaecdd6..c6414905018 100644 --- a/src/plugins/nsim/nsim.c +++ b/src/plugins/nsim/nsim.c @@ -182,7 +182,8 @@ nsim_configure (nsim_main_t * nsm, f64 bandwidth, f64 delay, f64 packet_size, vec_validate (nsm->wheel_by_thread, num_workers); /* Initialize the output scheduler wheels */ - for (i = num_workers ? 1 : 0; i < num_workers + 1; i++) + i = (!nsm->poll_main_thread && num_workers) ? 1 : 0; + for (; i < num_workers + 1; i++) { nsim_wheel_t *wp; @@ -205,7 +206,8 @@ nsim_configure (nsim_main_t * nsm, f64 bandwidth, f64 delay, f64 packet_size, vlib_worker_thread_barrier_sync (vm); /* turn on the ring scrapers */ - for (i = num_workers ? 1 : 0; i < num_workers + 1; i++) + i = (!nsm->poll_main_thread && num_workers) ? 1 : 0; + for (; i < num_workers + 1; i++) { vlib_main_t *this_vm = vlib_mains[i]; @@ -287,6 +289,28 @@ nsim_cross_connect_enable_disable_command_fn (vlib_main_t * vm, return 0; } +static clib_error_t * +nsim_config (vlib_main_t * vm, unformat_input_t * input) +{ + nsim_main_t *nsm = &nsim_main; + + while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + { + if (unformat (input, "poll-main-thread")) + { + nsm->poll_main_thread = 1; + } + else + { + return clib_error_return (0, "unknown input '%U'", + format_unformat_error, input); + } + } + return 0; +} + +VLIB_CONFIG_FUNCTION (nsim_config, "nsim"); + /*? * Enable or disable network simulation cross-connect on two interfaces * The network simulator must have already been configured, see @@ -584,6 +608,8 @@ set_nsim_command_fn (vlib_main_t * vm, return clib_error_return (0, "drop fraction must be between zero and 1"); } + else if (unformat (input, "poll-main-thread")) + nsm->poll_main_thread = 1; else break; } diff --git a/src/plugins/nsim/nsim.h b/src/plugins/nsim/nsim.h index 6afe32dc7f7..0ed9b251fbc 100644 --- a/src/plugins/nsim/nsim.h +++ b/src/plugins/nsim/nsim.h @@ -68,6 +68,7 @@ typedef struct f64 bandwidth; f64 packet_size; f64 drop_fraction; + u32 poll_main_thread; u64 mmap_size; -- cgit 1.2.3-korg