7 "@(#) $Header: /cvsroot/nsnam/ns-2/common/datacenter.cc,v 1.43 $";
17 TclObject*
create(
int argc,
const char*
const*argv) {
22 DataCenter::DataCenter() : tskSubmitted_ (0),tskFailed_ (0), avgLoad_(0.0), avgLoadMem_(0.0),avgLoadStor_(0.0), avgPower_(0.0), dcScheduler(NULL), numHostTskAgents_(0), numVmTskAgents_(0),scheduleOnVms_(false)
45 vector <ResourceSpec*>::iterator rs;
50 vector <ResourceProvider*>::iterator iter;
76 newagnt->set_pkttype(PT_CLOUD_USER);
82 newagnt->set_pkttype(PT_CLOUD_USER);
105 sprintf(output,
"puts \"Configuring VMs...\"");
106 Tcl& tcl = Tcl::instance();
115 std::cout <<
"Selected DC scheduler: " << scheduler_name <<
"\n";
116 if(strcmp(scheduler_name,
"Green") == 0){
119 }
else if(strcmp(scheduler_name,
"RoundRobin") == 0){
122 }
else if(strcmp(scheduler_name,
"Random") == 0){
125 }
else if(strcmp(scheduler_name,
"RandDENS") == 0){
128 }
else if(strcmp(scheduler_name,
"BestDENS") == 0){
131 }
else if(strcmp(scheduler_name,
"HEROS") == 0){
137 std::cerr <<
"Unknown scheduler type: " << scheduler_name;
144 Tcl& tcl = Tcl::instance();
145 tcl.evalf(
"set vmmigration_($next_migration_id) [new VmMigration]");
146 tcl.evalf(
"$vmmigration_($next_migration_id) set-id $next_migration_id");
148 "$DCenter get-newest-migration $vmmigration_($next_migration_id)");
177 tagent_->
sendmsg(tsksize, pTask, flags);
190 vector <ResourceProvider*>::iterator iter;
194 if ((*iter)->trySchedulingTsk(tsk))
195 return (*iter)->getTskComAgent();
205 return (agent_list.at(j));
210 vector <ResourceProvider*>::iterator iter;
214 if ((*iter)->trySchedulingTsk(tsk))
215 return (*iter)->getTskComAgent();
224 if (strcmp(argv[1],
"compute-load") == 0) {
227 }
else if (strcmp(argv[1],
"print-resspec") == 0) {
230 }
else if (strcmp(argv[1],
"initially-configure-vms") == 0) {
236 }
else if (strcmp(argv[1],
"clear") == 0) {
239 }
else if (strcmp(argv[1],
"schedule-on-vms") == 0) {
243 }
else if (argc == 3) {
244 if (strcmp(argv[1],
"add-dchost") == 0) {
245 DcHost *hst =
dynamic_cast<DcHost*
> (TclObject::lookup(argv[2]));
251 }
else if (strcmp(argv[1],
"add-vm") == 0) {
252 VM *vm =
dynamic_cast<VM*
> (TclObject::lookup(argv[2]));
259 else if (strcmp(argv[1],
"add-hosttaskagent") == 0) {
267 }
else if (strcmp(argv[1],
"add-vmtaskagent") == 0) {
276 else if (strcmp(argv[1],
"add-resspec") == 0) {
283 }
else if (strcmp(argv[1],
"add-vresspec") == 0) {
290 }
else if (strcmp(argv[1],
"add-pmodel") == 0) {
297 }
else if (strcmp(argv[1],
"get-newest-migration") == 0) {
304 }
else if (strcmp(argv[1],
"set-scheduler") == 0) {
310 }
else if (argc == 4) {
311 if (strcmp(argv[1],
"configure-resource") == 0) {
321 }
else if (strcmp(argv[1],
"configure-vresource") == 0) {
331 }
else if (strcmp(argv[1],
"migrate-vm") == 0) {
332 VM *vm =
dynamic_cast<VM*
> (TclObject::lookup(argv[2]));
351 vector <ResourceProvider*>::iterator iter;
354 double avgLoadMem = 0;
355 double avgLoadStor = 0;
360 avgLoad += (*iter)->getResTypeUtil(
Computing);
361 avgLoadMem += (*iter)->getResTypeUtil(
Memory);
362 avgLoadStor += (*iter)->getResTypeUtil(
Storage);
363 avgPower += ((
DcHost*)(*iter))->eCurrentConsumption_;
370 (*iter)->getResTypeUtil(
Memory);
371 (*iter)->getResTypeUtil(
Storage);
383 vector <ResourceSpec*>::iterator iter;
392 vector <ResourceSpec*>::iterator iter;
394 std::string test = spec_name;
397 if((*iter)->name_==test){
405 std::cerr <<
"ERROR: The requested resource specification is not registered in the data center!\n";
411 vector <ResourceSpec*>::iterator iter;
413 std::string test = spec_name;
416 if((*iter)->name_==test){
424 std::cerr <<
"ERROR: The requested virtual resource specification is not registered in the data center!\n";
void addHostTaskAgentPointer(TskComAgent *newagnt)
int configureResource(DcResource *confRes, const char *spec_name)
TskComAgent * scheduleGreen(CloudTask *tsk)
void setVmScheduling(bool scheduleOnVms)
virtual void sendmsg(int nbytes, void *pTaskObj, const char *flags=0)
int configureVirtualResource(DcResource *confRes, const char *spec_name)
TskComAgent * scheduleRoundRobin(CloudTask *tsk)
vector< TskComAgent * > vm_agent_list
void addPModelPointer(PowerModel *newPModel)
TclObject * create(int argc, const char *const *argv)
void addVmTaskAgentPointer(TskComAgent *newagnt)
vector< PowerModel * > power_model_list
void migrateVm(VM *vm, ResourceProvider *target)
void addResourceSpecificationPointer(ResourceSpec *newresspec)
vector< ResourceProvider * > host_list
virtual TskComAgent * scheduleTask(CloudTask *task, std::vector< ResourceProvider * > providers)=0
void initalizeMigration(VM *vm, ResourceProvider *target)
static const char rcsid[]
virtual void receivedTsk(int tsksize, CloudTask *pTask, const char *flags=0)
virtual int command(int argc, const char *const *argv)
VmMigration * tmp_migration_
vector< ResourceProvider * > vm_list
void addVmPointer(VM *newvm)
int initiallyConfigureVms()
void createNewMigration()
DataCenterClass class_datacenter
void addVirtualResourceSpecificationPointer(ResourceSpec *newresspec)
vector< ResourceSpec * > virt_resource_specification_list
vector< ResourceSpec * > resource_specification_list
DcScheduler * dcScheduler
vector< TskComAgent * > host_agent_list
virtual int setSpecification(ResourceSpec *resspec)
TskComAgent * scheduleGreenVmOnly(CloudTask *tsk)
void addHostPointer(DcHost *newhst)
int setScheduler(const char *scheduler_name)
void printResourceSpecs()