ruby: Fix garnet's round robin arbitration for vc selection
authorSrikant Bharadwaj <srikant.bharadwaj@amd.com>
Fri, 22 Feb 2019 22:43:33 +0000 (17:43 -0500)
committerSrikant Bharadwaj <srikant.bharadwaj@amd.com>
Thu, 28 Feb 2019 19:46:58 +0000 (19:46 +0000)
commit21a4cc9692e30390547bf99887840ee32a75233b
tree92881278a2d8e1240106e94718997a04c9b68fe1
parent365ed5b9160486c20db192c3df4f025523100d74
ruby: Fix garnet's round robin arbitration for vc selection

Garnet utilizes round robin policy to select a VC for
transmission ar Network Interface and Routers. The current logic
for round robin is only fair if all the virtual networks are active
at a given router. If the router or network interface is not
receiving traffic in from any vnet then the priority is always taken
up by the next vnet in numerically (or loops back to 0).

This fix changes the way we perform round robin arbitration. When
a VC is selected in a cycle, the round robin pointer is set to the VC
next to it and is iterated from there on. If any VC does not have a
flit in a given cycle, it will lose its turn until the next round.
At maximum traffic this will model round robin correctly even if
a certain VNET is not active at that unit.

Change-Id: I9bf805221054f9f25bee14b57ff521f4ce4ca980
Reviewed-on: https://gem5-review.googlesource.com/c/16688
Reviewed-by: Jieming Yin <Jieming.Yin@amd.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
src/mem/ruby/network/garnet2.0/NetworkInterface.cc
src/mem/ruby/network/garnet2.0/SwitchAllocator.cc