9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Richard Miller <9fans@hamnavoe.com>
To: 9fans@9fans.net
Subject: Re: [9fans] 9vx, kproc and *double sleep*
Date: Sun, 13 Jun 2010 10:00:26 +0100	[thread overview]
Message-ID: <3392e490f654445c44d7a285c14069fb@hamnavoe.com> (raw)
In-Reply-To: <AANLkTimFWKiVUowEyMOehT5r3fs--xdv25eS05g8zoG5@mail.gmail.com>

> - splhi -- it's not a true splhi in some sense; is it possible that
> some code is sneaking in and running even when you splhi()? Could this
> explain it?

The error Philippe has found is only indirectly related to splhi().
It's a race between a process in sleep() returning to the scheduler on
cpu A, and the same process being readied and rescheduled on cpu B
after the wakeup.

On native plan 9, A always wins the race because it runs splhi() and
the code path from sleep to schedinit (where up->state==Running is
checked) is shorter than the code path from runproc to the point in
sched where up->state is set to Running.  But the fact that this works
is timing-dependent: if cpu A for some reason ran slower than cpu B,
it could lose the race even without being interrupted.

As Philippe explained, in 9vx the cpus are being simulated by
threads.  Because these threads are being scheduled by the host
operating system, the virtual cpus can appear to be running at
different speeds or to pause at awkward moments.  Even without
any "preemption" at the plan 9 level of abstraction, the timing
assumption which prevents the sleep - reschedule race is no longer
guaranteed.




  parent reply	other threads:[~2010-06-13  9:00 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-11 14:06 Philippe Anel
2010-06-11 14:40 ` ron minnich
2010-06-11 14:49   ` erik quanstrom
2010-06-11 14:54     ` Philippe Anel
2010-06-11 15:03       ` erik quanstrom
2010-06-11 15:22         ` Philippe Anel
2010-06-11 15:25           ` Philippe Anel
2010-06-11 14:59     ` Philippe Anel
2010-06-11 17:11       ` Bakul Shah
2010-06-11 17:31         ` Philippe Anel
2010-06-11 18:34           ` Bakul Shah
2010-06-11 18:36             ` erik quanstrom
2010-06-11 18:51             ` Philippe Anel
2010-06-12  7:02     ` Philippe Anel
2010-06-12  9:22       ` Philippe Anel
2010-06-12 11:51         ` erik quanstrom
2010-06-13 13:01       ` Richard Miller
2010-06-13 13:43         ` Philippe Anel
2010-06-13 14:26         ` Philippe Anel
2010-06-13 16:20           ` ron minnich
2010-06-13 16:34             ` Philippe Anel
2010-06-13 17:23               ` Philippe Anel
2010-06-13 18:03             ` Philippe Anel
2010-06-14 19:15               ` Charles Forsyth
2010-06-14 19:36                 ` Philippe Anel
2010-06-15  2:57                 ` ron minnich
2010-06-15  3:36               ` ron minnich
2010-06-12 20:15     ` Richard Miller
2010-06-12 20:30       ` ron minnich
2010-06-12 22:15         ` Charles Forsyth
2010-06-13  0:04           ` ron minnich
2010-06-13 13:32           ` erik quanstrom
2010-06-13 22:34             ` Charles Forsyth
2010-06-13  9:00         ` Richard Miller [this message]
2010-06-11 14:49   ` Philippe Anel
2010-06-11 14:59     ` ron minnich
2010-06-11 15:02 ` ron minnich
2010-06-11 15:04   ` erik quanstrom
2010-06-11 15:43     ` ron minnich

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=3392e490f654445c44d7a285c14069fb@hamnavoe.com \
    --to=9fans@hamnavoe.com \
    --cc=9fans@9fans.net \
    /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).