ruby: Check MessageBuffer space in garnet NetworkInterface
authorMatthew Poremba <matthew.poremba@amd.com>
Thu, 19 Jan 2017 16:59:10 +0000 (11:59 -0500)
committerMatthew Poremba <matthew.poremba@amd.com>
Thu, 19 Jan 2017 16:59:10 +0000 (11:59 -0500)
commit42044645b9e3a60bd77a84de6c356033d6133004
tree0afd45ce0d71b4dc8cefe21f3ec188cb21a9774e
parenta4b546c3a139aeb33f087422637ac06fc4477d11
ruby: Check MessageBuffer space in garnet NetworkInterface

Garnet's NetworkInterface does not consider the size of MessageBuffers when
ejecting a Message from the network. Add a size check for the MessageBuffer
and only enqueue if space is available. If space is not available, the
message if placed in a queue and the credit is held. A callback from the
MessageBuffer is implemented to wake the NetworkInterface. If there are
messages in the stalled queue, they are processed first, in a FIFO manner
and if succesfully ejected, the credit is finally sent back upstream. The
maximum size of the stall queue is equal to the number of valid VNETs
with MessageBuffers attached.
src/mem/ruby/network/MessageBuffer.cc
src/mem/ruby/network/MessageBuffer.hh
src/mem/ruby/network/garnet2.0/NetworkInterface.cc
src/mem/ruby/network/garnet2.0/NetworkInterface.hh
src/mem/ruby/network/garnet2.0/flit.cc
src/mem/ruby/network/garnet2.0/flit.hh
src/mem/ruby/network/garnet2.0/flitBuffer.hh