Root/
1 | timer_stats - timer usage statistics |
2 | ------------------------------------ |
3 | |
4 | timer_stats is a debugging facility to make the timer (ab)usage in a Linux |
5 | system visible to kernel and userspace developers. If enabled in the config |
6 | but not used it has almost zero runtime overhead, and a relatively small |
7 | data structure overhead. Even if collection is enabled runtime all the |
8 | locking is per-CPU and lookup is hashed. |
9 | |
10 | timer_stats should be used by kernel and userspace developers to verify that |
11 | their code does not make unduly use of timers. This helps to avoid unnecessary |
12 | wakeups, which should be avoided to optimize power consumption. |
13 | |
14 | It can be enabled by CONFIG_TIMER_STATS in the "Kernel hacking" configuration |
15 | section. |
16 | |
17 | timer_stats collects information about the timer events which are fired in a |
18 | Linux system over a sample period: |
19 | |
20 | - the pid of the task(process) which initialized the timer |
21 | - the name of the process which initialized the timer |
22 | - the function where the timer was intialized |
23 | - the callback function which is associated to the timer |
24 | - the number of events (callbacks) |
25 | |
26 | timer_stats adds an entry to /proc: /proc/timer_stats |
27 | |
28 | This entry is used to control the statistics functionality and to read out the |
29 | sampled information. |
30 | |
31 | The timer_stats functionality is inactive on bootup. |
32 | |
33 | To activate a sample period issue: |
34 | # echo 1 >/proc/timer_stats |
35 | |
36 | To stop a sample period issue: |
37 | # echo 0 >/proc/timer_stats |
38 | |
39 | The statistics can be retrieved by: |
40 | # cat /proc/timer_stats |
41 | |
42 | The readout of /proc/timer_stats automatically disables sampling. The sampled |
43 | information is kept until a new sample period is started. This allows multiple |
44 | readouts. |
45 | |
46 | Sample output of /proc/timer_stats: |
47 | |
48 | Timerstats sample period: 3.888770 s |
49 | 12, 0 swapper hrtimer_stop_sched_tick (hrtimer_sched_tick) |
50 | 15, 1 swapper hcd_submit_urb (rh_timer_func) |
51 | 4, 959 kedac schedule_timeout (process_timeout) |
52 | 1, 0 swapper page_writeback_init (wb_timer_fn) |
53 | 28, 0 swapper hrtimer_stop_sched_tick (hrtimer_sched_tick) |
54 | 22, 2948 IRQ 4 tty_flip_buffer_push (delayed_work_timer_fn) |
55 | 3, 3100 bash schedule_timeout (process_timeout) |
56 | 1, 1 swapper queue_delayed_work_on (delayed_work_timer_fn) |
57 | 1, 1 swapper queue_delayed_work_on (delayed_work_timer_fn) |
58 | 1, 1 swapper neigh_table_init_no_netlink (neigh_periodic_timer) |
59 | 1, 2292 ip __netdev_watchdog_up (dev_watchdog) |
60 | 1, 23 events/1 do_cache_clean (delayed_work_timer_fn) |
61 | 90 total events, 30.0 events/sec |
62 | |
63 | The first column is the number of events, the second column the pid, the third |
64 | column is the name of the process. The forth column shows the function which |
65 | initialized the timer and in parenthesis the callback function which was |
66 | executed on expiry. |
67 | |
68 | Thomas, Ingo |
69 | |
70 | Added flag to indicate 'deferrable timer' in /proc/timer_stats. A deferrable |
71 | timer will appear as follows |
72 | 10D, 1 swapper queue_delayed_work_on (delayed_work_timer_fn) |
73 | |
74 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9