Hello all,
I am writing a config for a multi-socket system in gem5 to use in testing a
research design implementation. I am modifying x86_board.py,
abstract_system_board.py, and abstract_board.py. I want to modify the
X86Board class to accept a list of processors instead of a single
processor, and set up a multiprocessor system. In AbstractSystemBoard and
AbstractBoard, the modifications seem to be as simple as adding a few loops
to code relevant to the processor(s)
However, in x86_board.py, in the X86Board class, there is the function
_setup_io_devices(), which creates a set of objects that the code comments
say relate to Intel MP. From what I can tell, IntelMP refers to the Intel
MultiProcessor standard, and primarily relates to interrupt controllers.
How would I need to modify this function, and other code related to Intel
MP to properly support multiple processors?
Thank you,
-James Pangia
Hey James,
Perhaps I am very wrong in my assumptions here, but is there any difference in your idea between a "multiprocessor" setup and a multicore setup? In the gem5 stdlib design each board has one processor, but each processor can have as many CPUs/Cores as you desire. I don't know the ins and outs of your research here, but do you really want to simulate separate processors or just have a system with many cores? The code you see in `_setup_io_devices()` sets up an `X86IntelMPProcessor` for each core in the processor and is our way of conforming to this standard (-ish... I think...).
Behind the scenes all a gem5 standard library "processor" is, is a list of Cores in which the processor object manages. While we could have more than one processor per-board I don't know how it would actually change what's being simulated.
I think you could have more than one "processor" per board but I think the way of handling them in a simulation would be to essentially to create a union of all the cores across all the processors and, effectively, treat them as one big processor anyway.
Again, perhaps I've completely misunderstood this idea, but I'd suggest looking at gem5 standard library processors and how they are constructed and used inside a simulation and see if you can make extensions/modifications there first: https://github.com/gem5/gem5/tree/stable/src/python/gem5/components/processors.
Kind regards,
Bobby
Thanks for the reply, Bobby
My research does require multiple separate processors/sockets, not just
many cores. I explored using multiple Processor objects a little further,
but the necessary modifications proved too complicated to spend more time
exploring.
Instead, I will be faking multiple sockets by tracking which core a request
came from and modifying the MemCtrl class to add a different memory access
latency depending on where the target physical address is—effectively, I’m
faking NUMA. This choice also makes sense in light of your comment that the
Core objects all wind up in one pool from the simulator’s perspective
anyway, so thank you for that clarification.
On Wed, Oct 11, 2023 at 5:09 PM bbruce--- via gem5-users <
gem5-users@gem5.org> wrote:
Hey James,
Perhaps I am very wrong in my assumptions here, but is there any
difference in your idea between a "multiprocessor" setup and a multicore
setup? In the gem5 stdlib design each board has one processor, but each
processor can have as many CPUs/Cores as you desire. I don't know the ins
and outs of your research here, but do you really want to simulate separate
processors or just have a system with many cores? The code you see in
_setup_io_devices() sets up an X86IntelMPProcessor for each core in the
processor and is our way of conforming to this standard (-ish... I
think...).
Behind the scenes all a gem5 standard library "processor" is, is a list of
Cores in which the processor object manages. While we could have more than
one processor per-board I don't know how it would actually change what's
being simulated.
I think you could have more than one "processor" per board but I think the
way of handling them in a simulation would be to essentially to create a
union of all the cores across all the processors and, effectively, treat
them as one big processor anyway.
Again, perhaps I've completely misunderstood this idea, but I'd suggest
looking at gem5 standard library processors and how they are constructed
and used inside a simulation and see if you can make
extensions/modifications there first:
https://github.com/gem5/gem5/tree/stable/src/python/gem5/components/processors
.
Kind regards,
Bobby
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-leave@gem5.org