Non-sequential AP starts [Was: Re: 8-core server]

John Baldwin jhb at freebsd.org
Wed Oct 10 14:31:32 PDT 2007


On Saturday 29 September 2007 12:25:15 am Darren Pilgrim wrote:
> Bernd Walter wrote:
> > On Fri, Sep 28, 2007 at 07:56:49AM -0700, Darren Pilgrim wrote:
> >> Jeremy Chadwick wrote:
> >>> I think what you're not noticing is that the cores are being launched in
> >>> non-sequential order.  1, 2, 3, 4, 7, 5, 6.  This isn't a problem.
> >> Why they wouldn't be launched sequentially?
> > 
> > First SMP rule:
> > Don't expect a specific execution order from things running parallel.
> > 
> > I don't know the code, but would assume that they are started
> > sequentially and each core prints it's own line, so they get
> > disordered.
> 
> This question bugged me long enough for me to go read some source to 
> find the answer, but I ended up with more questions.  I guess that's 
> what I get for reading boot code. :)  I know it's basically just a race 
> condition, but where does the race actually occur?  In each core's 
> execution of startup instructions leading up to the printf() in 
> init_secondary() or in the assignment of the value returned by 
> PCPU_GET(cpudid)?  Where is the data behind PCPU_GET() anyway?  I 
> couldn't find it.  Is AP launch order random or are there CPU 
> characteristics that result in reproducible non-sequential ordering?

The lauch is random.  The boot processor sets a flag to tell the APs (which 
are already running, but spinnin in a loop) "ok, go run".  The APs then 
compete on a spin lock to serialize their final initialization, and 
they "launch" in the order they acquire the spin lock, which is quite 
indeterminate.

-- 
John Baldwin


More information about the freebsd-current mailing list