ruby: interface with classic memory controller
Review Request #2422 - Created Sept. 24, 2014 and submitted
| Information | |
|---|---|
| Nilay Vaish | |
| gem5 | |
| default | |
| Reviewers | |
| Default | |
Changeset 10502:9b5f1e86eec0 --------------------------- ruby: interface with classic memory controller This patch is the final in the series. The whole series and this patch in particular were written with the aim of interfacing ruby's directory controller with the memory controller in the classic memory system. This is being done since ruby's memory controller has not being kept up to date with the changes going on in DRAMs. Classic's memory controller is more up to date and supports multiple different types of DRAM. This also brings classic and ruby ever more close. The patch also changes ruby's memory controller to expose the same interface.
Issue Summary
5
1
4
0
| Description | From | Last Updated | Status |
|---|---|---|---|
| We might want to tailor how this is done in the future so that you assign the ranges once, to ... | Andreas Hansson | Sept. 25, 2014, 12:18 a.m. | Open |
Posted (Sept. 25, 2014, 12:18 a.m.)
-
configs/ruby/Ruby.py (Diff revision 1) -
We might want to tailor how this is done in the future so that you assign the ranges once, to the directories, and then query the directories for their range rather than recomputing it.
-
src/mem/ruby/slicc_interface/AbstractController.hh (Diff revision 1) -
Copy paste :-)
-
src/mem/ruby/slicc_interface/AbstractController.hh (Diff revision 1) -
Should this really be a vector?
-
src/mem/ruby/slicc_interface/AbstractController.cc (Diff revision 1) -
Should we not have one of these for every memory controller? Or am I missing something? Is there an 1:N mapping of RubyController to memory controllers? If so, I'd even argue to put a NoncoherentXBar in between and let that XBar deal with the interleaving between the "local" controllers/channels.
First of all: awesome effort! Thanks Nilay I have some questions around the topology that would be good to iron out, but overall this is a massive step in the right direction.
Review request changed
Updated (Sept. 30, 2014, 2:38 p.m.)
Description: |
|
||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 2 (+431 -2040) |
Posted (Sept. 30, 2014, 2:48 p.m.)
-
configs/ruby/Ruby.py (Diff revisions 1 - 2) -
I may have confused myself here, so let's see if I have gotten this right. On the highest level, we have a number of memory ranges in the system (system.mem_ranges). These are possibly of different size etc. Somehow, and this is where I am not sure how it's done, we interleave these ranges across the directory controllers. Is this done purely by looking at some fixed address bits across the ranges? Once we are at each directory controller, each such controller could in theory connect to more than a single channel of memory, and then we need to interleave once again, but now it gets complicated. The crossbar is now responsible for an interleaved range for every range in system.mem_ranges, and then we again stripe across a number of channels? This means the memory controller (and ultimately AbstractMemory) sees a number of striped ranges, and the crossbar is not responsible for a contiguous range, but rather a stripe from a contiguous range. Is that right?
Review request changed
Updated (Oct. 21, 2014, 3:02 p.m.)
Summary: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Description: |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Diff: |
Revision 3 (+580 -1120) |
