GreenCloud Simulator
cpu.cc
Go to the documentation of this file.
1 /*
2  * cpu.cc
3  *
4  * @date Sep 3, 2013
5  * @author Guzek:Mateusz
6  */
7 
8 #include "cpu.h"
9 
10 static class CpuClass : public TclClass {
11 public:
12  CpuClass() : TclClass("CPU") {}
13  TclObject* create(int argc, const char*const*argv) {
14  return (new CPU());
15  }
16 } class_cpu;
17 
19 
20 }
21 
23 
24 }
25 
26 void CPU::print(){
27  std::cerr << "CPU: ";
29 }
30 
31 void CPU::getMIPS(){
32  double result = 0;
33  std::vector <Capacity>::iterator iter;
34  for (iter = this->specification->capacity.begin(); iter!=this->specification->capacity.end(); iter++)
35  {
36  result += (*iter);
37  }
38  char out[100];
39  sprintf(out,"set tmp_cpu_mips %.0f",result);
40  Tcl& tcl = Tcl::instance();
41  tcl.eval(out);
42 
43 }
44 
45 int CPU::command(int argc, const char*const* argv){
46 
47  if (argc == 2) {
48  if (strcmp(argv[1], "print") == 0) {
49  this->print();
50  return (TCL_OK);
51  } else if (strcmp(argv[1], "getMIPS") == 0) {
52  this->getMIPS();
53  return (TCL_OK);
54  }
55  }
56  return (CPU::command(argc, argv));
57 }
58 
59 /*Set specification, initialize usage as vector of 0.*/
60 
62  if(resspec==NULL){
63  std::cerr << "ERROR: Null pointer passed as ResourceSpec.";
64  return 1;
65  }
66  this->DcResource::setSpecification(resspec);
67  std::vector<Capacity>::iterator iter_nominal;
68  std::vector<Capacity>::iterator iter_reserved;
69  for(iter_nominal= resspec->capacity.begin(),iter_reserved=this->capacity.begin();
70  iter_nominal != resspec->capacity.end();
71  iter_nominal++,iter_reserved++){
72  cores_schedulers_.push_back(new CoreScheduler(&(*iter_nominal),&(*iter_reserved)));
73  }
74  std::vector<CoreScheduler*>::iterator iter;
75  nominal_mips_ = 0;
76  for(iter= cores_schedulers_.begin();
77  iter != cores_schedulers_.end();
78  iter++){
79  nominal_mips_ += (*iter)->getNominalMIPS();
80  }
81 
82  return 0;
83 }
84 
86  if(cores_schedulers_.empty()){
87  std::cerr << "No core schedulers!\n";
88  }
89  std::vector<CoreScheduler*>::iterator iter;
90  for(iter= cores_schedulers_.begin();
91  iter != cores_schedulers_.end();
92  iter++){
93  (*iter)->setProvider(provider);
94  }
95 
96 }
97 
98 void CPU::setDVFS(int eDVFS_enabled_){
99  if(cores_schedulers_.empty()){
100  std::cerr << "No core schedulers!\n";
101  }
102  std::vector<CoreScheduler*>::iterator iter;
103  for(iter= cores_schedulers_.begin();
104  iter != cores_schedulers_.end();
105  iter++){
106  (*iter)->setDVFS(eDVFS_enabled_);
107  }
108 }
109 
111  std::vector<CoreScheduler*>::iterator iter;
112  double result = 0;
113  for(iter= cores_schedulers_.begin();
114  iter != cores_schedulers_.end();
115  iter++){
116 
117  result += (*iter)->getCurrentMIPSRecursive();
118  }
119  return result;
120 }
122  return nominal_mips_;
123 }
124 
126  return getCurrentMIPS()/getNominalMIPS();
127 }
CpuClass class_cpu
virtual ~CPU()
Definition: cpu.cc:22
std::vector< Capacity > capacity
Definition: resource.h:87
void setDVFS(int eDVFS_enabled_)
Definition: cpu.cc:98
Definition: cpu.cc:10
void getMIPS()
Definition: cpu.cc:31
CpuClass()
Definition: cpu.cc:12
virtual int setSpecification(ResourceSpec *resspec)
Definition: cpu.cc:61
TclObject * create(int argc, const char *const *argv)
Definition: cpu.cc:13
virtual void print()
Definition: dcresource.cc:81
virtual void print()
Definition: cpu.cc:26
double getNominalMIPS()
Definition: cpu.cc:121
void setProvider(ResourceProvider *provider)
Definition: cpu.cc:85
CPU()
Definition: cpu.cc:18
virtual int command(int argc, const char *const *argv)
Definition: cpu.cc:45
double getCurrentMIPS()
Definition: cpu.cc:110
virtual double getUtilization()
Definition: cpu.cc:125
Definition: cpu.h:18
virtual int setSpecification(ResourceSpec *resspec)
Definition: dcresource.cc:28