X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/63d18c86bbffb905a9d31dc2384596cead30529a..b197602d9f391f0020949e793fd191bb722af74a:/src/surf/vm_hl13.cpp diff --git a/src/surf/vm_hl13.cpp b/src/surf/vm_hl13.cpp index 40b73a9929..208e24ee53 100644 --- a/src/surf/vm_hl13.cpp +++ b/src/surf/vm_hl13.cpp @@ -4,6 +4,10 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include + +#include + #include "cpu_cas01.hpp" #include "vm_hl13.hpp" @@ -11,14 +15,15 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_vm); void surf_vm_model_init_HL13(void){ if (surf_cpu_model_vm) { - surf_vm_model = new VMHL13Model(); - Model *model = surf_vm_model; - + surf_vm_model = new simgrid::surf::VMHL13Model(); + simgrid::surf::Model *model = surf_vm_model; xbt_dynar_push(all_existing_models, &model); - xbt_dynar_push(model_list_invoke, &model); } } +namespace simgrid { +namespace surf { + /********* * Model * *********/ @@ -30,8 +35,11 @@ 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, surf_resource_t host_PM) { - return new VMHL13(this, name, NULL, host_PM); +VirtualMachine *VMHL13Model::createVM(const char *name, sg_host_t host_PM) +{ + VirtualMachine* vm = new VMHL13(this, name, NULL, host_PM); + surf_callback_emit(VMCreatedCallbacks, vm); + return vm; } static inline double get_solved_value(CpuAction *cpu_action) @@ -50,22 +58,6 @@ double VMHL13Model::shareResources(double now) { /* TODO: update action's cost with the total cost of processes on the VM. */ - - /* 0. Make sure that we already calculated the resource share at the physical - * machine layer. */ - { - XBT_ATTRIB_UNUSED Model *ws_model = surf_host_model; - XBT_ATTRIB_UNUSED Model *vm_ws_model = surf_vm_model; - XBT_ATTRIB_UNUSED unsigned int index_of_pm_ws_model = xbt_dynar_search(model_list_invoke, &ws_model); - XBT_ATTRIB_UNUSED unsigned int index_of_vm_ws_model = xbt_dynar_search(model_list_invoke, &vm_ws_model); - xbt_assert((index_of_pm_ws_model < index_of_vm_ws_model), "Cannot assume surf_host_model comes before"); - - /* Another option is that we call sub_ws->share_resource() here. The - * share_resource() function has no side-effect. We can call it here to - * ensure that. */ - } - - /* 1. Now we know how many resource should be assigned to each virtual * machine. We update constraints of the virtual machine layer. * @@ -124,7 +116,7 @@ double VMHL13Model::shareResources(double now) typeid(surf_network_model).name(), min_by_net, typeid(surf_storage_model).name(), min_by_sto); - double ret = max(max(min_by_cpu, min_by_net), 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) @@ -173,7 +165,7 @@ Action *VMHL13Model::executeParallelTask(int host_nb, ************/ VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, - surf_resource_t host_PM) + sg_host_t host_PM) : VirtualMachine(model, name, props, NULL, NULL) { Host *sub_ws = surf_host_resource_priv(host_PM); @@ -189,7 +181,8 @@ VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, * is still used by the physical machine. */ sg_host_t sg_sub_ws = sg_host_by_name_or_create(sub_ws->getName()); p_netElm = new RoutingEdgeWrapper(sg_host_edge(sg_sub_ws)); - sg_host_edge_set(sg_host_by_name_or_create(name), p_netElm); + 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; @@ -199,7 +192,7 @@ VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, CpuCas01 *sub_cpu = static_cast(sg_host_surfcpu(host_PM)); p_cpu = surf_cpu_model_vm->createCpu(name, // name - sub_cpu->getPowerPeakList(), // host->power_peak, + sub_cpu->getSpeedPeakList(), // host->power_peak, sub_cpu->getPState(), 1, // host->power_scale, NULL, // host->power_trace, @@ -207,6 +200,7 @@ VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, SURF_RESOURCE_ON, // host->initial_state, NULL, // host->state_trace, NULL); // host->properties, + p_cpu->plug(host); /* 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 ? */ @@ -214,8 +208,6 @@ VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, 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)); - - surf_callback_emit(VMCreatedCallbacks, this); } /* @@ -281,7 +273,7 @@ void VMHL13::restore() /* * Update the physical host of the given VM */ -void VMHL13::migrate(surf_resource_t ind_dst_pm) +void VMHL13::migrate(sg_host_t ind_dst_pm) { /* ind_dst_pm equals to smx_host_t */ Host *ws_dst = static_cast(surf_host_resource_priv(ind_dst_pm)); @@ -347,9 +339,10 @@ void VMHL13::setAffinity(Cpu *cpu, unsigned long mask){ * A surf level object will be useless in the upper layer. Returning the * dict_elm of the host. **/ -surf_resource_t VMHL13::getPm() +sg_host_t VMHL13::getPm() { - return xbt_lib_get_elm_or_null(host_lib, p_subWs->getName()); + // TODO, store pointer to the PM? + return simgrid::Host::by_name_or_null(p_subWs->getName()); } /* Adding a task to a VM updates the VCPU task on its physical machine. */ @@ -370,3 +363,6 @@ Action *VMHL13::execute(double size) Action *VMHL13::sleep(double duration) { return p_cpu->sleep(duration); } + +} +}