android_kernel_xiaomi_sm8350/kernel
Ingo Molnar 1b5180b651 [PATCH] notifiers: fix blocking_notifier_call_chain() scalability
while lock-profiling the -rt kernel i noticed weird contention during
mmap-intense workloads, and the tracer showed the following gem, in one
of our MM hotpaths:

 threaded-2771  1....   65us : sys_munmap (sysenter_do_call)
 threaded-2771  1....   66us : profile_munmap (sys_munmap)
 threaded-2771  1....   66us : blocking_notifier_call_chain (profile_munmap)
 threaded-2771  1....   66us : rt_down_read (blocking_notifier_call_chain)

ouch! a global rw-semaphore taken in one of the most performance-
sensitive codepaths of the kernel.  And i dont even have oprofile
enabled! All distro kernels have CONFIG_PROFILING enabled, so this
scalability problem affects the majority of Linux users.

The fix is to enhance blocking_notifier_call_chain() to only take the
lock if there appears to be work on the call-chain.

With this patch applied i get nicely saturated system, and much higher
munmap performance, on SMP systems.

And as a bonus this also fixes a similar scalability bottleneck in the
thread-exit codepath: profile_task_exit() ...

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-01-23 11:08:03 -08:00
..
irq [PATCH] x86-64: Make noirqdebug_setup function non init to fix modpost warning 2007-01-11 01:52:44 +01:00
power [PATCH] swsusp: Do not fail if resume device is not set 2007-01-05 23:55:22 -08:00
time
.gitignore
acct.c
audit.c
audit.h
auditfilter.c
auditsc.c
capability.c
compat.c
configs.c
cpu.c [PATCH] Change cpu_up and co from __devinit to __cpuinit 2007-01-11 18:18:20 -08:00
cpuset.c
delayacct.c
dma.c
exec_domain.c
exit.c
extable.c
fork.c
futex_compat.c
futex.c
hrtimer.c
itimer.c
kallsyms.c
Kconfig.hz
Kconfig.preempt
kexec.c
kfifo.c
kmod.c
kprobes.c
ksysfs.c
kthread.c
latency.c
lockdep_internals.h
lockdep_proc.c
lockdep.c
Makefile
module.c [PATCH] Driver core: Fix prefix driver links in /sys/module by bus-name 2007-01-05 12:33:38 -08:00
mutex-debug.c
mutex-debug.h
mutex.c
mutex.h
nsproxy.c
panic.c
params.c [PATCH] kernelparams: detect if and which parameter parsing enabled irq's 2007-01-05 23:55:21 -08:00
pid.c
posix-cpu-timers.c
posix-timers.c
printk.c
profile.c [PATCH] fix "kvm: add vm exit profiling" 2007-01-23 07:52:05 -08:00
ptrace.c
rcupdate.c
rcutorture.c
relay.c
resource.c
rtmutex_common.h
rtmutex-debug.c
rtmutex-debug.h
rtmutex-tester.c
rtmutex.c
rtmutex.h
rwsem.c
sched.c [PATCH] sched: tasks cannot run on cpus onlined after boot 2007-01-11 18:18:20 -08:00
seccomp.c
signal.c
softirq.c
softlockup.c
spinlock.c
srcu.c
stacktrace.c
stop_machine.c
sys_ni.c
sys.c [PATCH] notifiers: fix blocking_notifier_call_chain() scalability 2007-01-23 11:08:03 -08:00
sysctl.c
taskstats.c
time.c
timer.c
tsacct.c
uid16.c
user.c
utsname.c
wait.c
workqueue.c