From: Martin Quinson Date: Wed, 23 Dec 2015 00:17:16 +0000 (+0100) Subject: give the VM a link to their PM as a simgrid::Host X-Git-Tag: v3_13~1402 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/347f9a2ca55bffc88bf965952b9be3a15535e908?hp=1677a24a253d883f3db0744651ea5cb489cbf73a give the VM a link to their PM as a simgrid::Host --- diff --git a/include/simgrid/Host.hpp b/include/simgrid/Host.hpp index c887ee7431..d4d211a04b 100644 --- a/include/simgrid/Host.hpp +++ b/include/simgrid/Host.hpp @@ -18,13 +18,14 @@ namespace simgrid { -XBT_PUBLIC_CLASS Host : public simgrid::xbt::Extendable { +XBT_PUBLIC_CLASS Host : + public simgrid::xbt::Extendable { private: - simgrid::xbt::string id_; + simgrid::xbt::string name_; public: - Host(std::string const& id); + Host(std::string const& name); ~Host(); - simgrid::xbt::string const& id() const { return id_; } + simgrid::xbt::string const& getName() const { return name_; } static Host* by_name_or_null(const char* name); static Host* by_name_or_create(const char* name); }; diff --git a/src/mc/mc_smx.cpp b/src/mc/mc_smx.cpp index f513359bfe..325ea151e8 100644 --- a/src/mc/mc_smx.cpp +++ b/src/mc/mc_smx.cpp @@ -196,7 +196,7 @@ const char* MC_smx_process_get_host_name(smx_process_t p) ~fake_host() {} }; fake_host foo; - const size_t offset = (char*) &foo.host.id() - (char*) &foo.host; + const size_t offset = (char*) &foo.host.getName() - (char*) &foo.host; // Read the simgrid::xbt::string in the MCed process: mc_smx_process_info_t info = MC_smx_process_get_info(p); diff --git a/src/simgrid/host.cpp b/src/simgrid/host.cpp index 7f1a381ad9..f332bb75e6 100644 --- a/src/simgrid/host.cpp +++ b/src/simgrid/host.cpp @@ -16,7 +16,7 @@ size_t sg_host_count() const char *sg_host_get_name(sg_host_t host) { - return host->id().c_str(); + return host->getName().c_str(); } void* sg_host_extension_get(sg_host_t host, size_t ext) @@ -193,7 +193,7 @@ int sg_host_get_pstate(sg_host_t host) { namespace simgrid { Host::Host(std::string const& id) - : id_(id) + : name_(id) { } diff --git a/src/surf/cpu_interface.cpp b/src/surf/cpu_interface.cpp index 51b1d1edf4..10334fa25f 100644 --- a/src/surf/cpu_interface.cpp +++ b/src/surf/cpu_interface.cpp @@ -225,7 +225,7 @@ int Cpu::getCore() void Cpu::plug(simgrid::Host* host) { if (this->m_host != nullptr) - xbt_die("Already plugged into host %s", host->id().c_str()); + xbt_die("Already plugged into host %s", host->getName().c_str()); host->extension_set(this); this->m_host = host; } diff --git a/src/surf/host_interface.cpp b/src/surf/host_interface.cpp index 5563e1b498..9d740e6ce1 100644 --- a/src/surf/host_interface.cpp +++ b/src/surf/host_interface.cpp @@ -128,7 +128,7 @@ void Host::destroy() void Host::attach(simgrid::Host* host) { if (p_host != nullptr) - xbt_die("Already attached to host %s", host->id().c_str()); + xbt_die("Already attached to host %s", host->getName().c_str()); host->extension_set(this); p_host = host; onCreation(this); @@ -371,7 +371,7 @@ xbt_dynar_t Host::getVms() iter != simgrid::surf::VMModel::ws_vms.end(); ++iter) { simgrid::surf::VirtualMachine *ws_vm = &*iter; - if (this == ws_vm->p_subWs) + if (this == ws_vm->p_hostPM->extension(simgrid::surf::Host::EXTENSION_ID)) xbt_dynar_push(dyn, &ws_vm); } diff --git a/src/surf/plugins/energy.cpp b/src/surf/plugins/energy.cpp index f320560dd7..1ee70cfced 100644 --- a/src/surf/plugins/energy.cpp +++ b/src/surf/plugins/energy.cpp @@ -100,7 +100,8 @@ void sg_energy_plugin_init() { }); simgrid::surf::VMCreatedCallbacks.connect([](simgrid::surf::VirtualMachine* vm) { - std::map::iterator host_energy_it = surf_energy->find(vm->p_subWs); + std::map::iterator host_energy_it = + surf_energy->find(vm->p_hostPM->extension(simgrid::surf::Host::EXTENSION_ID)); xbt_assert(host_energy_it != surf_energy->end(), "The host is not in surf_energy."); (*surf_energy)[vm] = host_energy_it->second; host_energy_it->second->ref(); // protect the HostEnergy from getting deleted too early diff --git a/src/surf/virtual_machine.cpp b/src/surf/virtual_machine.cpp index 37b24e7400..dd64c88b51 100644 --- a/src/surf/virtual_machine.cpp +++ b/src/surf/virtual_machine.cpp @@ -33,9 +33,9 @@ VMModel::vm_list_t VMModel::ws_vms; * Resource * ************/ -VirtualMachine::VirtualMachine(Model *model, const char *name, xbt_dict_t props, - RoutingEdge *netElm, Cpu *cpu) -: Host(model, name, props, NULL, netElm, cpu) +VirtualMachine::VirtualMachine(Model *model, const char *name, xbt_dict_t props,simgrid::Host *hostPM) +: Host(model, name, props, NULL, NULL, NULL) +, p_hostPM(hostPM) { VMModel::ws_vms.push_back(*this); simgrid::Host::by_name_or_create(name)->extension_set(this); @@ -56,20 +56,10 @@ void VirtualMachine::setState(e_surf_resource_state_t state){ VMStateChangedCallbacks(this); } -/* - * A surf level object will be useless in the upper layer. Returning the - * dict_elm of the host. - **/ -sg_host_t VirtualMachine::getPm() -{ - return p_subWs->getHost(); +/** @brief returns the physical machine on which the VM is running **/ +sg_host_t VirtualMachine::getPm() { + return p_hostPM; } -/********** - * Action * - **********/ - -//FIME:: handle action cancel - } } diff --git a/src/surf/virtual_machine.hpp b/src/surf/virtual_machine.hpp index 7d9f819629..baef9f2e76 100644 --- a/src/surf/virtual_machine.hpp +++ b/src/surf/virtual_machine.hpp @@ -63,7 +63,7 @@ public: * @param cpu The Cpu associated to this VM */ VirtualMachine(simgrid::surf::Model *model, const char *name, xbt_dict_t props, - RoutingEdge *netElm, Cpu *cpu); + simgrid::Host *host); /** @brief Destructor */ ~VirtualMachine(); @@ -86,14 +86,14 @@ public: virtual void migrate(sg_host_t dest_PM)=0; /** @brief Get the physical machine hosting the VM */ - virtual sg_host_t getPm()=0; + sg_host_t getPm(); virtual void setBound(double bound)=0; virtual void setAffinity(Cpu *cpu, unsigned long mask)=0; /* The vm object of the lower layer */ CpuAction *p_action; - Host *p_subWs; + simgrid::Host *p_hostPM; e_surf_vm_state_t p_currentState; public: boost::intrusive::list_member_hook<> vm_hook; @@ -129,10 +129,6 @@ public: static vm_list_t ws_vms; }; -/********** - * Action * - **********/ - } } diff --git a/src/surf/vm_hl13.cpp b/src/surf/vm_hl13.cpp index 90be65ca1a..d31a30acc9 100644 --- a/src/surf/vm_hl13.cpp +++ b/src/surf/vm_hl13.cpp @@ -93,7 +93,7 @@ double VMHL13Model::shareResources(double now) double solved_value = get_solved_value(ws_vm->p_action); XBT_DEBUG("assign %f to vm %s @ pm %s", solved_value, - ws_vm->getName(), ws_vm->p_subWs->getName()); + ws_vm->getName(), ws_vm->p_hostPM->getName().c_str()); // TODO: check lmm_update_constraint_bound() works fine instead of the below manual substitution. // cpu_cas01->constraint->bound = solved_value; @@ -164,12 +164,9 @@ Action *VMHL13Model::executeParallelTask(int host_nb, * Resource * ************/ -VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, - sg_host_t host_PM) - : VirtualMachine(model, name, props, NULL, NULL) +VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, sg_host_t host_PM) + : VirtualMachine(model, name, props, host_PM) { - Host *sub_ws = surf_host_resource_priv(host_PM); - /* Currently, we assume a VM has no storage. */ p_storage = NULL; @@ -183,7 +180,6 @@ VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, sg_host_t host = sg_host_by_name_or_create(name); sg_host_edge_set(host, p_netElm); - p_subWs = sub_ws; p_currentState = SURF_VM_STATE_CREATED; // //// CPU RELATED STUFF //// @@ -205,7 +201,7 @@ VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, // vm_ws->cpu_action = surf_cpu_model_pm->extension.cpu.execute(host_PM, GUESTOS_NOISE); p_action = sub_cpu->execute(0); - XBT_INFO("Create VM(%s)@PM(%s) with %ld mounted disks", name, sub_ws->getName(), xbt_dynar_length(p_storage)); + XBT_INFO("Create VM(%s)@PM(%s) with %ld mounted disks", name, p_hostPM->getName().c_str(), xbt_dynar_length(p_storage)); } /* @@ -271,15 +267,15 @@ void VMHL13::restore() /* * Update the physical host of the given VM */ -void VMHL13::migrate(sg_host_t ind_dst_pm) +void VMHL13::migrate(sg_host_t host_dest) { /* ind_dst_pm equals to smx_host_t */ - Host *ws_dst = static_cast(surf_host_resource_priv(ind_dst_pm)); + Host *surfHost_dst = static_cast(surf_host_resource_priv(host_dest)); const char *vm_name = getName(); - const char *pm_name_src = p_subWs->getName(); - const char *pm_name_dst = ws_dst->getName(); + const char *pm_name_src = p_hostPM->getName().c_str(); + const char *pm_name_dst = surfHost_dst->getName(); - xbt_assert(ws_dst); + xbt_assert(surfHost_dst); /* update net_elm with that of the destination physical host */ RoutingEdge *old_net_elm = p_netElm; @@ -293,13 +289,13 @@ void VMHL13::migrate(sg_host_t ind_dst_pm) p_netElm = new_net_elm; sg_host_edge_set(sg_host_by_name(vm_name), p_netElm); - p_subWs = ws_dst; + p_hostPM = host_dest; /* Update vcpu's action for the new pm */ { /* create a cpu action bound to the pm model at the destination. */ CpuAction *new_cpu_action = static_cast( - static_cast(sg_host_surfcpu(ind_dst_pm))->execute(0)); + static_cast(sg_host_surfcpu(host_dest))->execute(0)); e_surf_action_state_t state = p_action->getState(); if (state != SURF_ACTION_DONE) @@ -339,7 +335,7 @@ void VMHL13::setAffinity(Cpu *cpu, unsigned long mask){ **/ sg_host_t VMHL13::getPm() { - return p_subWs->getHost(); + return p_hostPM; } /* Adding a task to a VM updates the VCPU task on its physical machine. */ @@ -349,7 +345,7 @@ Action *VMHL13::execute(double size) double new_cost = old_cost + size; XBT_DEBUG("VM(%s)@PM(%s): update dummy action's cost (%f -> %f)", - getName(), p_subWs->getName(), + getName(), p_hostPM->getName().c_str(), old_cost, new_cost); p_action->setCost(new_cost);