Ruby: Resurrect Cache Warmup Capability
Review Request #927 - Created Dec. 4, 2011 and submitted
| Information | |
|---|---|
| Nilay Vaish | |
| gem5 | |
| default | |
| Reviewers | |
| Default | |
| ali, gblack, nate, stever | |
Ruby: Resurrect Cache Warmup Capability This patch resurrects ruby's cache warmup capability. It essentially makes use of all the infrastructure that was added to the controllers, memories and the cache recorder.
Posted (Dec. 4, 2011, 6:15 p.m.)
-
src/sim/eventq.hh (Diff revision 1) -
One place you're using this is to slip an event to the front of the list, run it, and then put the head event back. That seems like a really bad way to do things. You could just call the process function on the event directly and avoid hacks like this.
Posted (Dec. 6, 2011, 8:36 a.m.)
I was actually asking for us as individuals to be removed from the default set of reviewers since the mailing list is already there too.
Posted (Dec. 7, 2011, 7:47 a.m.)
Thanks for pushing this forward Nilay! I will feel very good to see this functionality finally checked in. I know people are concerned about the eventq manipulation, but what Nilay has implemented is much better than some of our other suggestions. As a result of this change, we can start the process of removing all the files in src/mem/ruby/eventqueue. That will be very nice. My two biggest concerns are the global variables and not utilizing the recently added cache flush support to create valid data checkpoints of both the caches and memory. See comments below.
-
src/mem/protocol/MOESI_CMP_token-L1cache.sm (Diff revision 1) -
Do not comment out this line. Having to remove the clean data checks, along with the two event queues, were the two reasons why I didn't check in this patch a long time ago. Now that we have cache flush support and functional access support in Ruby, we should be able to create Ruby checkpoints with valid data in both main memory and in the cache trace. Therefore, we should not have to worry about cache warmup traces breaking this check. If you're not aware of how those checks broke in the past, please let me know and I'm happy to discuss the details.
-
src/mem/protocol/MOESI_CMP_token-L2cache.sm (Diff revision 1) -
Same here. Do not comment out.
-
src/mem/protocol/MOESI_CMP_token-dir.sm (Diff revision 1) -
Here too
-
src/mem/protocol/MOESI_hammer-cache.sm (Diff revision 1) -
here
-
src/mem/protocol/MOESI_hammer-dir.sm (Diff revision 1) -
here
-
src/mem/ruby/common/Global.hh (Diff revision 1) -
Why do these need to be global? Can they be added to the gem5 eventqueue (not the ruby eventqueue) or ruby system object instead? I seem to remember that is where they were before.
-
src/mem/ruby/system/System.cc (Diff revision 1) -
After recording the cache contents, we should flush the cache contents to memory. Then Ruby's memory image can be checkpointed with valid data.
Review request changed
Updated (Jan. 3, 2012, 8:43 a.m.)
Description: |
|
|||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 2 (+407 -39) |
Posted (Jan. 6, 2012, 9:49 a.m.)
I have a few questions below. Also FYI...it appears that some of parts of patch don't apply cleanly to the main repo.
-
src/mem/ruby/system/Sequencer.cc (Diff revision 2) -
I like the term cooldown, but I think it is a little bit confusing in this situation. If I understand this code correctly, you're not trying to avoid data reads and writes before taking a checkpoint. Rather you don't want the hitcallbacks of Flush requests trying to modify memory. Is that correct? If so, I thought we already dealt with that problem by simply not setting the data pointer of flush packet. Maybe I'm missing something.
-
src/mem/ruby/system/Sequencer.cc (Diff revision 2) -
Did you mean to set this value to false? I'm not sure why it was ever set to true before, but it is unclear how this patch would impact this value.
-
src/mem/ruby/system/Sequencer.cc (Diff revision 2) -
Am I reading this correctly? Is this issuing the next fetch or flush request inside the previous request's callback? Is that how the patch used to work? If so, that seems very odd and would create one deep call stack. I must be missing something here. Possibly the next request is being schedule for the next cycle. If that is the case, then these functions should be renamed to something like "notifyFetchCompletion" or "notifyFlushCompletion"
Review request changed
Updated (Jan. 6, 2012, 10:24 a.m.)
Diff: |
Revision 3 (+407 -39) |
|---|
Review request changed
Updated (Jan. 6, 2012, 9:15 p.m.)
Diff: |
Revision 4 (+390 -25) |
|---|
