Chen, Kenneth W
c96d145e71
[PATCH] sched: fix smt nice lock contention and optimization
...
Initial report and lock contention fix from Chris Mason:
Recent benchmarks showed some performance regressions between 2.6.16 and
2.6.5. We tracked down one of the regressions to lock contention in
schedule heavy workloads (~70,000 context switches per second)
kernel/sched.c:dependent_sleeper() was responsible for most of the lock
contention, hammering on the run queue locks. The patch below is more of a
discussion point than a suggested fix (although it does reduce lock
contention significantly). The dependent_sleeper code looks very expensive
to me, especially for using a spinlock to bounce control between two
different siblings in the same cpu.
It is further optimized:
* perform dependent_sleeper check after next task is determined
* convert wake_sleeping_dependent to use trylock
* skip smt runqueue check if trylock fails
* optimize double_rq_lock now that smt nice is converted to trylock
* early exit in searching first SD_SHARE_CPUPOWER domain
* speedup fast path of dependent_sleeper
[akpm@osdl.org: cleanup]
Signed-off-by: Ken Chen <kenneth.w.chen@intel.com>
Acked-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Con Kolivas <kernel@kolivas.org>
Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-by: Chris Mason <mason@suse.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-06-27 17:32:44 -07:00
..
irq
[PATCH] adjust handle_IRR_event() return type
2006-06-23 07:43:08 -07:00
power
[PATCH] pm_trace is dangerous
2006-06-27 17:32:35 -07:00
time
[PATCH] time: rename clocksource functions
2006-06-26 09:58:21 -07:00
.gitignore
acct.c
[PATCH] fix kernel-doc in kernel/ dir
2006-06-27 17:32:39 -07:00
audit.c
[PATCH] spin/rwlock init cleanups
2006-06-27 17:32:39 -07:00
audit.h
[PATCH] log more info for directory entry change events
2006-06-20 05:25:28 -04:00
auditfilter.c
[PATCH] log more info for directory entry change events
2006-06-20 05:25:28 -04:00
auditsc.c
[PATCH] fix kernel-doc in kernel/ dir
2006-06-27 17:32:39 -07:00
capability.c
compat.c
[PATCH] N32 sigset and __COMPAT_ENDIAN_SWAP__
2006-06-25 10:01:15 -07:00
configs.c
cpu.c
[PATCH] cpu hotplug: make [un]register_cpu_notifier init time only
2006-06-27 17:32:41 -07:00
cpuset.c
[PATCH] proc: Use struct pid not struct task_ref
2006-06-26 09:58:26 -07:00
dma.c
exec_domain.c
exit.c
[PATCH] proc: Rewrite the proc dentry flush on exit optimization
2006-06-26 09:58:24 -07:00
extable.c
fork.c
[PATCH] coredump: copy_process: don't check SIGNAL_GROUP_EXIT
2006-06-26 09:58:27 -07:00
futex.c
[PATCH] VFS: Permit filesystem to override root dentry on mount
2006-06-23 07:42:45 -07:00
futex_compat.c
hrtimer.c
[PATCH] cpu hotplug: revert initdata patch submitted for 2.6.17
2006-06-27 17:32:41 -07:00
itimer.c
kallsyms.c
Kconfig.hz
Kconfig.preempt
kexec.c
[PATCH] Add a sysfs file to determine if a kexec kernel is loaded
2006-06-23 07:43:02 -07:00
kfifo.c
kmod.c
kprobes.c
[PATCH] Notify page fault call chain
2006-06-26 09:58:22 -07:00
ksysfs.c
[PATCH] Add a sysfs file to determine if a kexec kernel is loaded
2006-06-23 07:43:02 -07:00
kthread.c
[PATCH] kthread: move kernel-doc and put it into DocBook
2006-06-25 10:01:24 -07:00
Makefile
Merge branch 'x86-64'
2006-06-26 10:51:09 -07:00
module.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
2006-06-26 11:05:15 -07:00
mutex-debug.c
[PATCH] poison: add & use more constants
2006-06-27 17:32:38 -07:00
mutex-debug.h
[PATCH] work around ppc64 bootup bug by making mutex-debugging save/restore irqs
2006-06-26 09:58:16 -07:00
mutex.c
[PATCH] work around ppc64 bootup bug by making mutex-debugging save/restore irqs
2006-06-26 09:58:16 -07:00
mutex.h
[PATCH] work around ppc64 bootup bug by making mutex-debugging save/restore irqs
2006-06-26 09:58:16 -07:00
panic.c
params.c
pid.c
posix-cpu-timers.c
posix-timers.c
printk.c
[PATCH] printk time parameter
2006-06-25 10:01:13 -07:00
profile.c
[PATCH] cpu hotplug: revert init patch submitted for 2.6.17
2006-06-27 17:32:40 -07:00
ptrace.c
[PATCH] coredump: kill ptrace related stuff
2006-06-26 09:58:27 -07:00
rcupdate.c
[PATCH] cpu hotplug: revert initdata patch submitted for 2.6.17
2006-06-27 17:32:41 -07:00
rcutorture.c
[PATCH] rcutorture: add call_rcu_bh() operations
2006-06-27 17:32:40 -07:00
relay.c
resource.c
[PATCH] catch valid mem range at onlining memory
2006-06-27 17:32:36 -07:00
sched.c
[PATCH] sched: fix smt nice lock contention and optimization
2006-06-27 17:32:44 -07:00
seccomp.c
signal.c
[PATCH] coredump: kill ptrace related stuff
2006-06-26 09:58:27 -07:00
softirq.c
[PATCH] cpu hotplug: revert initdata patch submitted for 2.6.17
2006-06-27 17:32:41 -07:00
softlockup.c
[PATCH] cpu hotplug: revert initdata patch submitted for 2.6.17
2006-06-27 17:32:41 -07:00
spinlock.c
stop_machine.c
[PATCH] kthread: convert stop_machine into a kthread
2006-06-25 10:01:22 -07:00
sys.c
[PATCH] kernel/sys.c: cleanups
2006-06-25 10:01:06 -07:00
sys_ni.c
[PATCH] sys_move_pages: 32bit support (i386, x86_64)
2006-06-23 07:42:53 -07:00
sysctl.c
[PATCH] vdso: randomize the i386 vDSO by moving it into a vma
2006-06-27 17:32:38 -07:00
time.c
[PATCH] Time: Introduce arch generic time accessors
2006-06-26 09:58:20 -07:00
timer.c
[PATCH] cpu hotplug: revert initdata patch submitted for 2.6.17
2006-06-27 17:32:41 -07:00
uid16.c
unwind.c
[PATCH] x86_64: allow unwinder to build without module support
2006-06-26 10:48:18 -07:00
user.c
[PATCH] selinux: add hooks for key subsystem
2006-06-22 15:05:55 -07:00
wait.c
workqueue.c
[PATCH] cpu hotplug: revert init patch submitted for 2.6.17
2006-06-27 17:32:40 -07:00