From: Paolo Bonzini Date: Wed, 17 Aug 2011 09:42:51 +0000 (-0400) Subject: urcu-qsbr: avoid useless futex wakeups and burning CPU for long grace periods X-Git-Tag: v0.6.5~51^2 X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=commitdiff_plain;h=83a2c42177d2b28890bc3674d30f9ed5f8edb0a8;hp=83a2c42177d2b28890bc3674d30f9ed5f8edb0a8 urcu-qsbr: avoid useless futex wakeups and burning CPU for long grace periods I noticed that urcu makes exactly _one_ attempt at using futexes to avoid busy looping on synchronize_rcu. The attached patch instead switches from busy waiting to futexes after RCU_QS_ACTIVE_ATTEMPTS. To limit the amount of system calls, reading threads remember whether they already had a quiescent state in this grace period; if so they were already removed from the list, and can avoid signaling the futex. Performance measured with rcutorture (nreaders: 10, nupdaters: 1, duration: 10, median of nine runs): RCU_QS_ACTIVE_ATTEMPTS == 100, no patch n_updates = 292 RCU_QS_ACTIVE_ATTEMPTS == 1, no patch n_updates = 290 RCU_QS_ACTIVE_ATTEMPTS == 100, with patch n_updates = 408 RCU_QS_ACTIVE_ATTEMPTS == 1, with patch n_updates = 404 (the first two cases are obviously the same; the only change is when the futex is used, but over many calls there is no difference). This patch matches the update to the Promela model. Signed-off-by: Paolo Bonzini Signed-off-by: Mathieu Desnoyers ---