aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2007-06-01 03:47:16 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-06-01 11:18:30 -0400
commitc1a834dc704763673df10282995257f2de93cbe9 (patch)
tree66a0bc5ffbf6732eaa5fc6f554c13b235005c4cd
parent9fcc15ec3c1c287a781a4620e52522b6186f26f6 (diff)
timer stats: speedups
Make timer-stats have almost zero overhead when enabled in the config but not used. (this way distros can enable it more easily) Also update the documentation about overhead of timer_stats - it was written for the first version which had a global lock and a linear list walk based lookup ;-) Signed-off-by: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--Documentation/hrtimer/timer_stats.txt7
-rw-r--r--kernel/time/timer_stats.c7
-rw-r--r--lib/Kconfig.debug5
3 files changed, 14 insertions, 5 deletions
diff --git a/Documentation/hrtimer/timer_stats.txt b/Documentation/hrtimer/timer_stats.txt
index 27f782e3593f..22b0814d0ad0 100644
--- a/Documentation/hrtimer/timer_stats.txt
+++ b/Documentation/hrtimer/timer_stats.txt
@@ -2,9 +2,10 @@ timer_stats - timer usage statistics
2------------------------------------ 2------------------------------------
3 3
4timer_stats is a debugging facility to make the timer (ab)usage in a Linux 4timer_stats is a debugging facility to make the timer (ab)usage in a Linux
5system visible to kernel and userspace developers. It is not intended for 5system visible to kernel and userspace developers. If enabled in the config
6production usage as it adds significant overhead to the (hr)timer code and the 6but not used it has almost zero runtime overhead, and a relatively small
7(hr)timer data structures. 7data structure overhead. Even if collection is enabled runtime all the
8locking is per-CPU and lookup is hashed.
8 9
9timer_stats should be used by kernel and userspace developers to verify that 10timer_stats should be used by kernel and userspace developers to verify that
10their code does not make unduly use of timers. This helps to avoid unnecessary 11their code does not make unduly use of timers. This helps to avoid unnecessary
diff --git a/kernel/time/timer_stats.c b/kernel/time/timer_stats.c
index fa3d380ca8c0..321693724ad7 100644
--- a/kernel/time/timer_stats.c
+++ b/kernel/time/timer_stats.c
@@ -236,10 +236,15 @@ void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
236 /* 236 /*
237 * It doesnt matter which lock we take: 237 * It doesnt matter which lock we take:
238 */ 238 */
239 spinlock_t *lock = &per_cpu(lookup_lock, raw_smp_processor_id()); 239 spinlock_t *lock;
240 struct entry *entry, input; 240 struct entry *entry, input;
241 unsigned long flags; 241 unsigned long flags;
242 242
243 if (likely(!active))
244 return;
245
246 lock = &per_cpu(lookup_lock, raw_smp_processor_id());
247
243 input.timer = timer; 248 input.timer = timer;
244 input.start_func = startf; 249 input.start_func = startf;
245 input.expire_func = timerf; 250 input.expire_func = timerf;
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 1ba77ca7d165..da95e10cfd70 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -126,7 +126,10 @@ config TIMER_STATS
126 reprogrammed. The statistics can be read from /proc/timer_stats. 126 reprogrammed. The statistics can be read from /proc/timer_stats.
127 The statistics collection is started by writing 1 to /proc/timer_stats, 127 The statistics collection is started by writing 1 to /proc/timer_stats,
128 writing 0 stops it. This feature is useful to collect information 128 writing 0 stops it. This feature is useful to collect information
129 about timer usage patterns in kernel and userspace. 129 about timer usage patterns in kernel and userspace. This feature
130 is lightweight if enabled in the kernel config but not activated
131 (it defaults to deactivated on bootup and will only be activated
132 if some application like powertop activates it explicitly).
130 133
131config DEBUG_SLAB 134config DEBUG_SLAB
132 bool "Debug slab memory allocations" 135 bool "Debug slab memory allocations"