----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://reviews.gem5.org/r/2957/#review6744 -----------------------------------------------------------
Overall, I really like the direction of this patch, since replacement policy should be handled modularly by the cache controllers rather than the Sequencer. I wonder if it would be possible to limit the number of ways that MRU can be updated. Currently, this patch uses (1) lookup() and setMRU() in actions, and (2) some specific new actions that just call setMRU(). Previously, setMRU was called from a single place in the Sequencer, so there wasn't any worry of overlooking a place where replacement policy needed to be updated. Now, it's a little more complicated and there aren't any safeguards ensuring that one remembers to update MRU. src/mem/protocol/MESI_Three_Level-L0cache.sm (line 147) <http://reviews.gem5.org/r/2957/#comment5848> Minor: Convention in other SLICC controller functions is to name function arguments using lower_underscore rather than lowerCamelCase. src/mem/protocol/MESI_Three_Level-L0cache.sm (line 697) <http://reviews.gem5.org/r/2957/#comment5847> Is it necessary to update the replacement policy through an additional action like this? This seems pretty fragile if a user forgets to include this in transitions analogous to this one. It would also be nice to have a single process for updating replacement policy. src/mem/protocol/RubySlicc_Types.sm (line 150) <http://reviews.gem5.org/r/2957/#comment5849> Minor: Could you use the default parameter specifier here so you could avoid passing static 'false' in a few cases? - Joel Hestness On July 10, 2015, 4:29 p.m., Nilay Vaish wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > http://reviews.gem5.org/r/2957/ > ----------------------------------------------------------- > > (Updated July 10, 2015, 4:29 p.m.) > > > Review request for Default. > > > Repository: gem5 > > > Description > ------- > > Changeset 10933:184eac6db147 > --------------------------- > ruby: call setMRU from L1 controllers, not from sequencer > Currently the sequencer calls the function setMRU that updates the replacement > policy structures with the first level caches. While functionally this is > correct, the problem is that this requires calling findTagInSet() which is an > expensive function. This patch removes the calls to setMRU from the > sequencer. > The first level controllers shoul now update the replacement policy. If the > access is a cache hit, the function findTagInSet is called only once when the > block is first found (common case). If the access is a miss, then the > controller calls setMRU() just before calling the sequencer for returning the > data. > > > Diffs > ----- > > src/mem/protocol/MESI_Three_Level-L0cache.sm 5c76426fd9ee > src/mem/protocol/MESI_Three_Level-L1cache.sm 5c76426fd9ee > src/mem/protocol/MESI_Two_Level-L1cache.sm 5c76426fd9ee > src/mem/protocol/MESI_Two_Level-L2cache.sm 5c76426fd9ee > src/mem/protocol/MI_example-cache.sm 5c76426fd9ee > src/mem/protocol/MOESI_CMP_directory-L1cache.sm 5c76426fd9ee > src/mem/protocol/MOESI_CMP_directory-L2cache.sm 5c76426fd9ee > src/mem/protocol/MOESI_CMP_token-L1cache.sm 5c76426fd9ee > src/mem/protocol/MOESI_CMP_token-L2cache.sm 5c76426fd9ee > src/mem/protocol/MOESI_hammer-cache.sm 5c76426fd9ee > src/mem/protocol/MOESI_hammer-dir.sm 5c76426fd9ee > src/mem/protocol/RubySlicc_Types.sm 5c76426fd9ee > src/mem/ruby/structures/CacheMemory.hh 5c76426fd9ee > src/mem/ruby/structures/CacheMemory.cc 5c76426fd9ee > src/mem/ruby/system/Sequencer.cc 5c76426fd9ee > > Diff: http://reviews.gem5.org/r/2957/diff/ > > > Testing > ------- > > > Thanks, > > Nilay Vaish > > _______________________________________________ gem5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/gem5-dev
