From ac5f0ef7cf501693a9db2fcbd95b7cde419cbb2a Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Thu, 10 Aug 2017 00:10:50 -0700 Subject: Thundering herd kills performance. A little benchmarking showed that we were encountering far too many wakeups, leading to severe performance degradation; we had a bunch of threads all sleeping on the same condition variable (taskqs) and this woke them all up, resulting in heavy mutex contention. Since we only need one of the threads to wake, and we don't care which one, let's just wake only one. This reduced RTT latency from about 240 us down to about 30 s. (1/8 of the former cost.) There's still a bunch of tuning to do; performance remains worse than we would like. --- src/core/thread.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/core/thread.c') diff --git a/src/core/thread.c b/src/core/thread.c index 3cfdd83f..6c3bd9f3 100644 --- a/src/core/thread.c +++ b/src/core/thread.c @@ -73,6 +73,12 @@ nni_cv_wake(nni_cv *cv) nni_plat_cv_wake(cv); } +void +nni_cv_wake1(nni_cv *cv) +{ + nni_plat_cv_wake1(cv); +} + static void nni_thr_wrap(void *arg) { -- cgit v1.2.3-70-g09d2