changeset 9483739f83ee in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=9483739f83ee
description:
ruby: network: convert to gem5 style stats
diffstat:
src/base/statistics.hh | 6 +
src/mem/ruby/network/Network.cc | 3 +
src/mem/ruby/network/Network.hh | 26 +-
src/mem/ruby/network/garnet/BaseGarnetNetwork.cc | 101 +++----
src/mem/ruby/network/garnet/BaseGarnetNetwork.hh | 24 +-
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc | 103 ++++----
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.hh | 23 +-
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.hh | 21 +-
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc | 12 -
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh | 19 +-
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.cc | 4 +-
src/mem/ruby/network/garnet/fixed-pipeline/Router_d.hh | 20 +-
src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.hh | 21 +-
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc | 58 +---
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.hh | 9 +-
src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc | 19 +-
src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh | 19 +-
src/mem/ruby/network/orion/NetworkPower.cc | 46 +--
src/mem/ruby/network/simple/PerfectSwitch.cc | 39 +--
src/mem/ruby/network/simple/PerfectSwitch.hh | 7 +-
src/mem/ruby/network/simple/SimpleNetwork.cc | 83 +----
src/mem/ruby/network/simple/SimpleNetwork.hh | 10 +-
src/mem/ruby/network/simple/Switch.cc | 122 +++------
src/mem/ruby/network/simple/Switch.hh | 16 +-
src/mem/ruby/network/simple/Throttle.cc | 65 ++--
src/mem/ruby/network/simple/Throttle.hh | 35 +-
src/mem/ruby/system/System.cc | 3 -
src/mem/ruby/system/System.hh | 3 -
28 files changed, 388 insertions(+), 529 deletions(-)
diffs (truncated from 1597 to 300 lines):
diff -r 54d6728d99cf -r 9483739f83ee src/base/statistics.hh
--- a/src/base/statistics.hh Fri Sep 06 16:21:33 2013 -0500
+++ b/src/base/statistics.hh Fri Sep 06 16:21:35 2013 -0500
@@ -331,6 +331,12 @@
public:
typedef InfoProxyType<Derived> Info;
+ DataWrapVec()
+ {}
+
+ DataWrapVec(const DataWrapVec &ref)
+ {}
+
// The following functions are specific to vectors. If you use them
// in a non vector context, you will get a nice compiler error!
diff -r 54d6728d99cf -r 9483739f83ee src/mem/ruby/network/Network.cc
--- a/src/mem/ruby/network/Network.cc Fri Sep 06 16:21:33 2013 -0500
+++ b/src/mem/ruby/network/Network.cc Fri Sep 06 16:21:35 2013 -0500
@@ -59,6 +59,9 @@
AbstractController *abs_cntrl = ext_link->params()->ext_node;
abs_cntrl->initNetworkPtr(this);
}
+
+ // Register a callback function for combining the statistics
+ Stats::registerDumpCallback(new StatsCallback(this));
}
void
diff -r 54d6728d99cf -r 9483739f83ee src/mem/ruby/network/Network.hh
--- a/src/mem/ruby/network/Network.hh Fri Sep 06 16:21:33 2013 -0500
+++ b/src/mem/ruby/network/Network.hh Fri Sep 06 16:21:35 2013 -0500
@@ -88,8 +88,7 @@
LinkDirection direction,
const NetDest& routing_table_entry) = 0;
- virtual void printStats(std::ostream& out) const = 0;
- virtual void clearStats() = 0;
+ virtual void collateStats() = 0;
virtual void print(std::ostream& out) const = 0;
/*
@@ -107,13 +106,30 @@
Network(const Network& obj);
Network& operator=(const Network& obj);
- protected:
- const std::string m_name;
- int m_nodes;
+ uint32_t m_nodes;
static uint32_t m_virtual_networks;
Topology* m_topology_ptr;
static uint32_t m_control_msg_size;
static uint32_t m_data_msg_size;
+
+ private:
+ //! Callback class used for collating statistics from all the
+ //! controller of this type.
+ class StatsCallback : public Callback
+ {
+ private:
+ Network *ctr;
+
+ public:
+ virtual ~StatsCallback() {}
+
+ StatsCallback(Network *_ctr)
+ : ctr(_ctr)
+ {
+ }
+
+ void process() {ctr->collateStats();}
+ };
};
inline std::ostream&
diff -r 54d6728d99cf -r 9483739f83ee
src/mem/ruby/network/garnet/BaseGarnetNetwork.cc
--- a/src/mem/ruby/network/garnet/BaseGarnetNetwork.cc Fri Sep 06 16:21:33
2013 -0500
+++ b/src/mem/ruby/network/garnet/BaseGarnetNetwork.cc Fri Sep 06 16:21:35
2013 -0500
@@ -71,17 +71,9 @@
m_in_use.resize(m_virtual_networks);
m_ordered.resize(m_virtual_networks);
- m_flits_received.resize(m_virtual_networks);
- m_flits_injected.resize(m_virtual_networks);
- m_network_latency.resize(m_virtual_networks);
- m_queueing_latency.resize(m_virtual_networks);
for (int i = 0; i < m_virtual_networks; i++) {
m_in_use[i] = false;
m_ordered[i] = false;
- m_flits_received[i] = 0;
- m_flits_injected[i] = 0;
- m_network_latency[i] = 0.0;
- m_queueing_latency[i] = 0.0;
}
for (int node = 0; node < m_nodes; node++) {
@@ -121,60 +113,55 @@
}
void
-BaseGarnetNetwork::clearStats()
+BaseGarnetNetwork::regStats()
{
-}
+ m_flits_received
+ .init(m_virtual_networks)
+ .name(name() + ".flits_received")
+ .flags(Stats::pdf | Stats::total | Stats::nozero | Stats::oneline)
+ ;
-void
-BaseGarnetNetwork::printStats(ostream& out) const
-{
- out << endl;
- out << "Network Stats" << endl;
- out << "-------------" << endl;
- out << endl;
- printPerformanceStats(out);
- printLinkStats(out);
- printPowerStats(out);
-}
+ m_flits_injected
+ .init(m_virtual_networks)
+ .name(name() + ".flits_injected")
+ .flags(Stats::pdf | Stats::total | Stats::nozero | Stats::oneline)
+ ;
-void
-BaseGarnetNetwork::printPerformanceStats(ostream& out) const
-{
- int total_flits_injected = 0;
- int total_flits_received = 0;
- int total_network_latency = 0.0;
- int total_queueing_latency = 0.0;
+ m_network_latency
+ .init(m_virtual_networks)
+ .name(name() + ".network_latency")
+ .flags(Stats::oneline)
+ ;
+
+ m_queueing_latency
+ .init(m_virtual_networks)
+ .name(name() + ".queueing_latency")
+ .flags(Stats::oneline)
+ ;
for (int i = 0; i < m_virtual_networks; i++) {
- if (!m_in_use[i])
- continue;
+ m_flits_received.subname(i, csprintf("vnet-%i", i));
+ m_flits_injected.subname(i, csprintf("vnet-%i", i));
+ m_network_latency.subname(i, csprintf("vnet-%i", i));
+ m_queueing_latency.subname(i, csprintf("vnet-%i", i));
+ }
- out << "[Vnet " << i << "]: flits injected = "
- << m_flits_injected[i] << endl;
- out << "[Vnet " << i << "]: flits received = "
- << m_flits_received[i] << endl;
- out << "[Vnet " << i << "]: average network latency = "
- << ((double) m_network_latency[i] / (double) m_flits_received[i])
- << endl;
- out << "[Vnet " << i << "]: average queueing (at source NI) latency = "
- << ((double) m_queueing_latency[i] / (double) m_flits_received[i])
- << endl;
+ m_avg_vnet_latency
+ .name(name() + ".average_vnet_latency")
+ .flags(Stats::oneline);
+ m_avg_vnet_latency = m_network_latency / m_flits_received;
- out << endl;
- total_flits_injected += m_flits_injected[i];
- total_flits_received += m_flits_received[i];
- total_network_latency += m_network_latency[i];
- total_queueing_latency += m_queueing_latency[i];
- }
- out << "Total flits injected = " << total_flits_injected << endl;
- out << "Total flits received = " << total_flits_received << endl;
- out << "Average network latency = "
- << ((double) total_network_latency/ (double) total_flits_received) <<
endl;
- out << "Average queueing (at source NI) latency = "
- << ((double) total_queueing_latency/ (double) total_flits_received) <<
endl;
- out << "Average latency = "
- << ((double) (total_queueing_latency + total_network_latency) /
- (double) total_flits_received)<< endl;
- out << "-------------" << endl;
- out << endl;
+ m_avg_vqueue_latency
+ .name(name() + ".average_vqueue_latency")
+ .flags(Stats::oneline);
+ m_avg_vqueue_latency = m_queueing_latency / m_flits_received;
+
+ m_avg_network_latency.name(name() + ".average_network_latency");
+ m_avg_network_latency = sum(m_network_latency) / sum(m_flits_received);
+
+ m_avg_queueing_latency.name(name() + ".average_queueing_latency");
+ m_avg_queueing_latency = sum(m_queueing_latency) / sum(m_flits_received);
+
+ m_avg_latency.name(name() + ".average_latency");
+ m_avg_latency = m_avg_network_latency + m_avg_queueing_latency;
}
diff -r 54d6728d99cf -r 9483739f83ee
src/mem/ruby/network/garnet/BaseGarnetNetwork.hh
--- a/src/mem/ruby/network/garnet/BaseGarnetNetwork.hh Fri Sep 06 16:21:33
2013 -0500
+++ b/src/mem/ruby/network/garnet/BaseGarnetNetwork.hh Fri Sep 06 16:21:35
2013 -0500
@@ -80,27 +80,31 @@
virtual void checkNetworkAllocation(NodeID id, bool ordered,
int network_num, std::string vnet_type) = 0;
- void clearStats();
- void printStats(std::ostream& out) const;
- void printPerformanceStats(std::ostream& out) const;
- virtual void printLinkStats(std::ostream& out) const = 0;
- virtual void printPowerStats(std::ostream& out) const = 0;
+ virtual void regStats();
+ virtual void collateStats() {}
protected:
int m_ni_flit_size;
int m_vcs_per_vnet;
bool m_enable_fault_model;
- std::vector<int> m_flits_received;
- std::vector<int> m_flits_injected;
- std::vector<double> m_network_latency;
- std::vector<double> m_queueing_latency;
-
std::vector<bool> m_in_use;
std::vector<bool> m_ordered;
std::vector<std::vector<MessageBuffer*> > m_toNetQueues;
std::vector<std::vector<MessageBuffer*> > m_fromNetQueues;
+
+ // Statistical variables
+ Stats::Vector m_flits_received;
+ Stats::Vector m_flits_injected;
+ Stats::Vector m_network_latency;
+ Stats::Vector m_queueing_latency;
+
+ Stats::Formula m_avg_vnet_latency;
+ Stats::Formula m_avg_vqueue_latency;
+ Stats::Formula m_avg_network_latency;
+ Stats::Formula m_avg_queueing_latency;
+ Stats::Formula m_avg_latency;
};
#endif // __MEM_RUBY_NETWORK_GARNET_BASEGARNETNETWORK_HH__
diff -r 54d6728d99cf -r 9483739f83ee
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc Fri Sep
06 16:21:33 2013 -0500
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc Fri Sep
06 16:21:35 2013 -0500
@@ -221,81 +221,82 @@
}
void
-GarnetNetwork_d::printLinkStats(ostream& out) const
+GarnetNetwork_d::regStats()
{
- double average_link_utilization = 0;
- vector<double> average_vc_load;
- average_vc_load.resize(m_virtual_networks*m_vcs_per_vnet);
+ BaseGarnetNetwork::regStats();
+ regLinkStats();
+ regPowerStats();
+}
- for (int i = 0; i < m_virtual_networks*m_vcs_per_vnet; i++) {
- average_vc_load[i] = 0;
- }
+void
+GarnetNetwork_d::regLinkStats()
+{
+ m_average_link_utilization.name(name() + ".avg_link_utilization");
- out << endl;
+ m_average_vc_load
+ .init(m_virtual_networks * m_vcs_per_vnet)
+ .name(name() + ".avg_vc_load")
+ .flags(Stats::pdf | Stats::total | Stats::nozero | Stats::oneline)
+ ;
+}
+
+void
+GarnetNetwork_d::regPowerStats()
+{
+ m_dynamic_link_power.name(name() + ".link_dynamic_power");
+ m_static_link_power.name(name() + ".link_static_power");
+
+ m_total_link_power.name(name() + ".link_total_power");
+ m_total_link_power = m_dynamic_link_power + m_static_link_power;
+
+ m_dynamic_router_power.name(name() + ".router_dynamic_power");
+ m_static_router_power.name(name() + ".router_static_power");
+ m_clk_power.name(name() + ".clk_power");
+
+ m_total_router_power.name(name() + ".router_total_power");
+ m_total_router_power = m_dynamic_router_power +
+ m_static_router_power +
+ m_clk_power;
+}
+
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev