From: Nish Aravamudan <nish.aravamudan@gmail.com>
To: Andrea Arcangeli <andrea@suse.de>
Cc: linux-os@analogic.com, Andrew Morton <akpm@osdl.org>,
kernel@kolivas.org, pavel@suse.cz, linux-kernel@vger.kernel.org
Subject: Re: dynamic-hz
Date: Tue, 14 Dec 2004 11:00:36 -0800 [thread overview]
Message-ID: <29495f1d041214110076137f84@mail.gmail.com> (raw)
In-Reply-To: <20041214182900.GM16322@dualathlon.random>
On Tue, 14 Dec 2004 19:29:00 +0100, Andrea Arcangeli <andrea@suse.de> wrote:
> On Tue, Dec 14, 2004 at 09:42:02AM -0800, Nish Aravamudan wrote:
> > Sorry for my lack of clarity :) I was referring more to the second
> > part of what you said, that the "meaning" of yield() changed for 2.6
>
> The meaning of yield didn't really change. The behaviour changed a bit
> to allow scalability even if more than one task is polling for a
> resource (potentially even the _same_ resource) using yield().
>
> But if you were using yield() in 2.4 you shouldn't change to anything
> different than yield() in 2.6. If you get bad latencies under load in
> 2.6, it's simply a gentle reminder that using yield() is always a bad
> idea ;).
>
> NPTL converted the yield() loops in the slow path of the pthread_mutex to
> even driven futex, otherwise 2.6 behaviour would break a lot more than
> OOo.
>
> In my 2.4-aa I've a sysctl to switch yield between two 2.4/2.6
> behaviours. The new behaviour broke OOo and all linthread apps for
> example, so it was necessary to use a sysctl to control it, even if the
> new yield() behaviour is more correct because it has a chance to scala
> under load.
>
> Ingo may want to correct me if I remember wrong, I discussed this stuff
> with him at the time.
>
> > and thus shouldn't be used to wait for short times (see kerneljanitors
> > TODO reference from Matthew Wilcox (search for yield in page):
> > http://www.kerneljanitors.org/TODO).
>
> The 2.4 yield() could introduce significant latencies too if more than
> one task was looping in yield at the same time for different resources.
>
> > From the context of the TODO, it seems yield() and schedule_timeout()
> > should not be considered alternatives for each other. Maybe someone
> > can clarify?
>
> It depends what you're doing. yield() and __set_current_state(..);
> schedule_timeout(1) are similar. I don't think schedule_timeout(0) makes
> much sense (but in practice it works very similarly to
> schedule_timeout(1)). The former will pool ASAP by guaranteeing the CPU
> won't go idle. The latter will make the CPU go idle and it'll wait
> between 1/HZ sec and 2/HZ sec.
>
> The point is that polling is wrong and you should register into a
> waitqueue and then __set_current_state(..); schedule(). This is exactly
> what NPTL did too, and as far as I can tell it's pratically the most
> noticeable feature for optimally written threaded apps. The
> yield/schedule_timeout(1)-without-registering-in-callbacks are just
> tricks for some special code. For example I used myself
> schedule_timeout(1) in the oom killer patch a few days ago, but that
> code runs only when the machine is out of memory and several tasks will
> try to kill something at the same time. At that time the cpu load really
> doesn't matter. So tricks like that are ok in corner cases where
> performance cannot matter at all. For fast paths or regular code, yield
> should not be used (and schedule_timeout(1) used as as yield won't be
> much better).
>
> Conceptually if you want to poll as soon as possible you should use
> yield(). If you want to wait and give some idle time to the cpu you
> should use schedule_timeout().
>
> You should ignore the claim that yield isn't appropriate in 2.6 for
> waiting short periods of time, yield is still the API to use for polling
> while keeping the cpu busy. If the machine is overloaded then it will
> take a while to get back to the polling loop with 2.6, but then 2.4 had
> other corner cases with the machine overloaded by userspace tasks
> calling sched_yield too. So it's not really that much different in terms
> of the guarantees that yield can provide between 2.4/2.6. The only
> guarantee that yield can provide is that the cpu will remain busy, and
> that you'll be rescheduled if some other task is pending in the
> runqueue. It can't provide any guarantee on when you'll become running
> again.
>
> > > I guess we could change schedule_timeout() to WARN_ON if 0 is being
> > > passed to it.
> >
> > I will see if anyone is actually calling with 0 -- I don't remember
>
> It's not that bad, I mean schedule_timeout(0) works fine, but once in a
> while it may not wait anything and just return after invoking a timer
> callback. So if somebody uses schedule_timeout, it's because he wants
> always to make the cpu go idle for a little bit, and in turn it would be
> better to use 1 (0 doesn't guarantee to go idle).
>
> > seeing this for my previous sets of patches, but it may happen if HZ
> > changes in value.
>
> The HZ errors are just due the lack of roundup, and schedule_timeout
> can't do anything about it, only the caller can (it's a problem even for
> other HZ values that generate rounding errors, and that's why HZ=100 and
> HZ=1000 are the only two really supported frequencies to freely switch
> at boot time ;).
Great! Thanks a lot for all of the clarifications!
-Nish
next prev parent reply other threads:[~2004-12-14 19:00 UTC|newest]
Thread overview: 126+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-11 14:23 dynamic-hz Andrea Arcangeli
2004-12-11 14:50 ` dynamic-hz Zwane Mwaikambo
2004-12-12 6:57 ` dynamic-hz Andrea Arcangeli
2004-12-11 21:41 ` dynamic-hz Jan Engelhardt
2004-12-12 16:35 ` dynamic-hz Pavel Machek
2004-12-12 22:23 ` dynamic-hz Andrea Arcangeli
2004-12-12 23:36 ` dynamic-hz Con Kolivas
2004-12-12 23:42 ` dynamic-hz Pavel Machek
2004-12-13 0:09 ` dynamic-hz Con Kolivas
2004-12-13 8:37 ` dynamic-hz Jan Engelhardt
2004-12-13 10:43 ` dynamic-hz Pavel Machek
2004-12-13 11:08 ` dynamic-hz Andrea Arcangeli
2004-12-13 19:36 ` dynamic-hz john stultz
2004-12-12 23:43 ` dynamic-hz Andrea Arcangeli
2004-12-13 0:18 ` dynamic-hz Con Kolivas
2004-12-13 0:27 ` dynamic-hz Andrea Arcangeli
2004-12-13 1:50 ` dynamic-hz Zwane Mwaikambo
2004-12-13 11:28 ` dynamic-hz Andrea Arcangeli
2004-12-13 12:43 ` dynamic-hz Pavel Machek
2004-12-13 12:58 ` dynamic-hz Andrea Arcangeli
2004-12-13 19:12 ` dynamic-hz Pavel Machek
2004-12-13 20:34 ` dynamic-hz john stultz
2004-12-13 20:49 ` dynamic-hz Pavel Machek
2004-12-14 2:04 ` dynamic-hz Andrea Arcangeli
[not found] ` <20041214013924.GB14617@atomide.com>
2004-12-14 9:37 ` dynamic-hz Pavel Machek
2004-12-14 21:18 ` dynamic-hz Tony Lindgren
2004-12-14 22:06 ` dynamic-hz Pavel Machek
2004-12-14 23:00 ` dynamic-hz linux-os
2004-12-14 23:13 ` dynamic-hz Tony Lindgren
2004-12-22 20:02 ` dynamic-hz Tony Lindgren
2004-12-14 23:04 ` dynamic-hz Tony Lindgren
2004-12-14 2:46 ` dynamic-hz Andrea Arcangeli
2004-12-14 19:24 ` dynamic-hz john stultz
2004-12-14 2:36 ` dynamic-hz Andrea Arcangeli
2004-12-14 9:39 ` dynamic-hz Pavel Machek
2004-12-14 9:59 ` dynamic-hz Pavel Machek
2004-12-14 15:25 ` dynamic-hz Andrea Arcangeli
2004-12-14 22:02 ` USB making time drift [was Re: dynamic-hz] Pavel Machek
2004-12-14 23:16 ` Andrea Arcangeli
2004-12-15 2:59 ` Gene Heskett
2004-12-15 9:17 ` Andrea Arcangeli
2004-12-15 16:44 ` Gene Heskett
2004-12-15 18:20 ` Andrea Arcangeli
2004-12-16 1:59 ` Gene Heskett
2004-12-16 11:30 ` Andrea Arcangeli
2004-12-16 12:50 ` Alan Cox
2004-12-15 20:16 ` Pavel Machek
2004-12-16 2:02 ` Gene Heskett
2004-12-15 17:03 ` Gene Heskett
2004-12-15 17:48 ` Tim Schmielau
2004-12-16 2:03 ` Gene Heskett
2004-12-16 0:58 ` Pavel Machek
2004-12-16 2:33 ` john stultz
2004-12-16 1:15 ` Time goes crazy in 2.6.9 after long cli [was Re: USB making time drift] Pavel Machek
2004-12-16 11:13 ` Andrea Arcangeli
2004-12-16 12:49 ` Alan Cox
2004-12-13 14:50 ` dynamic-hz Zwane Mwaikambo
2004-12-13 7:43 ` dynamic-hz Stefan Seyfried
2004-12-13 13:58 ` dynamic-hz Russell King
2004-12-13 14:14 ` dynamic-hz Russell King
2004-12-13 14:52 ` dynamic-hz Alan Cox
2004-12-13 16:23 ` dynamic-hz Russell King
2004-12-13 17:53 ` dynamic-hz Michael Buesch
2004-12-13 18:04 ` dynamic-hz Russell King
2004-12-13 19:04 ` dynamic-hz Pavel Machek
2004-12-13 20:11 ` dynamic-hz Russell King
2004-12-14 0:16 ` dynamic-hz Eric St-Laurent
2004-12-15 18:04 ` dynamic-hz Alan Cox
2004-12-15 19:54 ` dynamic-hz linux-os
2004-12-16 2:17 ` dynamic-hz Gene Heskett
2004-12-16 12:42 ` dynamic-hz linux-os
2004-12-17 20:12 ` dynamic-hz H. Peter Anvin
2004-12-16 9:10 ` dynamic-hz Gabriel Paubert
2004-12-16 12:17 ` dynamic-hz Geert Uytterhoeven
2004-12-16 14:00 ` dynamic-hz Mitchell Blank Jr
2004-12-13 15:30 ` dynamic-hz Zwane Mwaikambo
2004-12-13 15:59 ` dynamic-hz Russell King
2004-12-13 16:14 ` dynamic-hz Pavel Machek
2004-12-13 16:06 ` dynamic-hz Pavel Machek
2004-12-13 16:19 ` dynamic-hz Jan Engelhardt
2004-12-13 8:29 ` dynamic-hz Jan Engelhardt
2004-12-14 22:54 ` dynamic-hz Lee Revell
2004-12-14 23:38 ` dynamic-hz Chris Friesen
2004-12-15 8:32 ` dynamic-hz Jan Engelhardt
2004-12-13 11:02 ` dynamic-hz Andrew Morton
2004-12-13 11:17 ` dynamic-hz Andrea Arcangeli
2004-12-13 11:25 ` dynamic-hz Andrew Morton
2004-12-13 11:47 ` dynamic-hz Andrea Arcangeli
2004-12-14 3:56 ` dynamic-hz Nish Aravamudan
2004-12-14 3:54 ` dynamic-hz Nish Aravamudan
2004-12-14 4:29 ` dynamic-hz Andrew Morton
2004-12-14 5:25 ` dynamic-hz Nish Aravamudan
2004-12-17 20:10 ` dynamic-hz Nish Aravamudan
2004-12-14 10:01 ` dynamic-hz Domen Puncer
2004-12-14 16:56 ` dynamic-hz Nish Aravamudan
2004-12-14 14:23 ` dynamic-hz linux-os
2004-12-14 16:54 ` dynamic-hz Nish Aravamudan
2004-12-14 17:15 ` dynamic-hz Andrea Arcangeli
2004-12-14 17:42 ` dynamic-hz Nish Aravamudan
2004-12-14 18:29 ` dynamic-hz Andrea Arcangeli
2004-12-14 19:00 ` Nish Aravamudan [this message]
2004-12-14 18:22 ` dynamic-hz linux-os
2004-12-14 18:38 ` dynamic-hz Andrea Arcangeli
2004-12-14 18:50 ` dynamic-hz Pavel Machek
2004-12-13 11:19 ` dynamic-hz Hans Kristian Rosbach
2004-12-13 11:22 ` dynamic-hz Pavel Machek
2004-12-13 11:39 ` dynamic-hz Andrea Arcangeli
2004-12-13 12:51 ` dynamic-hz Hans Kristian Rosbach
2004-12-13 13:01 ` dynamic-hz Andrea Arcangeli
2004-12-13 13:02 ` dynamic-hz Andrea Arcangeli
2004-12-13 15:06 ` dynamic-hz Geert Uytterhoeven
2004-12-13 16:12 ` dynamic-hz Pavel Machek
2004-12-13 16:14 ` dynamic-hz Geert Uytterhoeven
2004-12-14 4:06 ` dynamic-hz Nish Aravamudan
2004-12-14 4:05 ` dynamic-hz Nish Aravamudan
2004-12-13 11:33 ` dynamic-hz Andrea Arcangeli
2004-12-13 14:38 ` dynamic-hz Zwane Mwaikambo
2004-12-13 12:00 ` dynamic-hz Alan Cox
2004-12-13 15:52 ` dynamic-hz Andrea Arcangeli
2004-12-14 22:28 ` dynamic-hz Lee Revell
2004-12-14 22:40 ` dynamic-hz Con Kolivas
2004-12-14 22:50 ` dynamic-hz Lee Revell
2004-12-13 20:26 ` dynamic-hz Olaf Hering
2004-12-13 22:41 ` dynamic-hz Andrea Arcangeli
2004-12-13 20:56 ` dynamic-hz john stultz
2004-12-13 22:21 ` dynamic-hz Andrea Arcangeli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=29495f1d041214110076137f84@mail.gmail.com \
--to=nish.aravamudan@gmail.com \
--cc=akpm@osdl.org \
--cc=andrea@suse.de \
--cc=kernel@kolivas.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-os@analogic.com \
--cc=pavel@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.