|  | timer_stats - timer usage statistics | 
|  | ------------------------------------ | 
|  |  | 
|  | timer_stats is a debugging facility to make the timer (ab)usage in a Linux | 
|  | system visible to kernel and userspace developers. If enabled in the config | 
|  | but not used it has almost zero runtime overhead, and a relatively small | 
|  | data structure overhead. Even if collection is enabled runtime all the | 
|  | locking is per-CPU and lookup is hashed. | 
|  |  | 
|  | timer_stats should be used by kernel and userspace developers to verify that | 
|  | their code does not make unduly use of timers. This helps to avoid unnecessary | 
|  | wakeups, which should be avoided to optimize power consumption. | 
|  |  | 
|  | It can be enabled by CONFIG_TIMER_STATS in the "Kernel hacking" configuration | 
|  | section. | 
|  |  | 
|  | timer_stats collects information about the timer events which are fired in a | 
|  | Linux system over a sample period: | 
|  |  | 
|  | - the pid of the task(process) which initialized the timer | 
|  | - the name of the process which initialized the timer | 
|  | - the function where the timer was initialized | 
|  | - the callback function which is associated to the timer | 
|  | - the number of events (callbacks) | 
|  |  | 
|  | timer_stats adds an entry to /proc: /proc/timer_stats | 
|  |  | 
|  | This entry is used to control the statistics functionality and to read out the | 
|  | sampled information. | 
|  |  | 
|  | The timer_stats functionality is inactive on bootup. | 
|  |  | 
|  | To activate a sample period issue: | 
|  | # echo 1 >/proc/timer_stats | 
|  |  | 
|  | To stop a sample period issue: | 
|  | # echo 0 >/proc/timer_stats | 
|  |  | 
|  | The statistics can be retrieved by: | 
|  | # cat /proc/timer_stats | 
|  |  | 
|  | While sampling is enabled, each readout from /proc/timer_stats will see | 
|  | newly updated statistics. Once sampling is disabled, the sampled information | 
|  | is kept until a new sample period is started. This allows multiple readouts. | 
|  |  | 
|  | Sample output of /proc/timer_stats: | 
|  |  | 
|  | Timerstats sample period: 3.888770 s | 
|  | 12,     0 swapper          hrtimer_stop_sched_tick (hrtimer_sched_tick) | 
|  | 15,     1 swapper          hcd_submit_urb (rh_timer_func) | 
|  | 4,   959 kedac            schedule_timeout (process_timeout) | 
|  | 1,     0 swapper          page_writeback_init (wb_timer_fn) | 
|  | 28,     0 swapper          hrtimer_stop_sched_tick (hrtimer_sched_tick) | 
|  | 22,  2948 IRQ 4            tty_flip_buffer_push (delayed_work_timer_fn) | 
|  | 3,  3100 bash             schedule_timeout (process_timeout) | 
|  | 1,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn) | 
|  | 1,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn) | 
|  | 1,     1 swapper          neigh_table_init_no_netlink (neigh_periodic_timer) | 
|  | 1,  2292 ip               __netdev_watchdog_up (dev_watchdog) | 
|  | 1,    23 events/1         do_cache_clean (delayed_work_timer_fn) | 
|  | 90 total events, 30.0 events/sec | 
|  |  | 
|  | The first column is the number of events, the second column the pid, the third | 
|  | column is the name of the process. The forth column shows the function which | 
|  | initialized the timer and in parenthesis the callback function which was | 
|  | executed on expiry. | 
|  |  | 
|  | Thomas, Ingo | 
|  |  | 
|  | Added flag to indicate 'deferrable timer' in /proc/timer_stats. A deferrable | 
|  | timer will appear as follows | 
|  | 10D,     1 swapper          queue_delayed_work_on (delayed_work_timer_fn) | 
|  |  |