X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/95f98f86ddeb28cea15e126929f48d196160a316..2280006bb5c1597cbf4d6212b1f5fba9a6713d58:/src/surf/surf.cpp diff --git a/src/surf/surf.cpp b/src/surf/surf.cpp index b46787d441..d7fec1b68c 100644 --- a/src/surf/surf.cpp +++ b/src/surf/surf.cpp @@ -3,6 +3,7 @@ #include "network.hpp" #include "cpu.hpp" #include "workstation.hpp" +#include "vm_workstation.hpp" #include "simix/smx_host_private.h" #include "surf_routing.hpp" #include "simgrid/sg_config.h" @@ -73,8 +74,12 @@ static void remove_watched_host(void *key) xbt_dynar_free(&hosts); }*/ +/* model_list_invoke contains only surf_workstation and surf_vm_workstation. + * The callback functions of cpu_model and network_model will be called from + * those of these workstation models. */ +xbt_dynar_t model_list = NULL; /* for destroying all models correctly */ +xbt_dynar_t model_list_invoke = NULL; /* for invoking callbacks */ -xbt_dynar_t model_list = NULL; tmgr_history_t history = NULL; lmm_system_t maxmin_system = NULL; xbt_dynar_t surf_path = NULL; @@ -136,6 +141,13 @@ s_surf_model_description_t surf_workstation_model_description[] = { {NULL, NULL, NULL} /* this array must be NULL terminated */ }; +s_surf_model_description_t surf_vm_workstation_model_description[] = { + {"default", + "Default vm workstation model.)", + surf_vm_workstation_model_init_current_default}, + {NULL, NULL, NULL} /* this array must be NULL terminated */ +}; + s_surf_model_description_t surf_optimization_mode_description[] = { {"Lazy", "Lazy action management (partial invalidation in lmm + heap in action remaining).", @@ -161,8 +173,6 @@ static xbt_parmap_t surf_parmap = NULL; /* parallel map on models */ #endif static double *surf_mins = NULL; /* return value of share_resources for each model */ -static int surf_min_index; /* current index in surf_mins */ -static double min; /* duration determined by surf_solve */ double NOW = 0; @@ -338,7 +348,9 @@ void surf_init(int *argc, char **argv) xbt_init(argc, argv); if (!model_list) - model_list = xbt_dynar_new(sizeof(surf_model_private_t), NULL); + model_list = xbt_dynar_new(sizeof(ModelPtr), NULL); + if (!model_list_invoke) + model_list_invoke = xbt_dynar_new(sizeof(ModelPtr), NULL); if (!history) history = tmgr_history_new(); @@ -368,6 +380,7 @@ void surf_exit(void) xbt_dynar_foreach(model_list, iter, model) delete model; xbt_dynar_free(&model_list); + xbt_dynar_free(&model_list_invoke); routing_exit(); if (maxmin_system) { @@ -410,7 +423,7 @@ Model::Model(string name) m_actSuspendCB(0), m_actCancelCB(0), m_actResumeCB(0), p_maxminSystem(0) { - ActionPtr action; + ActionPtr action = NULL; p_readyActionSet = xbt_swag_new(xbt_swag_offset(*action, p_stateHookup)); p_runningActionSet = xbt_swag_new(xbt_swag_offset(*action, p_stateHookup)); p_failedActionSet = xbt_swag_new(xbt_swag_offset(*action, p_stateHookup)); @@ -512,7 +525,7 @@ double Model::shareResourcesLazy(double now) return min; } -double Model::shareResourcesFull(double now) { +double Model::shareResourcesFull(double /*now*/) { THROW_UNIMPLEMENTED; } @@ -584,12 +597,12 @@ void Model::updateActionsState(double now, double delta) xbt_die("Invalid cpu update mechanism!"); } -void Model::updateActionsStateLazy(double now, double delta) +void Model::updateActionsStateLazy(double /*now*/, double /*delta*/) { } -void Model::updateActionsStateFull(double now, double delta) +void Model::updateActionsStateFull(double /*now*/, double /*delta*/) { } @@ -674,6 +687,11 @@ e_surf_resource_state_t Resource::getState() return p_stateCurrent; } +void Resource::setState(e_surf_resource_state_t state) +{ + p_stateCurrent = state; +} + bool Resource::isOn() { return m_running; @@ -978,7 +996,7 @@ void ActionLmm::updateRemainingLazy(double now) double_update(&m_remains, m_lastValue * delta); #ifdef HAVE_TRACING - if (p_model == static_cast(surf_cpu_model) && TRACE_is_enabled()) { + if (p_model == static_cast(surf_cpu_model_pm) && TRACE_is_enabled()) { ResourcePtr cpu = static_cast(lmm_constraint_id(lmm_get_cnst_from_var(p_model->p_maxminSystem, p_variable, 0))); TRACE_surf_host_set_utilization(cpu->m_name, p_category, m_lastValue, m_lastUpdate, now - m_lastUpdate); }