Hello all,

I'm fairly new to M5, but was watching this thread with interest since I am trying to do something similar to James (but in syscall emulation mode).  Thanks, Kevin, for the explanation - this seems to work, although I believe in SE mode the 'workload' parameter needs to be set for both CPUs as well (at least, I need to do so in order to get it to run).

One further question related to doing this in SE mode:

When trying to switch in the O3 CPU model, it reliably core-dumps in the resume() function, at the assert statement on line 821 of src/cpu/o3/cpu.cc.  It appears that the 'system' object is referenced, but is only defined in FS mode.  For now I've commented out the assert, but I wanted to know whether there's a more robust fix (the assert seems important).

Incidentally, I assume the switchCpus function essentially takes the place of 'fast-fowarding' (eg, in SimpleScalar), since I don't see any other way to do this?

Thanks,

   -Vilas

On 9/13/06, Kevin Lim <[EMAIL PROTECTED]> wrote:

Hi James,

 

Sorry for the slow response.  I've had some pretty big deadlines due recently, so I've been very busy with that.

 

I looked at a config I had working a while ago for sampling and I updated the Wiki with the information from it.  Basically you should be able to assign the CPU you will switch in as a child of the system that it will run in once it is switched in.  So if you had an instantiation of System called my_system, you should be able to do my_system.switch_cpu = my_switch_cpu.  In this case you're not actually setting a parameter within System, but merely indicating that it has a child object switch_cpu.

 

Hopefully this helps,

 

Kevin

 


From: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED]] On Behalf Of James Anon
Sent: Tuesday, September 05, 2006 4:07 PM
To: M5 users mailing list
Subject: Re: [m5-users] Using the SwitchCpu function

 

Hi Kevin,

Thanks for the response.  I was wondering if you could expand a bit upon exactly where to attach the child cpu list (possibly by just providing a sample configuration file that uses the swithCpu).  I've tried attaching it at both the root level, and at the system level; but the problem is m5 dies with the error that there is no such parameter at that level ( e.g. "AttributeError: Class Root has no parameter cpuList").  I've looked through the root and system objects and can't find any parameter associated with such a list.  I also tried declaring a vector of cpus instead of just one ( e.g.     root.system.cpu = [cpu,cpu2]) to see if I could get it to instantiate that way, but that usually ends in an error such as "AttributeError: parent.any matched more than one:".  Finally, I've also tried creating multiple systems ( root.testdsys and root.drivesys), but I don't think that is giving me what I desire.

I'm still pretty new to Python so I apologize if there is a simple way to look this up and I am just overlooking it, but as of this moment I'm at a lost for how to solve this issue. 

James

On 9/3/06, Kevin Lim <[EMAIL PROTECTED]> wrote:

I believe the problem here is that cpu and cpu2 need to be part of the system (somewhere) in order to be instantiated by m5's configuration parsing.  The error that it's giving you means that you didn't have those two CPUs as part of the configuration that actually gets instantiated.  Thus when it tries to switch between the CPUs, it finds that the CPUs have no corresponding object within the running instance of m5.  Try making your switch_cpu_list as a child of either the root object or a system object (I believe you should just be able to do "root.switch_cpus = switch_cpu_list" or something along those lines).  I'll try to clean up the Wiki to clarify that when I get a better example.

 

Kevin

 


From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] On Behalf Of James Anon
Sent: Friday, September 01, 2006 2:35 PM
To: [email protected]
Subject: [m5-users] Using the SwitchCpu function

 

I am trying to use the m5.switchCpus function to quickly simulate pass the linux booting stage, and then switch to detailed mode after the full system is booted.  I followed the wiki page and have made minor modifications to the fs.py example script including:

cpu = AtomicSimpleCPU()
cpu2 = DetailedO3CPU()
mem_mode = 'timing'
.
.
.

switch_cpu_list = [(cpu,cpu2)]
m5.simulate(3663496423522)
m5.switchCpus(switch_cpu_list)
exit_event = m5.simulate(maxtick)


Most other options I've left the same from the fs.py script, but when I run the simulator, it works perfectly until the switch point and then dies with:

Switching CPUs
Traceback (most recent call last):
  File "<string>", line 1, in ?
  File "build/ALPHA_FS/python/m5/main.py", line 314, in main
    execfile(sys.argv[0], scope)
  File "configs/example/fsSwap.py", line 86, in ?
    m5.switchCpus(switch_cpu_list)
  File "build/ALPHA_FS/python/m5/__init__.py", line 206, in switchCpus
    new_cpu.takeOverFrom(old_cpus[index])
  File "build/ALPHA_FS/python/m5/config.py", line 570, in takeOverFrom
    self._ccObject.takeOverFrom(cpu_ptr)
AttributeError: 'NoneType' object has no attribute 'takeOverFrom'


Is there something I'm forgetting to instantiate?  Any help would be greatly appreciate.

Ps.  Thanks for setting up the WIKI page.  It has been a tremendous help, and in my opinion a great improvement over the documentation that was available for the previous version of m5.  I hope the community continues to add to it!


_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

 


_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users


_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

Reply via email to