Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
give the VM a link to their PM as a simgrid::Host
authorMartin Quinson <martin.quinson@loria.fr>
Wed, 23 Dec 2015 00:17:16 +0000 (01:17 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Wed, 23 Dec 2015 00:17:16 +0000 (01:17 +0100)
include/simgrid/Host.hpp
src/mc/mc_smx.cpp
src/simgrid/host.cpp
src/surf/cpu_interface.cpp
src/surf/host_interface.cpp
src/surf/plugins/energy.cpp
src/surf/virtual_machine.cpp
src/surf/virtual_machine.hpp
src/surf/vm_hl13.cpp

index c887ee7..d4d211a 100644 (file)
 
 namespace simgrid {
 
-XBT_PUBLIC_CLASS Host : public simgrid::xbt::Extendable<Host> {
+XBT_PUBLIC_CLASS Host :
+       public simgrid::xbt::Extendable<Host> {
 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);
 };
index f513359..325ea15 100644 (file)
@@ -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);
index 7f1a381..f332bb7 100644 (file)
@@ -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)
 {
 }
 
index 51b1d1e..10334fa 100644 (file)
@@ -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;
 }
index 5563e1b..9d740e6 100644 (file)
@@ -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);
   }
 
index f320560..1ee70cf 100644 (file)
@@ -100,7 +100,8 @@ void sg_energy_plugin_init() {
     });
 
     simgrid::surf::VMCreatedCallbacks.connect([](simgrid::surf::VirtualMachine* vm) {
-       std::map<simgrid::surf::Host*, HostEnergy*>::iterator host_energy_it = surf_energy->find(vm->p_subWs);
+       std::map<simgrid::surf::Host*, HostEnergy*>::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
index 37b24e7..dd64c88 100644 (file)
@@ -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<simgrid::surf::Host>(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
-
 }
 }
index 7d9f819..baef9f2 100644 (file)
@@ -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 *
- **********/
-
 }
 }
 
index 90be65c..d31a30a 100644 (file)
@@ -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<Host*>(surf_host_resource_priv(ind_dst_pm));
+   Host *surfHost_dst = static_cast<Host*>(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<CpuAction*>(
-                                           static_cast<Cpu*>(sg_host_surfcpu(ind_dst_pm))->execute(0));
+                                           static_cast<Cpu*>(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);