gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Throttle.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 /*
30  * The class to implement bandwidth and latency throttle. An instance
31  * of consumer class that can be woke up. It is only used to control
32  * bandwidth at output port of a switch. And the throttle is added
33  * *after* the output port, means the message is put in the output
34  * port of the PerfectSwitch (a intermediateBuffers) first, then go
35  * through the Throttle.
36  */
37 
38 #ifndef __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
39 #define __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
40 
41 #include <iostream>
42 #include <string>
43 #include <vector>
44 
48 
49 class MessageBuffer;
50 class Switch;
51 
52 class Throttle : public Consumer
53 {
54  public:
55  Throttle(int sID, RubySystem *rs, NodeID node, Cycles link_latency,
56  int link_bandwidth_multiplier, int endpoint_bandwidth,
57  Switch *em);
58  ~Throttle() {}
59 
60  std::string name()
61  { return csprintf("Throttle-%i", m_switch_id); }
62 
63  void addLinks(const std::vector<MessageBuffer*>& in_vec,
64  const std::vector<MessageBuffer*>& out_vec);
65  void wakeup();
66 
67  // The average utilization (a fraction) since last clearStats()
68  const Stats::Scalar & getUtilization() const
69  { return m_link_utilization; }
70  const Stats::Vector & getMsgCount(unsigned int type) const
71  { return m_msg_counts[type]; }
72 
73  int getLinkBandwidth() const
75 
76  Cycles getLatency() const { return m_link_latency; }
77 
78  void clearStats();
79  void collateStats();
80  void regStats(std::string name);
81  void print(std::ostream& out) const;
82 
83  private:
84  void init(NodeID node, Cycles link_latency, int link_bandwidth_multiplier,
85  int endpoint_bandwidth);
86  void operateVnet(int vnet, int &bw_remainin, bool &schedule_wakeup,
87  MessageBuffer *in, MessageBuffer *out);
88 
89  // Private copy constructor and assignment operator
90  Throttle(const Throttle& obj);
91  Throttle& operator=(const Throttle& obj);
92 
95  unsigned int m_vnets;
97 
98  const int m_switch_id;
101 
107 
108  // Statistical variables
110  Stats::Vector m_msg_counts[MessageSizeType_NUM];
111  Stats::Formula m_msg_bytes[MessageSizeType_NUM];
112 
114 };
115 
116 inline std::ostream&
117 operator<<(std::ostream& out, const Throttle& obj)
118 {
119  obj.print(out);
120  out << std::flush;
121  return out;
122 }
123 
124 #endif // __MEM_RUBY_NETWORK_SIMPLE_THROTTLE_HH__
Cycles getLatency() const
Definition: Throttle.hh:76
std::vector< MessageBuffer * > m_out
Definition: Throttle.hh:94
NodeID m_node
Definition: Throttle.hh:100
Cycles is a wrapper class for representing cycle counts, i.e.
Definition: types.hh:83
void addLinks(const std::vector< MessageBuffer * > &in_vec, const std::vector< MessageBuffer * > &out_vec)
Definition: Throttle.cc:70
std::vector< MessageBuffer * > m_in
Definition: Throttle.hh:93
Stats::Formula m_msg_bytes[MessageSizeType_NUM]
Definition: Throttle.hh:111
void init(NodeID node, Cycles link_latency, int link_bandwidth_multiplier, int endpoint_bandwidth)
std::string name()
Definition: Throttle.hh:60
const Stats::Vector & getMsgCount(unsigned int type) const
Definition: Throttle.hh:70
std::vector< int > m_units_remaining
Definition: Throttle.hh:96
int m_endpoint_bandwidth
Definition: Throttle.hh:105
A vector of scalar stats.
Definition: statistics.hh:2499
int getLinkBandwidth() const
Definition: Throttle.hh:73
RubySystem * m_ruby_system
Definition: Throttle.hh:106
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:2475
const int m_switch_id
Definition: Throttle.hh:98
void print(std::ostream &out) const
Definition: Throttle.cc:243
Cycles m_link_latency
Definition: Throttle.hh:103
Stats::Scalar m_link_utilization
Definition: Throttle.hh:109
const Stats::Scalar & getUtilization() const
Definition: Throttle.hh:68
Definition: Switch.hh:57
unsigned int NodeID
Definition: TypeDefines.hh:34
Throttle(int sID, RubySystem *rs, NodeID node, Cycles link_latency, int link_bandwidth_multiplier, int endpoint_bandwidth, Switch *em)
Definition: Throttle.cc:51
double m_link_utilization_proxy
Definition: Throttle.hh:113
int m_link_bandwidth_multiplier
Definition: Throttle.hh:102
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:161
Throttle & operator=(const Throttle &obj)
unsigned int m_vnets
Definition: Throttle.hh:95
Stats::Vector m_msg_counts[MessageSizeType_NUM]
Definition: Throttle.hh:110
Switch * m_switch
Definition: Throttle.hh:99
A formula for statistics that is calculated when printed.
Definition: statistics.hh:2895
type
Definition: misc.hh:728
void wakeup()
Definition: Throttle.cc:147
ClockedObject * em
Definition: Consumer.hh:78
~Throttle()
Definition: Throttle.hh:58
Bitfield< 9, 8 > rs
Definition: miscregs.hh:1560
std::ostream & operator<<(std::ostream &out, const Throttle &obj)
Definition: Throttle.hh:117
void collateStats()
Definition: Throttle.cc:234
void regStats(std::string name)
Definition: Throttle.cc:203
int m_wakeups_wo_switch
Definition: Throttle.hh:104
void clearStats()
Definition: Throttle.cc:228
void operateVnet(int vnet, int &bw_remainin, bool &schedule_wakeup, MessageBuffer *in, MessageBuffer *out)
Definition: Throttle.cc:92

Generated on Fri Jun 9 2017 13:03:50 for gem5 by doxygen 1.8.6