aboutsummaryrefslogtreecommitdiffstats
path: root/src/vlib/threads.h
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2019-04-23 15:13:14 -0400
committerDave Wallace <dwallacelf@gmail.com>2019-05-02 22:33:37 +0000
commite1062522d51e50cfd557a8ab66dfe19f1f86b65b (patch)
treee196942543b93f4a200caa863abf91148ccd45d4 /src/vlib/threads.h
parent15c31921a628c5500cbed2ebc588d7ddbaa970a3 (diff)
Clean up multi-thread barrier-sync hold-down timer
Main thread: don't bother with the barrier sync hold-down timer if none of the worker threads are busy. Worker threads: avoid epoll_pwait (10ms timeout) when the control-plane has been active in the last half-second. Cherry-pick a recent dangling reference fix: pool_elt_at_index after e.g. rx callback is required, in case the unix file pool expands. DO NOT cherry-pick the patch into master! Change-Id: I130dc72fd95c8a22716fa2f0f98ce35cdccc52d7 Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/vlib/threads.h')
-rw-r--r--src/vlib/threads.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/vlib/threads.h b/src/vlib/threads.h
index 0ceb21e1218..5a295e03319 100644
--- a/src/vlib/threads.h
+++ b/src/vlib/threads.h
@@ -423,6 +423,21 @@ vlib_worker_thread_barrier_check (void)
}
while (*vlib_worker_threads->wait_at_barrier)
;
+
+ /*
+ * Recompute the offset from thread-0 time.
+ * Note that vlib_time_now adds vm->time_offset, so
+ * clear it first. Save the resulting idea of "now", to
+ * see how well we're doing. See show_clock_command_fn(...)
+ */
+ {
+ f64 now;
+ vm->time_offset = 0.0;
+ now = vlib_time_now (vm);
+ vm->time_offset = vlib_global_main.time_last_barrier_release - now;
+ vm->time_last_barrier_release = vlib_time_now (vm);
+ }
+
if (CLIB_DEBUG > 0)
vm->parked_at_barrier = 0;
clib_atomic_fetch_add (vlib_worker_threads->workers_at_barrier, -1);