GreenCloud Simulator
clouduser.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
2 /*
3  */
4 
5 #include "clouduser.h"
6 
7 
8 
9 CloudUser::CloudUser() : id_(0), tskmips_(0) , memory_(0.0), storage_(0.0), tsksize_(0), tskmaxduration_(0.0),
10 toutputsize_ (0), tintercom_(0),randomized_(0), mean_response_time_(-1), sd_response_time_(-1),
11 unfinished_tasks_(-1), dc_(NULL),taskcounter_(0), random_tskmips_(0.0)
12 {
13 }
14 
16 {
17 }
18 
20 {
21  std::vector<Resource*> task_demand;
22 
23  std::vector<Capacity> task_proc_cap;
24  double mips;
25  int processes_number = 1;
26  for(int i = 0 ; i < processes_number; i++){
27  if(!randomized_){
28  mips = tskmips_/processes_number;
29  } else {
30  do{
31  mips = random_tskmips_.value()/processes_number;
32  }while(mips > (tskmips_/processes_number)*tskmaxduration_*0.98);
33  }
34  task_proc_cap.push_back(mips);
35  }
36  task_demand.push_back(new Resource(Computing,1.0,task_proc_cap));
37 
38  if(memory_!=0){
39  std::vector<Capacity> task_memory_cap;
40  task_memory_cap.push_back(memory_);
41  task_demand.push_back(new Resource(Memory,1.0,task_memory_cap));
42  }
43 
44  if(storage_!=0){
45  std::vector<Capacity> task_storage_cap;
46  task_storage_cap.push_back(storage_);
47  task_demand.push_back(new Resource(Storage,1.0,task_storage_cap));
48  }
49 
50  // std::cerr << "MIPS:" << tskmips_ << "\tMEM:" << memory_<< "\tSTO:" <<storage_ << "\n";
51  // TODO: LEAK OCCURS: the created tasks are never released... However, they exist only until the end of a simulation.
52 
53  CloudTask *pTskObj = new CloudTask(tsksize_, tskmaxduration_,task_demand, this);
54  pTskObj->setID(taskcounter_);
55 // std::cout <<"Task generated, id: "<< pTskObj->id_ << "\n";
56  pTskObj->setOutput(toutputsize_);
57  pTskObj->setIntercom(tintercom_);
58  TaskInfo* tmp_info_ = new TaskInfo(pTskObj,Scheduler::instance().clock(),Scheduler::instance().clock() + tskmaxduration_);
59  tasks_info_.push_back(tmp_info_);
60  pTskObj->info_= tmp_info_;
61  taskcounter_++;
62 
63  return pTskObj;
64 }
65 
67  randomized_ =i;
68  if(i!=0){
69  random_tskmips_.setavg(tskmips_);
70  }
71 }
72 
73 int CloudUser::process_command(int argc, const char*const* argv){
74  if(argc==2){
75  if (strcmp(argv[1], "print-tasks-status") == 0) {
77  return (TCL_OK);
78  } else if(strcmp(argv[1], "post-simulation-test-tasks") == 0){
80  return (TCL_OK);
81  } else if(strcmp(argv[1], "calculate-statistics") == 0){
83  return (TCL_OK);
84  }
85 
86 
87  } else if(argc==3){
88  if (strcmp(argv[1], "join-datacenter") == 0) {
89  DataCenter *dc = dynamic_cast<DataCenter*> (TclObject::lookup(argv[2]));
90  if(dc){
91  dc_ = dc;
92  return (TCL_OK);
93  }
94  return (TCL_ERROR);
95  } else if (strcmp(argv[1], "set-randomized") == 0) {
96  setRandomized(atoi(argv[2]));
97  return (TCL_OK);
98  }
99  }
100  return -1;
101 }
102 
104  std::vector<TaskInfo*>::iterator i;
105  std::cout << "Cloud User:\t" << id_ << "\n";
106  for(i = tasks_info_.begin(); i < tasks_info_.end(); i++){
107  std::cout << fixed << setprecision(2) << "T: " << (*i)->getTaskId() <<
108  " Rel: "<< (*i)->getReleaseTime() <<
109  " Ser: "<< (*i)->getServerFinishTime() <<
110  " Ext: "<< (*i)->getDcExitTime() <<
111  " Due: " << (*i)->getDueTime() <<
112  "\n";
113  }
114 }
115 
117  bool ok = true;
118  std::vector<TaskInfo*>::iterator i;
119  unfinished_tasks_ = 0;
120  for(i = tasks_info_.begin(); i < tasks_info_.end(); i++){
121  if(false){
122 // if((*i)->getDcExitTime() == -1){
123  ok = false;
125  std::cout << "Cloud User:\t" << id_ << "\t";
126  std::cout << fixed << setprecision(2) << "Task unfinished, id: " << (*i)->getTaskId() <<
127  " Rel: "<< (*i)->getReleaseTime() <<
128  " Ser: "<< (*i)->getServerFinishTime() <<
129  " Ext: "<< (*i)->getDcExitTime() <<
130  " Due: " << (*i)->getDueTime() <<
131  "\n";
132  }
133  }
134  if(ok){
135  std::cout << "Cloud User:\t" << id_ << "\t: all tasks finished sucesfully.\n";
136  } else {
137  std::cout << "Cloud User:\t" << id_ << "\t:\t"<< unfinished_tasks_ << "\ttasks did NOT exit datacenter.\n";
138  }
139 }
140 
142  std::vector<TaskInfo*>::iterator i;
143  double sum = 0;
144  int counter = 0;
145  unfinished_tasks_ = 0;
146 
147  //mean calculation
148  if(!tasks_info_.empty()){
149  for(i = tasks_info_.begin(); i < tasks_info_.end(); i++){
150  if((*i)->getDcExitTime() != -1){
151  sum+= (*i)->getDcExitTime() - (*i)->getReleaseTime();
152  counter++;
153  } else {
155  }
156  }
157 
158  mean_response_time_ = sum / counter;
159 
160  // sd calculation
161  sum = 0;
162  double tmp;
163  for(i = tasks_info_.begin(); i < tasks_info_.end(); i++){
164  if((*i)->getDcExitTime() != -1){
165  tmp = pow( ((*i)->getDcExitTime() - (*i)->getReleaseTime() ) - mean_response_time_, 2.0f);
166 
167  sum += tmp;
168  }
169  }
170  sd_response_time_ = sqrt(sum/counter);
171  } else {
172  std::cerr << "WARNING: No tasks generated by the cloud user: " << id_ << " (normally it should not happen).\n";
173  }
174 }
std::vector< TaskInfo * > tasks_info_
Definition: clouduser.h:48
CloudTask * createTask()
Definition: clouduser.cc:19
int taskcounter_
Definition: clouduser.h:46
ExponentialRandomVariable random_tskmips_
Definition: clouduser.h:47
double sd_response_time_
Definition: clouduser.h:41
int tintercom_
Definition: clouduser.h:36
int id_
Definition: clouduser.h:26
TaskInfo * info_
Definition: cloudtask.h:61
int process_command(int argc, const char *const *argv)
Definition: clouduser.cc:73
double mean_response_time_
Definition: clouduser.h:40
void calculateStatistics()
Definition: clouduser.cc:141
int toutputsize_
Definition: clouduser.h:35
double tskmips_
Definition: clouduser.h:29
virtual ~CloudUser()
Definition: clouduser.cc:15
double tskmaxduration_
Definition: clouduser.h:33
void setRandomized(int i)
Definition: clouduser.cc:66
void setID(int id)
Definition: cloudtask.h:27
void postSimulationTestTasks()
Definition: clouduser.cc:116
double storage_
Definition: clouduser.h:31
int unfinished_tasks_
Definition: clouduser.h:42
void setOutput(int output)
Definition: cloudtask.h:29
void setIntercom(int intercom)
Definition: cloudtask.h:30
void printTasksStatus()
Definition: clouduser.cc:103
CloudUser()
Definition: clouduser.cc:9
int randomized_
Definition: clouduser.h:38
double memory_
Definition: clouduser.h:30
unsigned int tsksize_
Definition: clouduser.h:32
DataCenter * dc_
Definition: clouduser.h:45