All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dimitri Sivanich <sivanich@sgi.com>
To: Peter Zijlstra <peterz@infradead.org>,
	linux-kernel@vger.kernel.org, tony.luck@intel.com
Cc: Ingo Molnar <mingo@elte.hu>, Mike Galbraith <efault@gmx.de>,
	Srivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>,
	Gregory Haskins <ghaskins@novell.com>, Greg KH <greg@kroah.com>,
	Nick Piggin <npiggin@suse.de>, Robin Holt <holt@sgi.com>
Subject: Re: 2.6.27.8 scheduler bug - threads not being scheduled for long periods
Date: Mon, 5 Jan 2009 16:36:21 -0600	[thread overview]
Message-ID: <20090105223621.GB20319@sgi.com> (raw)
In-Reply-To: <20090105215429.GA20319@sgi.com>

On Mon, Jan 05, 2009 at 03:54:29PM -0600, Dimitri Sivanich wrote:
> On Mon, Jan 05, 2009 at 09:55:58PM +0100, Peter Zijlstra wrote:
> > On Mon, 2009-01-05 at 11:56 -0600, Dimitri Sivanich wrote:
> > > One place we've found this happens is in update_curr(), which calculates a
> > > delta_exec value as follows:
> > >         delta_exec = (unsigned long)(now - curr->exec_start);
> > > 
> > > Sometimes this value will be very large, as 'now' (the rq clock time) will
> > > be less than 'exec_start'.  When this happens, __update_curr() will
> > > calculate a delta_exec_weighted based on this large value and add it to the
> > > thread's vruntime:
> > >         curr->vruntime += delta_exec_weighted;
> > 
> > So you're saying your rq->clock = sched_clock_cpu(cpu) = sched_clock()
> > [on ia64] goes backwards?
> > 
> > If so, then that's an architecture bug, sched_clock() must never be seen
> > to go backwards!
> 
> Actually, sched_clock() should not go backwards on any one cpu, but the readings will be different between cpus.
> 
> Also, we noticed the following code is being used for sched_clock_cpu():
> u64 sched_clock_cpu(int cpu)
> {
>         if (unlikely(!sched_clock_running))
>                 return 0;
>         return sched_clock();
> }
> 
> and is called when smp_processor_id() != cpu.

And sure enough, the rq->clock is sometimes going backwards.

The comment for sched_clock() in arch/ia64/kernel/head.S:
 * Return a CPU-local timestamp in nano-seconds.  This timestamp is
 * NOT synchronized across CPUs its return value must never be
 * compared against the values returned on another CPU.  The usage in
 * kernel/sched.c ensures that.

We will try this with CONFIG_HAVE_UNSTABLE_SCHED_CLOCKS.

Thanks for the heads up!

  reply	other threads:[~2009-01-05 22:36 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-05 17:56 2.6.27.8 scheduler bug - threads not being scheduled for long periods Dimitri Sivanich
2009-01-05 18:44 ` Gregory Haskins
2009-01-05 18:51   ` Dimitri Sivanich
2009-01-05 18:59     ` Gregory Haskins
2009-01-14 22:34       ` kenneth johansson
2009-01-05 20:55 ` Peter Zijlstra
2009-01-05 21:54   ` Dimitri Sivanich
2009-01-05 22:36     ` Dimitri Sivanich [this message]
2009-01-05 23:02       ` Dimitri Sivanich
2009-01-06  7:36         ` Peter Zijlstra

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=20090105223621.GB20319@sgi.com \
    --to=sivanich@sgi.com \
    --cc=efault@gmx.de \
    --cc=ghaskins@novell.com \
    --cc=greg@kroah.com \
    --cc=holt@sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=npiggin@suse.de \
    --cc=peterz@infradead.org \
    --cc=tony.luck@intel.com \
    --cc=vatsa@linux.vnet.ibm.com \
    /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.