X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ede7d4e0f2464d8646f1d1a3b09fa7f678660ade..e292a614483e53608932312a1c68a87063ea8600:/src/surf/vm_hl13.cpp diff --git a/src/surf/vm_hl13.cpp b/src/surf/vm_hl13.cpp index 9edc53ab00..aee9b9927d 100644 --- a/src/surf/vm_hl13.cpp +++ b/src/surf/vm_hl13.cpp @@ -27,14 +27,10 @@ namespace surf { /********* * Model * *********/ - VMHL13Model::VMHL13Model() : VMModel() {} void VMHL13Model::updateActionsState(double /*now*/, double /*delta*/) {} -/* ind means ''indirect'' that this is a reference on the whole dict_elm - * structure (i.e not on the surf_resource_private infos) */ - VirtualMachine *VMHL13Model::createVM(const char *name, sg_host_t host_PM) { VirtualMachine* vm = new VMHL13(this, name, NULL, host_PM); @@ -42,10 +38,8 @@ VirtualMachine *VMHL13Model::createVM(const char *name, sg_host_t host_PM) return vm; } -/* In the real world, processes on the guest operating system will be somewhat - * degraded due to virtualization overhead. The total CPU share that these - * processes get is smaller than that of the VM process gets on a host - * operating system. */ +/* In the real world, processes on the guest operating system will be somewhat degraded due to virtualization overhead. + * The total CPU share these processes get is smaller than that of the VM process gets on a host operating system. */ // const double virt_overhead = 0.95; const double virt_overhead = 1; @@ -56,7 +50,6 @@ double VMHL13Model::next_occuring_event(double now) /* 1. Now we know how many resource should be assigned to each virtual * machine. We update constraints of the virtual machine layer. * - * * If we have two virtual machine (VM1 and VM2) on a physical machine (PM1). * X1 + X2 = C (Equation 1) * where @@ -74,21 +67,16 @@ double VMHL13Model::next_occuring_event(double now) * Equation 1 was solved in the physical machine layer. * Equation 2 is solved in the virtual machine layer (here). * X1 must be passed to the virtual machine laye as a constraint value. - * **/ /* iterate for all virtual machines */ - for (VMModel::vm_list_t::iterator iter = - VMModel::ws_vms.begin(); - iter != VMModel::ws_vms.end(); ++iter) { - + for (VMModel::vm_list_t::iterator iter = VMModel::ws_vms.begin(); iter != VMModel::ws_vms.end(); ++iter) { VirtualMachine *ws_vm = &*iter; Cpu *cpu = ws_vm->p_cpu; xbt_assert(cpu, "cpu-less host"); double solved_value = ws_vm->p_action->getVariable()->value; - XBT_DEBUG("assign %f to vm %s @ pm %s", solved_value, - ws_vm->getName(), ws_vm->p_hostPM->name().c_str()); + XBT_DEBUG("assign %f to vm %s @ pm %s", solved_value, ws_vm->getName(), ws_vm->p_hostPM->name().c_str()); // TODO: check lmm_update_constraint_bound() works fine instead of the below manual substitution. // cpu_cas01->constraint->bound = solved_value; @@ -97,35 +85,16 @@ double VMHL13Model::next_occuring_event(double now) lmm_update_constraint_bound(vcpu_system, cpu->getConstraint(), virt_overhead * solved_value); } - /* 2. Calculate resource share at the virtual machine layer. */ adjustWeightOfDummyCpuActions(); - double min_by_cpu = surf_cpu_model_vm->next_occuring_event(now); - double min_by_net = surf_network_model->next_occuring_event_isIdempotent() ? surf_network_model->next_occuring_event(now) : -1; - // Fixme: take storage into account once it's implemented - double min_by_sto = -1; - - XBT_DEBUG("model %p, %s min_by_cpu %f, %s min_by_net %f, %s min_by_sto %f", - this, typeid(surf_cpu_model_pm ).name(), min_by_cpu, - typeid(surf_network_model).name(), min_by_net, - typeid(surf_storage_model).name(), min_by_sto); - - double ret = std::max(std::max(min_by_cpu, min_by_net), min_by_sto); - if (min_by_cpu >= 0.0 && min_by_cpu < ret) - ret = min_by_cpu; - if (min_by_net >= 0.0 && min_by_net < ret) - ret = min_by_net; - if (min_by_sto >= 0.0 && min_by_sto < ret) - ret = min_by_sto; - - return ret; + /* 3. Ready. Get the next occuring event */ + return surf_cpu_model_vm->next_occuring_event(now); } /************ * Resource * ************/ - VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, sg_host_t host_PM) : VirtualMachine(model, name, props, host_PM) { @@ -148,20 +117,15 @@ VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, sg_host_t hos CpuCas01 *sub_cpu = static_cast(host_PM->pimpl_cpu); p_cpu = surf_cpu_model_vm->createCpu(host_VM, // the machine hosting the VM - sub_cpu->getSpeedPeakList(), // host->power_peak, - sub_cpu->getPState(), - 1, // host->power_scale, - NULL, // host->power_trace, - 1, // host->core_amount, - 1/*ON*/, // host->initiallyOn, - NULL); // host->state_trace, + sub_cpu->getSpeedPeakList(), 1 /*cores*/); + if (sub_cpu->getPState() != 0) + p_cpu->setPState(sub_cpu->getPState()); /* We create cpu_action corresponding to a VM process on the host operating system. */ /* FIXME: TODO: we have to periodically input GUESTOS_NOISE to the system? how ? */ p_action = sub_cpu->execution_start(0); - XBT_INFO("Create VM(%s)@PM(%s) with %ld mounted disks", - name, p_hostPM->name().c_str(), xbt_dynar_length(p_storage)); + XBT_VERB("Create VM(%s)@PM(%s) with %ld mounted disks", name, p_hostPM->name().c_str(), xbt_dynar_length(p_storage)); } void VMHL13::suspend() @@ -194,12 +158,10 @@ void VMHL13::restore() p_vm_state = SURF_VM_STATE_RUNNING; } -/* - * Update the physical host of the given VM - */ +/* Update the physical host of the given VM */ void VMHL13::migrate(sg_host_t host_dest) { - Host *surfHost_dst = host_dest->extension(); + HostImpl *surfHost_dst = host_dest->extension(); const char *vm_name = getName(); const char *pm_name_src = p_hostPM->name().c_str(); const char *pm_name_dst = surfHost_dst->getName(); @@ -214,9 +176,9 @@ void VMHL13::migrate(sg_host_t host_dest) /* create a cpu action bound to the pm model at the destination. */ CpuAction *new_cpu_action = static_cast(host_dest->pimpl_cpu->execution_start(0)); - e_surf_action_state_t state = p_action->getState(); - if (state != SURF_ACTION_DONE) - XBT_CRITICAL("FIXME: may need a proper handling, %d", state); + Action::State state = p_action->getState(); + if (state != Action::State::done) + XBT_CRITICAL("FIXME: may need a proper handling, %d", static_cast(state)); if (p_action->getRemainsNoUpdate() > 0) XBT_CRITICAL("FIXME: need copy the state(?), %f", p_action->getRemainsNoUpdate()); @@ -244,6 +206,5 @@ void VMHL13::setAffinity(Cpu *cpu, unsigned long mask){ p_action->setAffinity(cpu, mask); } - } }