summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorAmar Tumballi <amarts@redhat.com>2019-01-02 18:20:07 +0530
committerAmar Tumballi <amarts@redhat.com>2019-01-09 02:53:27 +0000
commitd54f5cdfbca7af2da2139fb76af1f1e416a6d848 (patch)
tree7515730d4a00adaf28efce012777ccf4376a811d /contrib
parentaa28fe32364e39981981d18c784e7f396d56153f (diff)
timer-wheel: run the timer function outside of locked region
Surprizingly this also reduced 80% CPU overhead 'perf record' tool reported in posix_spin_lock in a brick-mux test volume initialization process. updates: bz#1193929 Change-Id: I4e1df60d6fd094105c312df39f1527d3f07bed68 Signed-off-by: Amar Tumballi <amarts@redhat.com>
Diffstat (limited to 'contrib')
-rw-r--r--contrib/timer-wheel/timer-wheel.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/contrib/timer-wheel/timer-wheel.c b/contrib/timer-wheel/timer-wheel.c
index cfbd74e166f..58e0607bf0c 100644
--- a/contrib/timer-wheel/timer-wheel.c
+++ b/contrib/timer-wheel/timer-wheel.c
@@ -159,7 +159,14 @@ run_timers (struct tvec_base *base)
data = timer->data;
__gf_tw_detach_timer (timer);
- fn (timer, data, call_time);
+ pthread_spin_unlock(&base->lock);
+ {
+ /* It is required to run the actual function outside
+ of the locked zone, so we don't bother about
+ locked operations inside that function */
+ fn(timer, data, call_time);
+ }
+ pthread_spin_lock(&base->lock);
}
}
pthread_spin_unlock (&base->lock);