fixes for slowdowns and softlockup
A message that is not in the archive (sent off-list or not yet received): [email protected]
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_UNINTERRUPTIBLEstate, 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.gitrcu/urgentThanx, Paul
------------------>
Paul E. McKenney (1):
rcu: Simplify curing of load woesShaohua Li (1):
rcu: Use softirq to address performance regressionDocumentation/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(-)