Daecheol You has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/40275 )

Change subject: mem-garnet: Added packet distribution stats
......................................................................

mem-garnet: Added packet distribution stats

Trace data and control traffic between all source-destination pairs.
This is for making realistic synthetic traffic based on the real
application execution.

Change-Id: Iffc9c16fd1e02ab8f7c5382cec822bf57a43a057
JIRA: https://gem5.atlassian.net/browse/GEM5-861
---
M src/mem/ruby/network/garnet/GarnetNetwork.cc
M src/mem/ruby/network/garnet/GarnetNetwork.hh
M src/mem/ruby/network/garnet/NetworkInterface.cc
3 files changed, 60 insertions(+), 0 deletions(-)



diff --git a/src/mem/ruby/network/garnet/GarnetNetwork.cc b/src/mem/ruby/network/garnet/GarnetNetwork.cc
index 91015ff..9d4d0f0 100644
--- a/src/mem/ruby/network/garnet/GarnetNetwork.cc
+++ b/src/mem/ruby/network/garnet/GarnetNetwork.cc
@@ -500,6 +500,25 @@
         .name(name() + ".avg_vc_load")
         .flags(Stats::pdf | Stats::total | Stats::nozero | Stats::oneline)
         ;
+
+    // Traffic distribution
+    for (int source = 0; source < m_routers.size(); ++source) {
+ m_data_traffic_distribution.push_back(std::vector<Stats::Scalar *>()); + m_ctrl_traffic_distribution.push_back(std::vector<Stats::Scalar *>());
+
+        for (int dest = 0; dest < m_routers.size(); ++dest) {
+            Stats::Scalar *data_packets = new Stats::Scalar();
+            Stats::Scalar *ctrl_packets = new Stats::Scalar();
+
+ data_packets->name(name() + ".data_traffic_distribution." + "n" + + std::to_string(source) + "." + "n" + std::to_string(dest));
+            m_data_traffic_distribution[source].push_back(data_packets);
+
+ ctrl_packets->name(name() + ".ctrl_traffic_distribution." + "n" + + std::to_string(source) + "." + "n" + std::to_string(dest));
+            m_ctrl_traffic_distribution[source].push_back(ctrl_packets);
+        }
+    }
 }

 void
@@ -554,6 +573,39 @@
     out << "[GarnetNetwork]";
 }

+void
+GarnetNetwork::update_traffic_distribution(RouteInfo route,
+                                           MessageSizeType type)
+{
+    int src_node = route.src_router;
+    int dest_node = route.dest_router;
+    std::vector<NodeID> dest = route.net_dest.getAllDest();
+
+    /*
+     * All multicast messages were converted into unicast messages
+     * at flitisizeMessage()
+     */
+    assert(dest.size() == 1);
+
+    bool is_data_msg = false;
+    switch(type) {
+    case MessageSizeType_Data:
+    case MessageSizeType_Response_Data:
+    case MessageSizeType_ResponseLocal_Data:
+    case MessageSizeType_ResponseL2hit_Data:
+    case MessageSizeType_Writeback_Data:
+        is_data_msg = true;
+        break;
+    default:
+        break;
+    }
+
+    if (is_data_msg)
+        (*m_data_traffic_distribution[src_node][dest_node])++;
+    else
+        (*m_ctrl_traffic_distribution[src_node][dest_node])++;
+}
+
 uint32_t
 GarnetNetwork::functionalWrite(Packet *pkt)
 {
diff --git a/src/mem/ruby/network/garnet/GarnetNetwork.hh b/src/mem/ruby/network/garnet/GarnetNetwork.hh
index 63c1a2c..7f39f80 100644
--- a/src/mem/ruby/network/garnet/GarnetNetwork.hh
+++ b/src/mem/ruby/network/garnet/GarnetNetwork.hh
@@ -142,6 +142,9 @@
         m_total_hops += hops;
     }

+        void update_traffic_distribution(RouteInfo route,
+                                     MessageSizeType type);
+
   protected:
     // Configuration
     int m_num_rows;
@@ -185,6 +188,9 @@
     Stats::Scalar  m_total_hops;
     Stats::Formula m_avg_hops;

+    std::vector<std::vector<Stats::Scalar *>> m_data_traffic_distribution;
+    std::vector<std::vector<Stats::Scalar *>> m_ctrl_traffic_distribution;
+
   private:
     GarnetNetwork(const GarnetNetwork& obj);
     GarnetNetwork& operator=(const GarnetNetwork& obj);
diff --git a/src/mem/ruby/network/garnet/NetworkInterface.cc b/src/mem/ruby/network/garnet/NetworkInterface.cc
index dc37159..d69bdc9 100644
--- a/src/mem/ruby/network/garnet/NetworkInterface.cc
+++ b/src/mem/ruby/network/garnet/NetworkInterface.cc
@@ -426,6 +426,8 @@
         route.hops_traversed = -1;

         m_net_ptr->increment_injected_packets(vnet);
+        m_net_ptr->update_traffic_distribution(route,
+                new_net_msg_ptr->getMessageSize());
         for (int i = 0; i < num_flits; i++) {
             m_net_ptr->increment_injected_flits(vnet);
             flit *fl = new flit(i, vc, vnet, route, num_flits, new_msg_ptr,

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/40275
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Iffc9c16fd1e02ab8f7c5382cec822bf57a43a057
Gerrit-Change-Number: 40275
Gerrit-PatchSet: 1
Gerrit-Owner: Daecheol You <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to