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 shotalready is the last event programmed in the hardware. If it is it skipscalling 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 timereprogramming the hardware timer which is in a slower timing domain as compared to the CPU. This results in the CPU spending a huge amount oftime 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 fromalmost 60% CPU load down to 15% during high interrupt rate. If you likeI can send traces to show this.Attached are some results on OMAP-ARM from USB-OTG: As host: root@OMAP3EVM /]# mount -t vfat /dev/sda1 /mnt/ [root@OMAP3EVM /]# time -p cp /mnt/OE.mtn.bz2 /dev/null real 32.51 user 0.02 sys 1.05 [root@OMAP3EVM /]# umount /mnt/ [root@OMAP3EVM /]# mount -t vfat /dev/sda1 /mnt/ [root@OMAP3EVM /]# 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" inthe body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
Attachment:
PGP.sig
Description: This is a digitally signed message part