From b9c7b8190c27ad161689934fa780859860cfd74f Mon Sep 17 00:00:00 2001 From: Jieming Yin Date: Thu, 15 Dec 2016 16:59:17 -0500 Subject: 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. --- src/mem/ruby/network/garnet2.0/NetworkInterface.hh | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/mem/ruby/network/garnet2.0/NetworkInterface.hh') 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 inNode_ptr; // The Message buffers that provides messages to the protocol std::vector outNode_ptr; + // When a vc stays busy for a long time, it indicates a deadlock + std::vector vc_busy_counter; bool flitisizeMessage(MsgPtr msg_ptr, int vnet); int calculateVC(int vnet); -- cgit v1.2.3