time: introduce xtime_seconds
PATCH 1/1 time: introduce xtime_seconds
Subject: time: introduce xtime_seconds
From: Ingo Molnar <[email protected]>
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 by 4-5% on an AMD dual-core system:
v2.6.23:
#threads
1: transactions: 4073 (407.23 per sec.) 2: transactions: 8530 (852.81 per sec.) 3: transactions: 8321 (831.88 per sec.) 4: transactions: 8407 (840.58 per sec.) 5: transactions: 8070 (806.74 per sec.)
v2.6.23 + sys_time-speedup.patch:
1: transactions: 4281 (428.09 per sec.) 2: transactions: 8910 (890.85 per sec.) 3: transactions: 8659 (865.79 per sec.) 4: transactions: 8676 (867.34 per sec.) 5: transactions: 8532 (852.91 per sec.)
and by 4-5% on an Intel dual-core system too:
2.6.23:
1: transactions: 4560 (455.94 per sec.) 2: transactions: 10094 (1009.30 per sec.) 3: transactions: 9755 (975.36 per sec.) 4: transactions: 9859 (985.78 per sec.) 5: transactions: 9701 (969.72 per sec.)
2.6.23 + sys_time-speedup.patch:
1: transactions: 4779 (477.84 per sec.) 2: transactions: 10103 (1010.14 per sec.) 3: transactions: 10141 (1013.93 per sec.) 4: transactions: 10371 (1036.89 per sec.) 5: transactions: 10178 (1017.50 per sec.)
(the more CPUs the system has, the more speedup this patch gives for this particular workload.)
Signed-off-by Ingo Molnar <[email protected]>
Signed-off-by Thomas Gleixner <[email protected]>
--- kernel/time.c | 6 +----- kernel/time/timekeeping.c | 7 ------- 2 files changed, 1 insertion(+), 12 deletions(-)
kernel/time.c +1 -5
@@ -57,11 +57,7 @@ EXPORT_SYMBOL(sys_tz);*/ asmlinkage long sys_time (time_t __user * tloc) { -time_t i; -struct timespec tv; - -getnstimeofday (&tv); - i = tv.tv_sec; +time_t i =get_seconds ();if (tloc) {if (put_user (i,tloc))
kernel/time/timekeeping.c +0 -7
@@ -49,19 +49,12 @@ struct timespec wall_to_monotonic __attrstatic unsigned long total_sleep_time;/* seconds */ EXPORT_SYMBOL (xtime); - -#ifdef CONFIG_NO_HZ static struct timespec xtime_cache __attribute__ ((aligned (16)));static inline void update_xtime_cache (u64 nsec) { xtime_cache = xtime;timespec_add_ns (&xtime_cache, nsec); } -#else -#define xtime_cache xtime -/* We do *not* want to evaluate the argument for this case */ -#define update_xtime_cache (n) do { } while (0) -#endif static struct clocksource *clock;/* pointer to current clocksource */