From: Philippe Gerum <rpm@xenomai.org>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: Jan Kiszka <jan.kiszka@domain.hid>, xenomai-core <xenomai@xenomai.org>
Subject: Re: [Xenomai-core] official TSC model on SMP
Date: Wed, 20 Sep 2006 10:17:47 +0200 [thread overview]
Message-ID: <1158740267.5544.31.camel@domain.hid> (raw)
In-Reply-To: <1158702410.4972.131.camel@domain.hid>
On Tue, 2006-09-19 at 23:46 +0200, Philippe Gerum wrote:
> On Sun, 2006-09-17 at 19:36 +0200, Gilles Chanteperdrix wrote:
> > Philippe Gerum wrote:
> > > On Sun, 2006-09-17 at 13:54 +0200, Jan Kiszka wrote:
> > > > Hi,
> > > >
> > > > reading through timer code of Xenomai I just wondered (again) what our
> > > > official model of TSCs on multiprocessor boxes are:
> > > >
> > > > 1) (practically) perfectly synchronised without offset
> > > >
> > > > 2) synchronised but with (unknown?) offset
> > > >
> > > > 3) unsynchronised
> > >
> > > The current model is unsynchronized. If anything from the codebase is
> > > found relying on the opposite, be it partially or fully, then it's
> > > utterly broken in the SMP case, and I'm likely the one to blame.
> > > IOW, we don't currently provide any guarantee to anyone that a timestamp
> > > could be interpreted anywhere else than the CPU it was read from, and
> > > leave all the related burden to the application developer (e.g. by mean
> > > of managing CPU affinity constraints and the like).
> >
> > I think xntimer_set_sched assumes some continuity, since it reenqueues
> > on a different CPU a timer whose date has been set up on one cpu. If we
> > wanted strict unsynchronized tsc, we would have to :
> > - compute the difference between the current date and the timer date
> > - enqueue the timer on a migration queue
> > - send an IPI to the distant CPU
> > - on the distant CPU, iterate over the migration queue, recompute the
> > expiration dates and reenqueue the timers.
> >
>
> Looking at the code, xntimer_set_sched is used in the following
> contexts:
>
> o setting a CPU affinity for timers just before they get started. They
> might be active already but in such a case, we could simply disarm them
> before migration since they are going to be started anew right after,
> which would solve the issue. AFAIC, this is the most common case.
>
> o changing a CPU affinity for a possibly running (periodic internal)
> timer, without restarting it (i.e. xnpod_migrate_thread). This happens
> once.
>
> So, basically, the issue is about allowing threads that run a periodic
> timer to migrate on the fly, without breaking their ongoing
> timeline, ... or not. (And all of the above only applies to the oneshot
> system timing, since the periodic jiffy counter is global by nature, and
> would never suffer any discontinuity).
>
To elaborate a bit more on this, and considering that only stopped
timers are migrated, we would indeed need a timer migration queue on the
remote CPU, but we might assume that the date field of the linked timers
would convey the original date, and not the TSC converted one or delay
from such, and we could safely assume that such timers would not be
indexed by any data structures that usually hold the outstanding timers.
Simply reusing the sched IPI for kicking the remote CPU to fire up the
migrated timers would even be an option.
--
Philippe.
prev parent reply other threads:[~2006-09-20 8:17 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-17 11:54 [Xenomai-core] official TSC model on SMP Jan Kiszka
2006-09-17 17:15 ` Philippe Gerum
2006-09-17 17:36 ` Gilles Chanteperdrix
2006-09-18 9:43 ` Jan Kiszka
2006-09-19 21:46 ` Philippe Gerum
2006-09-20 8:17 ` Philippe Gerum [this message]
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=1158740267.5544.31.camel@domain.hid \
--to=rpm@xenomai.org \
--cc=gilles.chanteperdrix@xenomai.org \
--cc=jan.kiszka@domain.hid \
--cc=xenomai@xenomai.org \
/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.