Hi there,
There were several posts related to this issue, but I cannot find a
conclusive answer.
I'm simulating 16-core CMP with 1 GB memory (with
MSI_MOSI_CMP_directory protocol). I've found that the physical memory
space in Solaris 10 is non-contiguous as follows:
simics> phys_mem.map
base object fn offs length
0x0000000000000000 memory 0 0x0
0x10000000 /* 1st 256 MB */
0x0000000800000000 memory 0 0x10000000
0x10000000 /* 2nd 256 MB */
0x0000001000000000 memory 0 0x20000000
0x10000000 /* 3rd 256 MB */
0x0000001800000000 memory 0 0x30000000
0x10000000 /* 4th 256 MB */
0x000007fff07ffff0 simicsfs 0 0x0 0x10
simics>
To fix the problem, I enabled the "CONTIGUOUS_ADDRESSES" flag in
ruby/Makefile and recompiled Ruby. When I tried to load and set up
Ruby, I hit upon a seg fault as follows:
simics> ruby0.init
[[[ SKIPPED ]]]
Turning I-STC off and flushing old data
Turning D-STC off and flushing old data
The switch time will change to 1 cycles (for CPU-0) once all
processors have synchronized.
successful installation of the ruby timing model.
Ruby Timing Mode
Warning: optimizations not enabled.
Creating event queue...
Creating event queue done
Creating system...
Processors: 16
Creating system done
Establishing Contiguous Address Space Mappings...Segmentation fault
(SIGSEGV) in main thread
The simulation state has been corrupted. Simulation cannot continue.
Please restart Simics.
simics>
My version of Ruby works fine without the CONTIGUOUS_ADDRESSES flag.
Is this flag supported by GEMS 2.1? Or is there another way to get
around the problem?
Thanks,
Jae
|