Op 19 jun 2008, om 14:54 heeft Woodruff, Richard het volgende geschreven:

Hi,

I'll resend this to the omap list. I had originally sent it with some pictures but I guess they were too big for the lists. Individual should have got them.

If anyone has the time this is a good to test with. If you have dynamic tick enabled it can double performance of high rate interrupt things like MUSB.

This patch has been working for me quite well these last few week, any chance it can to into git?

regards,

Koen


If anyone wants I'll re-send larger trace pictures individually.


From: Woodruff, Richard, Monday, June 16, 2008 7:06 PM

It simply does a check to see if the about to be reprogrammed 1 shot
already is the last event programmed in the hardware. If it is it skips
calling the hardware.

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. If you like
I can send traces to show this.

Attached are some results on OMAP-ARM from USB-OTG:

As host:

[EMAIL PROTECTED] /]# mount -t vfat /dev/sda1 /mnt/
[EMAIL PROTECTED] /]# time -p cp /mnt/OE.mtn.bz2 /dev/null
real 32.51
user 0.02
sys 1.05
[EMAIL PROTECTED] /]# umount /mnt/
[EMAIL PROTECTED] /]# mount -t vfat /dev/sda1 /mnt/
[EMAIL PROTECTED] /]# time -p cp /mnt/OE.mtn.bz2 /dev/null
real 17.92
user 0.05
sys 1.57

As Client:

Attached are some visuals as of client doing gadget zero tests. Pictures clearly show before a domination by timer reprogram and after not.

Regards,
Richard W.


diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index b854a89..ff6b967 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -254,6 +254,17 @@ void tick_nohz_stop_sched_tick(void)
       /* Schedule the tick, if we are at least one jiffie off */
       if ((long)delta_jiffies >= 1) {

+               /*
+               * calculate the expiry time for the next timer wheel
+               * timer
+               */
+               expires = ktime_add_ns(last_update, tick_period.tv64 *
+                                  delta_jiffies);
+
+               /* Skip reprogram of event if its not changed */
+ if(ts->tick_stopped && ktime_equal(expires, dev- >next_event))
+                       goto out2;
+
               if (delta_jiffies > 1)
                       cpu_set(cpu, nohz_cpu_mask);
               /*
@@ -304,12 +315,7 @@ void tick_nohz_stop_sched_tick(void)
                       goto out;
               }

-               /*
-                * calculate the expiry time for the next timer wheel
-                * timer
-                */
-               expires = ktime_add_ns(last_update, tick_period.tv64 *
-                                      delta_jiffies);
+               /* Mark expiries */
               ts->idle_expires = expires;

               if (ts->nohz_mode == NOHZ_MODE_HIGHRES) {
@@ -328,6 +334,7 @@ void tick_nohz_stop_sched_tick(void)
               tick_do_update_jiffies64(ktime_get());
               cpu_clear(cpu, nohz_cpu_mask);
       }
+out2:
       raise_softirq_irqoff(TIMER_SOFTIRQ);
out:
       ts->next_jiffies = next_jiffies;
--
To unsubscribe from this list: send the line "unsubscribe linux- omap" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Attachment: PGP.sig
Description: This is a digitally signed message part

Reply via email to