-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/3043/
-----------------------------------------------------------

Review request for Default.


Repository: gem5


Description
-------

Changeset 11069:d415555504b9
---------------------------
ruby: combine RubyPort and Sequencer and rename as FirstLevelController

This patch move the file RubyPort.* to FirstLevelController.*.  Then, it copies
the contents of Sequencer.* to FirstLevelController.*.  Finally, it renames
RubyPort and Sequencer to FirstLevelController and adjusts line lengths where
ever execeeded. There are two reasons for this change:

* I find this FirstLevelController abstraction better than having separate
RubyPort and Sequencer.  With the FirstLevelController class, we are trying to
imply the functionality is common to all controllers that are directly attached
to the cores.  Earlier, it appeared as if there are two components between the
core and the actual first level controller.  Now the first level controllers in
slicc would inherit from this new FirstLevelController class and we would
directly connect the controller to the core, instead of going through the
sequencer.

* The combined entity would allow us to make some changes that would ultimately
improve ruby's performance significantly.


Now some thoughts on what lies ahead. After this patch, we would create two
separate paths for processing of packets in the ruby memory system.  One is
similar to the current path:  the packets would be received by the
FirstLevelController, which would carry out the same functionality that
RubyPort and Sequencer used to carry out earlier.  We would convert packet to
RubyRequest and store the packet in the FirstLevelController, encapsulated in a
SequencerRequest which is kept in a hash map.  When the request gets
fullfilled, the reply would be processed as before.

The second path would process the packet as the erstwhile RubyPort used to do
and hand it to the controller defined in SLICC.  The controller would directly
work with the packet, so no RubyRequest or SequencerRequest would be created
and no hash map insertion/lookups/deletions would happen.  In the common case
of hits, the packet would be returned immediately.  On a miss the TBE would
hold the packet till the request gets fullfilled.  Actually, the TBEs would now
have a vector<Packet *> so that they can coalesce multiple requests for the
same block.

I would make the protocol changes only to MESI Two Level and Three Level
protocols.  For the rest we would continue using the original path.  The
changes to protocols using the original path would kept as low as possible,
with the intention being absolutely no changes.  It is expected that we
would see considerable performance improvement for protocols using the
new path.  It is already known that we would see about 6% performance
improvement by dropping RubyRequest and SequencerRequest.  Avoiding hashmap
would provide us further improvements.

While I have not given this much thought, but we might ultimately be able to
work with ports in controllers written in SLICC.  Doing so would avoid the
extra queueing cost that we currently pay when we pick packets from ports and
queue them in the first level controller's mandatory queue.


Diffs
-----

  configs/example/fs.py 110cce93d398 
  configs/ruby/MESI_Two_Level.py 110cce93d398 
  src/mem/ruby/system/System.cc 110cce93d398 
  src/mem/slicc/symbols/StateMachine.py 110cce93d398 
  tests/configs/pc-simple-timing-ruby.py 110cce93d398 
  src/mem/ruby/profiler/Profiler.cc 110cce93d398 
  src/mem/ruby/slicc_interface/AbstractController.hh 110cce93d398 
  src/mem/ruby/slicc_interface/AbstractController.cc 110cce93d398 
  src/mem/ruby/slicc_interface/AbstractDMAController.hh PRE-CREATION 
  src/mem/ruby/slicc_interface/AbstractDMAController.cc PRE-CREATION 
  src/mem/ruby/slicc_interface/Controller.py 110cce93d398 
  src/mem/ruby/slicc_interface/FirstLevelController.hh PRE-CREATION 
  src/mem/ruby/slicc_interface/FirstLevelController.cc PRE-CREATION 
  src/mem/ruby/slicc_interface/SConscript 110cce93d398 
  src/mem/ruby/system/CacheRecorder.hh 110cce93d398 
  src/mem/ruby/system/CacheRecorder.cc 110cce93d398 
  src/mem/ruby/system/DMASequencer.hh 110cce93d398 
  src/mem/ruby/system/DMASequencer.cc 110cce93d398 
  src/mem/ruby/system/RubyPort.hh 110cce93d398 
  src/mem/ruby/system/RubyPort.cc 110cce93d398 
  src/mem/ruby/system/RubyPortProxy.hh 110cce93d398 
  src/mem/ruby/system/RubySystem.py 110cce93d398 
  src/mem/ruby/system/SConscript 110cce93d398 
  src/mem/ruby/system/Sequencer.hh 110cce93d398 
  src/mem/ruby/system/Sequencer.cc 110cce93d398 
  src/mem/ruby/system/Sequencer.py 110cce93d398 
  configs/ruby/Ruby.py 110cce93d398 
  src/mem/protocol/MESI_Two_Level-L1cache.sm 110cce93d398 
  src/mem/protocol/MESI_Two_Level-dma.sm 110cce93d398 
  src/mem/protocol/RubySlicc_Exports.sm 110cce93d398 
  src/mem/protocol/RubySlicc_Types.sm 110cce93d398 
  src/mem/ruby/SConscript 110cce93d398 
  src/mem/ruby/network/BasicLink.py 110cce93d398 

Diff: http://reviews.gem5.org/r/3043/diff/


Testing
-------


Thanks,

Nilay Vaish

_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to