kernel-ark/kernel
Ingo Molnar 4e44f3497d sys_time() speedup
Improve performance of sys_time().  sys_time() returns time in seconds, but
it does so by calling do_gettimeofday() and then returning the tv_sec
portion of the GTOD time.  But the data structure "xtime", which is updated
by every timer/scheduler tick, already offers HZ granularity time.

The patch improves the sysbench OLTP macrobenchmark significantly:

2.6.22-rc6:

#threads
   1:        transactions:                        3733   (373.21 per sec.)
   2:        transactions:                        6676   (667.46 per sec.)
   3:        transactions:                        6957   (695.50 per sec.)
   4:        transactions:                        7055   (705.48 per sec.)
   5:        transactions:                        6596   (659.33 per sec.)

2.6.22-rc6 + sys_time.patch:

   1:        transactions:                        4005   (400.47 per sec.)
   2:        transactions:                        7379   (737.77 per sec.)
   3:        transactions:                        7347   (734.49 per sec.)
   4:        transactions:                        7468   (746.65 per sec.)
   5:        transactions:                        7428   (742.47 per sec.)

Mixed API uses of gettimeofday() and time() are guaranteed to be coherent
via the use of a at-most-once-per-second slowpath that updates xtime.

[akpm@linux-foundation.org: build fixes]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Cc: John Stultz <johnstul@us.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-07-16 09:05:48 -07:00
..
irq Improve behaviour of spurious IRQ detect 2007-07-16 09:05:46 -07:00
power PM: introduce set_target method in pm_ops 2007-07-01 12:29:44 -07:00
time Remove capability.h from mm.h 2007-07-16 09:05:45 -07:00
.gitignore
acct.c
audit.c Audit: add TTY input auditing 2007-07-16 09:05:47 -07:00
audit.h Audit: add TTY input auditing 2007-07-16 09:05:47 -07:00
auditfilter.c audit: fix oops removing watch if audit disabled 2007-06-24 08:59:12 -07:00
auditsc.c kerneldoc fix in audit_core_dumps 2007-07-16 09:05:48 -07:00
capability.c
compat.c signal/timer/event: timerfd compat code 2007-05-11 08:29:36 -07:00
configs.c
cpu.c microcode: use suspend-related CPU hotplug notifications 2007-05-09 12:30:56 -07:00
cpuset.c Reduce cpuset.c write_lock_irq() to read_lock() 2007-07-16 09:05:43 -07:00
delayacct.c sched: update delay-accounting to use CFS's precise stats 2007-07-09 18:52:00 +02:00
die_notifier.c
dma.c
exec_domain.c
exit.c Audit: add TTY input auditing 2007-07-16 09:05:47 -07:00
extable.c
fork.c user namespace: add unshare 2007-07-16 09:05:47 -07:00
futex_compat.c Revert "futex_requeue_pi optimization" 2007-06-18 09:48:41 -07:00
futex.c FUTEX: Restore the dropped ERSCH fix 2007-06-24 12:08:53 -07:00
hrtimer.c Add suspend-related notifications for CPU hotplug 2007-05-09 12:30:56 -07:00
itimer.c
kallsyms.c fix possible null ptr deref in kallsyms_lookup 2007-05-30 10:51:38 -07:00
Kconfig.hz
Kconfig.preempt
kexec.c
kfifo.c
kmod.c wait_for_helper: remove unneeded do_sigaction() 2007-05-09 12:30:53 -07:00
kprobes.c
ksysfs.c
kthread.c mm: fix improper .init-type section references 2007-07-16 09:05:36 -07:00
latency.c
lockdep_internals.h
lockdep_proc.c
lockdep.c
Makefile user namespace: add the framework 2007-07-16 09:05:47 -07:00
module.c Make /proc/modules use seq_list_xxx helpers 2007-07-16 09:05:42 -07:00
mutex-debug.c
mutex-debug.h
mutex.c wrap access to thread_info 2007-05-09 12:30:56 -07:00
mutex.h
nsproxy.c namespace: ensure clone_flags are always stored in an unsigned long 2007-07-16 09:05:48 -07:00
panic.c
params.c sysfs: kill unnecessary attribute->owner 2007-07-11 16:09:06 -07:00
pid.c namespace: ensure clone_flags are always stored in an unsigned long 2007-07-16 09:05:48 -07:00
posix-cpu-timers.c sched: make posix-cpu-timers use CFS's accounting information 2007-07-09 18:51:58 +02:00
posix-timers.c posix-timers: Prevent softirq starvation by small intervals and SIG_IGN 2007-06-21 15:57:04 -07:00
printk.c add printk.time option, deprecate 'time' 2007-07-16 09:05:45 -07:00
profile.c Detach sched.h from mm.h 2007-05-21 09:18:19 -07:00
ptrace.c Use write_trylock_irqsave in ptrace_attach 2007-07-16 09:05:40 -07:00
rcupdate.c Add suspend-related notifications for CPU hotplug 2007-05-09 12:30:56 -07:00
rcutorture.c
relay.c relay: fixup kerneldoc comment 2007-07-13 14:14:28 +02:00
resource.c
rtmutex_common.h Revert "futex_requeue_pi optimization" 2007-06-18 09:48:41 -07:00
rtmutex-debug.c
rtmutex-debug.h
rtmutex-tester.c
rtmutex.c Revert "futex_requeue_pi optimization" 2007-06-18 09:48:41 -07:00
rtmutex.h
rwsem.c
sched_debug.c [PATCH] sched: remove stale version info from kernel/sched_debug.c 2007-07-13 10:10:41 -07:00
sched_fair.c sched: cfs core, kernel/sched_fair.c 2007-07-09 18:51:58 +02:00
sched_idletask.c sched: cfs core, kernel/sched_idletask.c 2007-07-09 18:51:58 +02:00
sched_rt.c sched: cfs core, kernel/sched_rt.c 2007-07-09 18:51:58 +02:00
sched_stats.h sched: update delay-accounting to use CFS's precise stats 2007-07-09 18:52:00 +02:00
sched.c CFS: Fix missing digit off in wmult table 2007-07-13 16:45:43 -07:00
seccomp.c
signal.c vdso: print fatal signals 2007-07-16 09:05:43 -07:00
softirq.c cpu hotplug: fix ksoftirqd termination on cpu hotplug with naughty realtime process 2007-07-16 09:05:41 -07:00
softlockup.c Add suspend-related notifications for CPU hotplug 2007-05-09 12:30:56 -07:00
spinlock.c
srcu.c
stacktrace.c
stop_machine.c Fix stop_machine_run problem with naughty real time process 2007-07-16 09:05:41 -07:00
sys_ni.c diskquota: 32bit quota tools on 64bit architectures 2007-07-16 09:05:48 -07:00
sys.c user namespace: add the framework 2007-07-16 09:05:47 -07:00
sysctl.c vdso: print fatal signals 2007-07-16 09:05:43 -07:00
taskstats.c taskstats: add context-switch counters 2007-07-16 09:05:46 -07:00
time.c sys_time() speedup 2007-07-16 09:05:48 -07:00
timer.c Add a flag to indicate deferrable timers in /proc/timer_stats 2007-07-16 09:05:45 -07:00
tsacct.c
uid16.c
user_namespace.c fix create_new_namespaces() return value 2007-07-16 09:05:47 -07:00
user.c user namespace: add the framework 2007-07-16 09:05:47 -07:00
utsname_sysctl.c remove CONFIG_UTS_NS and CONFIG_IPC_NS 2007-07-16 09:05:47 -07:00
utsname.c namespace: ensure clone_flags are always stored in an unsigned long 2007-07-16 09:05:48 -07:00
wait.c
workqueue.c simplify cleanup_workqueue_thread() 2007-05-23 20:14:13 -07:00