On Thu, 20 Dec 2007 17:29:23 +0000 > > -----Original Message----- > From: Stephen Hemminger <[EMAIL PROTECTED]> > > Date: Thu, 20 Dec 2007 09:16:03 > To:[EMAIL PROTECTED] > Cc:netdev@vger.kernel.org, [EMAIL PROTECTED], [EMAIL PROTECTED] > Subject: Re: [PATCH] sky2: Use deferrable timer for watchdog > > > On Tue, 18 Dec 2007 20:13:28 -0500 (EST) > Parag Warudkar <[EMAIL PROTECTED]> wrote: > > > > > sky2 can use deferrable timer for watchdog - reduces wakeups from idle per > > second. > > > > Signed-off-by: Parag Warudkar <[EMAIL PROTECTED]> > > > > --- linux-2.6/drivers/net/sky2.c 2007-12-07 10:04:39.000000000 -0500 > > +++ linux-2.6-work/drivers/net/sky2.c 2007-12-18 20:07:58.000000000 > > -0500 > > @@ -4230,7 +4230,10 @@ > > sky2_show_addr(dev1); > > } > > > > - setup_timer(&hw->watchdog_timer, sky2_watchdog, (unsigned long) hw); > > + hw->watchdog_timer.function = sky2_watchdog; > > + hw->watchdog_timer.data = (unsigned long) hw; > > + init_timer_deferrable(&hw->watchdog_timer); > > + > > INIT_WORK(&hw->restart_work, sky2_restart); > > > > pci_set_drvdata(pdev, hw); > > Does it really reduce the wakeup's or only change who gets charged by > powertop? > The system is going to wakeup once a second anyway. Looks to me that if the > timer is using round_jiffies(), that setting deferrable just changes the > accounting. > > My interpretation of the api is: > * round_jiffies() - timer wants to wakeup but isn't precise about when so > schedule > on next second when system will wake up anyway; > e.g why meetings are usually scheduled on the hour > > * deferrable - timer doesn't have to really wakeup but wants to > happen near > a particular time. e.g. "I'll meet you at the pub > around 8pm" > > Therefore doing deferrable is unnecessary for timers using round_jiffies > unless system > is so good at doing timers that it is going to skip doing timer once per > second. >
[EMAIL PROTECTED] wrote: > NO_HZ kernels don't do timers every second - if you do round_jiffies() the > kernel will wakeup and run the timer at that time no matter what. > > The reason deferrable was introduced is to avoid waking up the kernel just > for this one timer that can be called when the CPU is not idle for some > reason other than this timer. > > In other words let's say there were two timers - one non-deferrable expiring > in 3 seconds and other deferrable, expiring in 1.5 seconds. The kernel will > not wake up twice - once for 1.5 second and other for 3 second - it will wake > up once at expiry of 3 second timer and execute both the 1.5 second and 3 > second timers. > > And this is not just powertop accounting thing - like I said the total num of > wakeups per second go down with this patch. > > Parag > > Sent via BlackBerry from T-Mobile Quit top-posting! If this is the case then the whole usage of round_jiffies() is bogus. All users of round_jiffies() should just be converted to deferrable?? I am a bit concerned that if deferrable gets used everywhere then a strange situation would occur where all timers were waiting for some other timer to finally happen, kind of a wierd timelock situation. Like the old chip/dale cartoon: "you first, no you first, after you mister chip, no after you mister dale,..." -- Stephen Hemminger <[EMAIL PROTECTED]> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html