GreenCloud Simulator
Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
HerosScheduler Class Reference

#include <herosscheduler.h>

Inheritance diagram for HerosScheduler:
Inheritance graph
[legend]
Collaboration diagram for HerosScheduler:
Collaboration graph
[legend]

Public Member Functions

 HerosScheduler ()
 
virtual ~HerosScheduler ()
 
virtual TskComAgentscheduleTask (CloudTask *task, std::vector< ResourceProvider * > providers)
 
- Public Member Functions inherited from BestScoreScheduler
 BestScoreScheduler ()
 
virtual ~BestScoreScheduler ()
 
- Public Member Functions inherited from ScoreScheduler
 ScoreScheduler ()
 
virtual ~ScoreScheduler ()
 
- Public Member Functions inherited from DcScheduler
 DcScheduler ()
 
virtual ~DcScheduler ()
 

Static Public Member Functions

static double performancePerWattMax (ResourceProvider *rp)
 

Private Member Functions

virtual double calculateScore (ResourceProvider *rp)
 

Static Private Member Functions

static double densLoadFactor (double load, double epsilon)
 
static double linkLoadFactor (double load)
 
static double performancePerWatt (ResourceProvider *rp)
 
static double herosTransformation (ResourceProvider *rp, double alpha, double beta, double gamma)
 

Private Attributes

double epsilon
 

Detailed Description

Definition at line 24 of file herosscheduler.h.

Constructor & Destructor Documentation

HerosScheduler::HerosScheduler ( )

Definition at line 11 of file herosscheduler.cc.

11  : epsilon(0.1){
12 
13 
14 }
HerosScheduler::~HerosScheduler ( )
virtual

Definition at line 16 of file herosscheduler.cc.

16  {
17 
18 }

Member Function Documentation

double HerosScheduler::calculateScore ( ResourceProvider rp)
privatevirtual

Implements BestScoreScheduler.

Definition at line 21 of file herosscheduler.cc.

21  {
22  double result = 0;
23 
24  result = herosTransformation(rp,110,0.90,1.2);
25 // std::cerr << "Heros transformation result" << result << "\n";
26  result *= pow(linkLoadFactor(rp->getRootHost()->rack_->link_load),2);
27 // std::cerr << "Final result" << result << "\n";
28  return result;
29 }
DcRack * rack_
Definition: dchost.h:33
static double herosTransformation(ResourceProvider *rp, double alpha, double beta, double gamma)
static double linkLoadFactor(double load)
double link_load
Definition: dcrack.h:17
double HerosScheduler::densLoadFactor ( double  load,
double  epsilon 
)
staticprivate

Definition at line 32 of file herosscheduler.cc.

32  {
33  return 1/(1+exp(-10*(load-0.5))) - 1/(1+exp((-10/epsilon)*(load-(1-(epsilon/2)))));
34 }
double HerosScheduler::herosTransformation ( ResourceProvider rp,
double  alpha,
double  beta,
double  gamma 
)
staticprivate

Definition at line 51 of file herosscheduler.cc.

51  {
52 
53  double maxl = rp->getTotalCap(Computing);
54  // std::cerr << "Ppw current: " <<performancePerWatt(rp) << "\n";
55  double result = performancePerWatt(rp);
56  if(rp->getResTypeUtil(Computing) > beta/2){
57  result -= gamma * performancePerWatt(rp) *
58  1/
59  (
60  1+exp
61  (
62  -(alpha/maxl)*(rp->getResTypeUtil(Computing)*maxl - (beta * maxl ) )
63  )
64  );
65  }
66 
67  return result;
68 }
double getResTypeUtil(res_type type)
double getTotalCap(res_type type)
static double performancePerWatt(ResourceProvider *rp)
double HerosScheduler::linkLoadFactor ( double  load)
staticprivate

Definition at line 70 of file herosscheduler.cc.

70  {
71  return exp(-(pow(2*load,2)));
72 }
double HerosScheduler::performancePerWatt ( ResourceProvider rp)
staticprivate

Definition at line 36 of file herosscheduler.cc.

36  {
37  if(rp->getRootHost()->eCurrentConsumption_==0)
38  {
39  return 0;
40  }
42 }
double getResTypeUtil(res_type type)
double getTotalCap(res_type type)
double eCurrentConsumption_
Definition: dchost.h:41
double HerosScheduler::performancePerWattMax ( ResourceProvider rp)
static

Definition at line 44 of file herosscheduler.cc.

44  {
45 
46  double result = rp->getTotalCap(Computing) / rp->getRootHost()->powerModel->getMaxPower();
47  // std::cerr << "Ppw max: " <<result << "\n";
48  return result;
49 }
double getTotalCap(res_type type)
virtual double getMaxPower()=0
PowerModel * powerModel
Definition: dchost.h:34
TskComAgent * HerosScheduler::scheduleTask ( CloudTask task,
std::vector< ResourceProvider * >  providers 
)
virtual

Reimplemented from BestScoreScheduler.

Definition at line 76 of file herosscheduler.cc.

76  {
77  // std::cerr<< "HEROS is making decision:\n";
78  vector<ProviderScore> scored_providers_;
79  vector <ResourceProvider*>::iterator iter;
80  for (iter = providers.begin(); iter!=providers.end(); iter++)
81  {
82  if ((*iter)->testSchedulingPossibility(task)){
83  scored_providers_.push_back(ProviderScore((*iter),calculateScore((*iter)),linkLoadFactor((*iter)->getRootHost()->rack_->link_load)));
84  }
85  }
86  if(scored_providers_.empty()){
87  return NULL;
88  } else {
89  vector <ProviderScore>::iterator sp;
90  sort(scored_providers_.begin(),scored_providers_.end(),herosComparator);
91  vector<ProviderScore>::reverse_iterator rsp = scored_providers_.rbegin();
92  ProviderScore best = *rsp;
93  int max_n = 0;
94  for (; rsp != scored_providers_.rend(); rsp++ ) {
95  if(!herosComparator((*rsp),best)){
96  ++max_n;
97  } else {
98  break;
99  }
100  }
101  if(max_n!=1){
102  int selected = (double)rand() / (double)RAND_MAX * max_n +1;
103  best = scored_providers_.at(scored_providers_.size()-selected);
104  }
105 
106  scored_providers_.clear();
107 // std::cerr<< "Selected prov: " << best.provider_->id_ << "\tScore:" << best.score_ <<"\tSelected task:" << task->id_ << "\n";
108 
109  return best.provider_->getTskComAgent();
110  }
111 }
virtual double calculateScore(ResourceProvider *rp)
TskComAgent * getTskComAgent()
static double linkLoadFactor(double load)
bool herosComparator(const ProviderScore &first, const ProviderScore &second)
ResourceProvider * provider_
Definition: providerscore.h:16

Member Data Documentation

double HerosScheduler::epsilon
private

Definition at line 38 of file herosscheduler.h.


The documentation for this class was generated from the following files: