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);
};
~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);
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)
namespace simgrid {
Host::Host(std::string const& id)
- : id_(id)
+ : name_(id)
{
}
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;
}
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);
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);
}
});
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
* 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);
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
-
}
}
* @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();
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;
static vm_list_t ws_vms;
};
-/**********
- * Action *
- **********/
-
}
}
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;
* 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;
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 ////
// 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));
}
/*
/*
* 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;
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)
**/
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. */
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);