linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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).