Re: dynamic-hz

Nish Aravamudan
2004-12-17T20:10:18Z

On Mon, 13 Dec 2004 20:29:39 -0800, Andrew Morton <akpm@osdl.org> wrote:
> Nish Aravamudan <nish.aravamudan@gmail.com> wrote:
> >
> > On Mon, 13 Dec 2004 03:25:21 -0800, Andrew Morton <akpm@osdl.org> wrote:
> > > Andrea Arcangeli <andrea@suse.de> wrote:
> > > >
> > > > The patch only does HZ at dynamic time. But of course it's absolutely
> > > > trivial to define it at compile time, it's probably a 3 liner on top of
> > > > my current patch ;). However personally I don't think the three liner
> > > > will worth the few seconds more spent configuring the kernel ;).
> > >
> > > We still have 1000-odd places which do things like
> > >
> > > schedule_timeout(HZ/10);
> >
> > Yes, yes, we do :) I replaced far more than I ever thought I could...
> > There are a few issues I have with the remaining schedule_timeout()
> > calls which I think fit ok with this thread... I'd especially like
> > your input, Andrew, as you end up getting most of my patches from KJ.
> >
> > Many drivers use
> >
> > set_current_state(TASK_{UN,}INTERRUPTIBLE);
> > schedule_timeout(1); // or some other small value < 10
> >
> > This may or may not hide a dependency on a particular HZ value. If the
> > code is somewhat old, perhaps the author intended the task to sleep
> > for 1 jiffy when HZ was equal to 100. That meants that they ended up
> > sleeping for 10 ms. If the code is new, the author intends that the
> > task sleeps for 1 ms (HZ==1000). The question is, what should the
> > replacement be?
>
> Presumably they meant 10 milliseconds. Or at least, that is the delay
> which the developer did his testing with.
>
> > If they really meant to use schedule_timeout(1) in the sense of
> > highest resolution delay possible (the latter above), then they
> > probably should just call schedule() directly.
>
> argh. Never do that. It's basically a busywait and can cause lockups if
> the calling task has realtime scheduling policy.

For those drivers that use schedule() calls currently to delay, what
would you recommend? drivers/atm/ambassador.c contains a few examples.
I can get rid of most of the schedule_timeout() calls, but the
schedule() ones are a little more difficult. Would schedule_timeout(1)
be preferred to schedule()?

Thanks,
Nish