Skip to contentSkip to conversation

fixes for slowdowns and softlockup

GIT PULL Paul E. McKenney 1 participant 1 message Jun 15, 2011 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw
Quoted 3 lines · Paul E. McKenney

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

Quoted 42 lines

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(-)