X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3bb80150f0e018a1ca0ce65e93fedee79c0ea111..1bd3b1e9e02dd5662a771c1b382cfa1d1d9a2e08:/src/surf/surf_interface.cpp diff --git a/src/surf/surf_interface.cpp b/src/surf/surf_interface.cpp index 8a671c14fa..c782e81100 100644 --- a/src/surf/surf_interface.cpp +++ b/src/surf/surf_interface.cpp @@ -26,16 +26,23 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_kernel, surf, /* model_list_invoke contains only surf_host and surf_vm. * The callback functions of cpu_model and network_model will be called from * those of these host 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 all_existing_models = NULL; /* to destroy models correctly */ +xbt_dynar_t model_list_invoke = NULL; /* to invoke callbacks */ -tmgr_history_t history = NULL; -lmm_system_t maxmin_system = NULL; +sg_future_evt_set_t future_evt_set = nullptr; xbt_dynar_t surf_path = NULL; xbt_dynar_t host_that_restart = NULL; xbt_dict_t watched_hosts_lib; -surf_callback(void, void) surfExitCallbacks; +namespace simgrid { +namespace surf { + +simgrid::xbt::signal surfExitCallbacks; + +} +} + +#include // FIXME: this plugin should not be linked to the core s_surf_model_description_t surf_plugin_description[] = { {"Energy", "Cpu energy consumption.", sg_energy_plugin_init}, @@ -263,14 +270,9 @@ static XBT_INLINE void routing_asr_prop_free(void *p) //xbt_dict_free(&elm); FIXME: leaking in some case? That's a sometimes double-free with AsCluster::~AsCluster } -static XBT_INLINE void surf_host_free(void *r) -{ - delete static_cast(r); -} - static XBT_INLINE void surf_storage_free(void *r) { - delete static_cast(r); + delete static_cast(r); } void sg_version_check(int lib_version_major,int lib_version_minor,int lib_version_patch) { @@ -300,7 +302,11 @@ void sg_version(int *ver_major,int *ver_minor,int *ver_patch) { void surf_init(int *argc, char **argv) { XBT_DEBUG("Create all Libs"); - host_lib = xbt_lib_new(); + host_list = xbt_dict_new_homogeneous([](void*p) { + simgrid::s4u::Host* host = static_cast(p); + simgrid::s4u::Host::onDestruction(*host); + delete host; + }); as_router_lib = xbt_lib_new(); storage_lib = xbt_lib_new(); storage_type_lib = xbt_lib_new(); @@ -313,16 +319,16 @@ void surf_init(int *argc, char **argv) ROUTING_PROP_ASR_LEVEL = xbt_lib_add_level(as_router_lib,routing_asr_prop_free); XBT_DEBUG("Add SURF levels"); - SURF_HOST_LEVEL = xbt_lib_add_level(host_lib,surf_host_free); + simgrid::surf::Host::classInit(); SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,surf_storage_free); xbt_init(argc, argv); - if (!model_list) - model_list = xbt_dynar_new(sizeof(Model*), NULL); + if (!all_existing_models) + all_existing_models = xbt_dynar_new(sizeof(simgrid::surf::Model*), NULL); if (!model_list_invoke) - model_list_invoke = xbt_dynar_new(sizeof(Model*), NULL); - if (!history) - history = tmgr_history_new(); + model_list_invoke = xbt_dynar_new(sizeof(simgrid::surf::Model*), NULL); + if (!future_evt_set) + future_evt_set = new simgrid::trace_mgr::future_evt_set(); TRACE_add_start_function(TRACE_surf_alloc); TRACE_add_end_function(TRACE_surf_release); @@ -336,7 +342,7 @@ void surf_init(int *argc, char **argv) void surf_exit(void) { unsigned int iter; - Model *model = NULL; + simgrid::surf::Model *model = NULL; TRACE_end(); /* Just in case it was not called by the upper * layer (or there is no upper layer) */ @@ -346,7 +352,7 @@ void surf_exit(void) xbt_dynar_free(&host_that_restart); xbt_dynar_free(&surf_path); - xbt_lib_free(&host_lib); + xbt_dict_free(&host_list); xbt_lib_free(&as_router_lib); xbt_lib_free(&storage_lib); sg_link_exit(); @@ -354,21 +360,17 @@ void surf_exit(void) xbt_lib_free(&file_lib); xbt_dict_free(&watched_hosts_lib); - xbt_dynar_foreach(model_list, iter, model) + xbt_dynar_foreach(all_existing_models, iter, model) delete model; - xbt_dynar_free(&model_list); + xbt_dynar_free(&all_existing_models); xbt_dynar_free(&model_list_invoke); routing_exit(); - surf_callback_emit(surfExitCallbacks); + simgrid::surf::surfExitCallbacks(); - if (maxmin_system) { - lmm_system_free(maxmin_system); - maxmin_system = NULL; - } - if (history) { - tmgr_history_free(history); - history = NULL; + if (future_evt_set) { + delete future_evt_set; + future_evt_set = nullptr; } #ifdef CONTEXT_THREADS @@ -386,6 +388,9 @@ void surf_exit(void) * Model * *********/ +namespace simgrid { +namespace surf { + Model::Model() : p_maxminSystem(NULL) { @@ -574,60 +579,60 @@ void Model::updateActionsStateFull(double /*now*/, double /*delta*/) THROW_UNIMPLEMENTED; } +} +} + /************ * Resource * ************/ -Resource::Resource() -: p_name(NULL), p_properties(NULL), p_model(NULL) -{} +namespace simgrid { +namespace surf { -Resource::Resource(Model *model, const char *name, xbt_dict_t props) - : p_name(xbt_strdup(name)), p_properties(props), p_model(model) - , m_running(true), m_stateCurrent(SURF_RESOURCE_ON) +Resource::Resource(Model *model, const char *name) + : Resource(model, name, 1/*ON*/) {} -Resource::Resource(Model *model, const char *name, xbt_dict_t props, lmm_constraint_t constraint) - : p_name(xbt_strdup(name)), p_properties(props), p_model(model) - , m_running(true), m_stateCurrent(SURF_RESOURCE_ON), p_constraint(constraint) +Resource::Resource(Model *model, const char *name, lmm_constraint_t constraint) + : Resource(model, name, constraint, 1/*ON*/) +{} + +Resource::Resource(Model *model, const char *name, lmm_constraint_t constraint, int initiallyOn) + : p_name(xbt_strdup(name)) + , p_model(model) + , m_isOn(initiallyOn) + , p_constraint(constraint) {} -Resource::Resource(Model *model, const char *name, xbt_dict_t props, e_surf_resource_state_t stateInit) - : p_name(xbt_strdup(name)), p_properties(props), p_model(model) - , m_running(true), m_stateCurrent(stateInit) +Resource::Resource(Model *model, const char *name, int initiallyOn) + : p_name(xbt_strdup(name)) + , p_model(model) + , m_isOn(initiallyOn) {} + Resource::~Resource() { xbt_free((void*)p_name); - xbt_dict_free(&p_properties); } -e_surf_resource_state_t Resource::getState() -{ - return m_stateCurrent; -} - -void Resource::setState(e_surf_resource_state_t state) -{ - m_stateCurrent = state; +bool Resource::isOn() { + return m_isOn; } - -bool Resource::isOn() -{ - return m_running; +bool Resource::isOff() { + return ! m_isOn; } void Resource::turnOn() { - if (!m_running) { - m_running = true; + if (!m_isOn) { + m_isOn = true; } } void Resource::turnOff() { - if (m_running) { - m_running = false; + if (m_isOn) { + m_isOn = false; } } @@ -639,16 +644,13 @@ const char *Resource::getName() { return p_name; } -xbt_dict_t Resource::getProperties() { - if (p_properties==NULL) - p_properties = xbt_dict_new(); - return p_properties; -} - lmm_constraint_t Resource::getConstraint() { return p_constraint; } +} +} + /********** * Action * **********/ @@ -662,26 +664,22 @@ const char *surf_action_state_names[6] = { "SURF_ACTION_NOT_IN_THE_SYSTEM" }; -void Action::initialize(Model *model, double cost, bool failed, +/* added to manage the communication action's heap */ +void surf_action_lmm_update_index_heap(void *action, int i) { + static_cast(action)->updateIndexHeap(i); +} + +namespace simgrid { +namespace surf { + +void Action::initialize(simgrid::surf::Model *model, double cost, bool failed, lmm_variable_t var) { - m_priority = 1.0; - m_refcount = 1; m_remains = cost; - m_maxDuration = NO_MAX_DURATION; - m_finish = -1.0; m_start = surf_get_clock(); m_cost = cost; p_model = model; - p_data = NULL; p_variable = var; - m_lastValue = 0; - m_lastUpdate = 0; - m_suspended = false; - m_hat = NOTSET; - p_category = NULL; - p_stateHookup.prev = 0; - p_stateHookup.next = 0; if (failed) p_stateSet = getModel()->getFailedActionSet(); else @@ -690,12 +688,12 @@ void Action::initialize(Model *model, double cost, bool failed, p_stateSet->push_back(*this); } -Action::Action(Model *model, double cost, bool failed) +Action::Action(simgrid::surf::Model *model, double cost, bool failed) { initialize(model, cost, failed); } -Action::Action(Model *model, double cost, bool failed, lmm_variable_t var) +Action::Action(simgrid::surf::Model *model, double cost, bool failed, lmm_variable_t var) { initialize(model, cost, failed, var); } @@ -894,11 +892,6 @@ void Action::heapUpdate(xbt_heap_t heap, double key, enum heap_action_type hat) } } -/* added to manage the communication action's heap */ -void surf_action_lmm_update_index_heap(void *action, int i) { - static_cast(action)->updateIndexHeap(i); -} - void Action::updateIndexHeap(int i) { m_indexHeap = i; } @@ -945,7 +938,8 @@ void Action::updateRemainingLazy(double now) double_update(&m_remains, m_lastValue * delta, sg_surf_precision*sg_maxmin_precision); if (getModel() == surf_cpu_model_pm && TRACE_is_enabled()) { - Resource *cpu = static_cast(lmm_constraint_id(lmm_get_cnst_from_var(getModel()->getMaxminSystem(), getVariable(), 0))); + simgrid::surf::Resource *cpu = static_cast( + lmm_constraint_id(lmm_get_cnst_from_var(getModel()->getMaxminSystem(), getVariable(), 0))); TRACE_surf_host_set_utilization(cpu->getName(), getCategory(), m_lastValue, m_lastUpdate, now - m_lastUpdate); } XBT_DEBUG("Updating action(%p): remains is now %f", this, m_remains); @@ -973,3 +967,6 @@ void Action::updateRemainingLazy(double now) m_lastUpdate = now; m_lastValue = lmm_variable_getvalue(getVariable()); } + +} +}