nohz: suppress needless timer reprogramming
authorWoodruff, Richard <r-woodruff2@ti.com>
Mon, 1 Dec 2008 22:18:11 +0000 (14:18 -0800)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 12 Dec 2008 15:55:31 +0000 (16:55 +0100)
commit001474491fabeca233168a8598f721c808040f90
tree858467ce6aed38ba2bd1ea8682e12bbdb182d0f1
parentfa116ea35ec7f40e890972324409e99eed008d56
nohz: suppress needless timer reprogramming

In my device I get many interrupts from a high speed USB device in a very
short period of time.  The system spends a lot of time reprogramming the
hardware timer which is in a slower timing domain as compared to the CPU.
This results in the CPU spending a huge amount of time waiting for the
timer posting to be done.  All of this reprogramming is useless as the
wake up time has not changed.

As measured using ETM trace this drops my reprogramming penalty from
almost 60% CPU load down to 15% during high interrupt rate.  I can send
traces to show this.

Suppress setting of duplicate timer event when timer already stopped.
Timer programming can be very costly and can result in long cpu stall/wait
times.

[akpm@linux-foundation.org: coding-style fixes]
[tglx@linutronix.de: move the check to the right place and avoid raising
     the softirq for nothing]

Signed-off-by: Richard Woodruff <r-woodruff2@ti.com>
Cc: johnstul@us.ibm.com
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
kernel/time/tick-sched.c