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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).