summaryrefslogtreecommitdiff
path: root/src/mem/ruby/network/garnet2.0/NetworkInterface.hh
diff options
context:
space:
mode:
authorJieming Yin <jieming.yin@amd.com>2016-12-15 16:59:17 -0500
committerJieming Yin <jieming.yin@amd.com>2016-12-15 16:59:17 -0500
commitb9c7b8190c27ad161689934fa780859860cfd74f (patch)
treed619f13f20590cc41fbce7dd15e91758a4c0cf80 /src/mem/ruby/network/garnet2.0/NetworkInterface.hh
parentcc1f5a4d1607a02246244b7a805cdb3b24bb259a (diff)
downloadgem5-b9c7b8190c27ad161689934fa780859860cfd74f.tar.xz
ruby: Detect garnet network-level deadlock.
This patch detects garnet network deadlock by monitoring network interfaces. If a network interface continuously fails to allocate virtual channels for a message, a possible deadlock is detected.
Diffstat (limited to 'src/mem/ruby/network/garnet2.0/NetworkInterface.hh')
-rw-r--r--src/mem/ruby/network/garnet2.0/NetworkInterface.hh3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/mem/ruby/network/garnet2.0/NetworkInterface.hh b/src/mem/ruby/network/garnet2.0/NetworkInterface.hh
index 85e0145af..f1d1fd505 100644
--- a/src/mem/ruby/network/garnet2.0/NetworkInterface.hh
+++ b/src/mem/ruby/network/garnet2.0/NetworkInterface.hh
@@ -83,6 +83,7 @@ class NetworkInterface : public ClockedObject, public Consumer
int m_vc_round_robin; // For round robin scheduling
flitBuffer *outFlitQueue; // For modeling link contention
flitBuffer *outCreditQueue;
+ int m_deadlock_threshold;
NetworkLink *inNetLink;
NetworkLink *outNetLink;
@@ -98,6 +99,8 @@ class NetworkInterface : public ClockedObject, public Consumer
std::vector<MessageBuffer *> inNode_ptr;
// The Message buffers that provides messages to the protocol
std::vector<MessageBuffer *> outNode_ptr;
+ // When a vc stays busy for a long time, it indicates a deadlock
+ std::vector<int> vc_busy_counter;
bool flitisizeMessage(MsgPtr msg_ptr, int vnet);
int calculateVC(int vnet);