Hi,
I am doing some initial simulations of a Solaris OS using Simics
2.2.19 and Gems 1.2. The simulations simply involve sitting at the
shell prompt (no real workload, except for the background services of
Solaris).
I am trying different combinations of several parameters, like the
cpu-switch-time option of Simics, the Simics -stall flag, with and
without Ruby loaded.
I am using the following command in Simics to do the simulation:
date; cc 75000000; date
Since the processors in this machine are all @ 75MHz, this should be
1s in simulated time.
I am getting the following results:
no ruby, no -stall
cpu-switch-time 1: 61s
cpu-switch-time 10: 15s
cpu-switch-time 100: 3s
cpu-switch-time 1000: 2s
cpu-switch-time 10000: 2s
no ruby, with -stall
cpu-switch-time 1: 60s
cpu-switch-time 10: 15s
cpu-switch-time 100: 9s
cpu-switch-time 1000: 8s
cpu-switch-time 10000: 8s
These simulations without ruby show that the -stall flag has most
impact with big cpu-switch-times.
When adding ruby, I get:
with ruby, no -stall
cpu-switch-time 1: 31m
cpu-switch-time 10: 24m
cpu-switch-time 100: 11m
cpu-switch-time 1000: 9m
cpu-switch-time 10000: 9m
with ruby, with -stall
cpu-switch-time 1: (still to run)
cpu-switch-time 10: (still running, > 2h)
cpu-switch-time 100: 2h
cpu-switch-time 1000: 2h
cpu-switch-time 10000: 1h37m
Looking at a cpu-switch-time of 1, the slowdowns respectively are 60x
(without ruby), 1800x (with ruby, without -stall) and more than 7200x
(with ruby, with stall).
I found some example figures in the ISCA tutorial, but I am unsure how
to relate my figures to those. I thought that I was simulating 1s, but
now on a second thought, using 4 processors @ 75MHz, the simulated
75000000 cycles would ideally take only 250ms, right? In that case,
the slowdown factors I gave above are per processor, and the whole
should be multiplied by 4 to get the total slowdown. Is this correct?
Are the results I am getting reasonable?
In addition, I am a bit confused about the interaction between the
-stall flag and ruby. In my understanding, the -stall flag adds some
realism to memory transactions, by respecting some latency. Ruby adds
cache structures, and thus adds latency due to cache misses. Is that
correct?
In the Ruby documentation, it is stated that the -stall flag should
always be used to ensure forward-compatibility with Simics 3. But in
Simics 2 I can choose to run with or without the -stall flag, so what
is the difference between both scenarios?
Thanks, Thomas
|