Bochs/bochs/docs-html/smp-simulation.html
Bryce Denney e61d00351f - merged BRANCH-smp-bochs into main branch. For details see comments
in BRANCH-smp-bochs revisions.
- The general task was to make multiple CPU's which communicate
  through their APICs.  So instead of BX_CPU and BX_MEM, we now have
  BX_CPU(x) and BX_MEM(y).  For an SMP simulation you have several
  processors in a shared memory space, so there might be processors
  BX_CPU(0..3) but only one memory space BX_MEM(0).  For cosimulation,
  you could have BX_CPU(0) with BX_MEM(0), then BX_CPU(1) with
  BX_MEM(1).  WARNING: Cosimulation is almost certainly broken by the
  SMP changes.
- to simulate multiple CPUs, you have to give each CPU time to execute
  in turn.  This is currently implemented using debugger guards.  The
  cpu loop steps one CPU for a few instructions, then steps the
  next CPU for a few instructions, etc.
- there is some limited support in the debugger for two CPUs, for
  example printing information from each CPU when single stepping.
2001-05-23 08:16:07 +00:00

59 lines
2.7 KiB
HTML

<HTML>
<HEAD>
<META NAME="copyright" CONTENT="Copyright 2001 by MandrakeSoft S.A.">
<META NAME="Author" CONTENT="Bryce Denney">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=iso-8859-1">
<TITLE>Running ./configure</TITLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#ececec" LINK="#3333cc" VLINK="#666666">
<CENTER><H1>Symmetric Multiprocessor (SMP) Simulation </H1></CENTER>
Bochs can now simulate an SMP machine when you use "--enable-processors=N"
in the configure command. SMP support was added by Bryce Denney, who
was very interested in watching a multiprocessor operating system work
at a low level. It should also be helpful to operating system developers
who are writing SMP drivers, or just for users who want to test drive
an SMP machine to see what it looks like.
<p>
It is important to understand that configuring bochs for 4 processors will make
your single-threaded applications run faster in general! On the contrary, it
has to spend time simulating idle processors as well as the ones doing your
task. The point is to simulate an SMP system, not to speed up a uniprocessor
application.
<p>
What was required to make SMP work in Bochs? (Note that only Linux 2.2
has been tested so far.)
<ul>
<li> local APIC on each processor with timer
<li> one I/O APIC model
<li> implement RDTSC feature (read time stamp counter)
<li> modifications to rombios.c to add a data structure called the Intel
Multiprocessor Configuration. An SMP-aware operating system
probes BIOS memory to find the structure, which contains information about
how many processors, their IDs, interrupt sources, etc.
</ul>
What needs to be done to improve SMP support?
<ul>
<li> still needs work on rombios.c to allow you to configure the number of
processors in the .bochsrc. Presently you have to choose the number
of processors at compile time.
<li> debugger support is still limited. For example, you can set breakpoints,
but you can't specify which processor you want to set the breakpoint for.
<li> test on SMP systems other than linux 2.2.14
<li> several parts of the APIC model which weren't needed for linux 2.2.14
are not implemented yet and cause a panic. If you boot linux 2.4.3 for
example, it says "panic: cluster model addressing not implemented". See
<a href="http://sourceforge.net/tracker/index.php?func=detail&aid=421938&group_id=12580&atid=362580">this bug report</a> for tips on getting linux 2.4 to boot.
(The apic is not the only problem!)
<li> A number of people have suggested using threads to simulate each CPU in
a different thread. Then on a real SMP machine, the threads can execute
in parallel. This is a great idea, but it's not done at present.
</ul>
</BODY>
</HTML>