Messages in this thread | | | Date | Wed, 15 Jun 2011 07:58:03 -0700 | From | "Paul E. McKenney" <> | Subject | Re: [GIT PULL rcu/urgent] fixes for slowdowns and softlockup |
| |
On Tue, Jun 14, 2011 at 09:41:07PM -0700, Paul E. McKenney wrote: > Hello, Ingo, > > This pull request fixes a softlockup and a severe performance regression.
Resending, this time copying LKML and a few additional people. For those for whom this is a duplicate, please accept my apologies.
Thanx, Paul
> Shaohua Li debugged a performance regression and found that RCU's shiny > new real-time kthreads were causing excessive lock contention in the > scheduler on large systems, resulting in severe performance regressions. > Shaohua also provided a patch that converts the RCU core back to softirq, > but still uses a real-time kthread to invoke the callbacks. This allows > RCU priority boosting to work, while greatly reducing the stress on > the scheduler. Shaohua's patch was tested by Alex Shi and Sasha Levin. > > What was intended to be a code-cleanup patch fixes a softlockup > problem reported by Daniel J Blueman. The problem was that the RCU > priority boosting kthread would not necessarily be awakened in a timely > fashion. Because kthreads are created in TASK_UNINTERRUPTIBLE state, > if a newly created kthread is left alone for more than two minutes, > softlockup warnings will be issued. This problem was fixed by the > code simplification -- because the binding of this kthread is only a > performance optimization, we can awaken it before any of its CPUs are > fully online, which eliminates the delay that could otherwise lead to > the softlockup. > > These changes are available in the git repository at: > > git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-2.6-rcu.git rcu/urgent > > Thanx, Paul > > ------------------> > > Paul E. McKenney (1): > rcu: Simplify curing of load woes > > Shaohua Li (1): > rcu: Use softirq to address performance regression > > Documentation/filesystems/proc.txt | 1 + > include/linux/interrupt.h | 1 + > include/trace/events/irq.h | 3 +- > kernel/rcutree.c | 88 ++++++++++++++++------------------- > kernel/rcutree.h | 1 + > kernel/rcutree_plugin.h | 20 ++++---- > kernel/softirq.c | 2 +- > tools/perf/util/trace-event-parse.c | 1 + > 8 files changed, 57 insertions(+), 60 deletions(-)
| |