X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9f55e34b93f3969827706f7d096acdd5d4723487..c24da98fc757fe34eb3fdb29b01c80d77313a80a:/src/surf/surf.c diff --git a/src/surf/surf.c b/src/surf/surf.c index 64b50d010b..729e6c3166 100644 --- a/src/surf/surf.c +++ b/src/surf/surf.c @@ -4,14 +4,15 @@ /* 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 "surf_private.h" #include "xbt/module.h" #include "mc/mc.h" +#include "simix/smx_host_private.h" #include "surf/surf_resource.h" #include "xbt/xbt_os_thread.h" +#include + XBT_LOG_NEW_CATEGORY(surf, "All SURF categories"); XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_kernel, surf, "Logging specific to SURF (kernel)"); @@ -135,7 +136,7 @@ s_surf_model_description_t surf_network_model_description[] = { #ifdef HAVE_NS3 {"NS3", "Network pseudo-model using the NS3 tcp model instead of an analytic model", - surf_network_model_init_NS3}, + surf_network_model_init_NS3}, #endif {"Reno", "Model from Steven H. Low using lagrange_solve instead of lmm_solve (experts only; check the code for more info).", @@ -188,6 +189,16 @@ s_surf_model_description_t surf_storage_model_description[] = { {NULL, NULL, NULL} /* this array must be NULL terminated */ }; +/* ********************************************************************* */ +/* TUTORIAL: New model */ +s_surf_model_description_t surf_new_model_description[] = { + {"default", + "Tutorial model.", + surf_new_model_init_default}, + {NULL, NULL, NULL} /* this array must be NULL terminated */ +}; +/* ********************************************************************* */ + #ifdef CONTEXT_THREADS static xbt_parmap_t surf_parmap = NULL; /* parallel map on models */ #endif @@ -368,6 +379,18 @@ static XBT_INLINE void routing_asr_host_free(void *p) xbt_free(elm); } +static XBT_INLINE void routing_asr_prop_free(void *p) +{ + xbt_dict_t elm = p; + xbt_dict_free(&elm); +} + +void sg_version(int *ver_major,int *ver_minor,int *ver_patch) { + *ver_major = SIMGRID_VERSION_MAJOR; + *ver_minor = SIMGRID_VERSION_MINOR; + *ver_patch = SIMGRID_VERSION_PATCH; +} + void surf_init(int *argc, char **argv) { XBT_DEBUG("Create all Libs"); @@ -376,12 +399,14 @@ void surf_init(int *argc, char **argv) as_router_lib = xbt_lib_new(); storage_lib = xbt_lib_new(); storage_type_lib = xbt_lib_new(); + watched_hosts_lib = xbt_dict_new(); - XBT_DEBUG("ADD ROUTING LEVEL"); + XBT_DEBUG("Add routing levels"); ROUTING_HOST_LEVEL = xbt_lib_add_level(host_lib,routing_asr_host_free); ROUTING_ASR_LEVEL = xbt_lib_add_level(as_router_lib,routing_asr_host_free); + ROUTING_PROP_ASR_LEVEL = xbt_lib_add_level(as_router_lib,routing_asr_prop_free); - XBT_DEBUG("ADD SURF LEVELS"); + XBT_DEBUG("Add SURF levels"); SURF_CPU_LEVEL = xbt_lib_add_level(host_lib,surf_resource_free); SURF_WKS_LEVEL = xbt_lib_add_level(host_lib,surf_resource_free); SURF_LINK_LEVEL = xbt_lib_add_level(link_lib,surf_resource_free); @@ -464,6 +489,8 @@ void surf_exit(void) xbt_lib_free(&storage_lib); xbt_lib_free(&storage_type_lib); + xbt_dict_free(&watched_hosts_lib); + tmgr_finalize(); surf_parse_lex_destroy(); surf_parse_free_callbacks(); @@ -570,8 +597,8 @@ double surf_solve(double max_date) } if (next_event_date == -1.0) { - XBT_DEBUG("no next TRACE event. Stop searching for it"); - break; + XBT_DEBUG("no next TRACE event. Stop searching for it"); + break; } if ((min != -1.0) && (next_event_date > NOW + min)) break; @@ -601,7 +628,7 @@ double surf_solve(double max_date) * This may cause an infinite loop if one cpu has a trace with periodicity = 0 and the other a trace with periodicity > 0. * The options are: all traces with same periodicity(0 or >0) or we need to change the way how the events are managed */ if (min == -1.0) { - XBT_DEBUG("No next event at all. Bail out now."); + XBT_DEBUG("No next event at all. Bail out now."); return -1.0; } @@ -689,3 +716,22 @@ void surf_set_nthreads(int nthreads) { surf_nthreads = nthreads; } + +void surf_watched_hosts(void) +{ + char *key; + void *host; + xbt_dict_cursor_t cursor; + + XBT_DEBUG("Check for host SURF_RESOURCE_ON on watched_hosts_lib"); + xbt_dict_foreach(watched_hosts_lib,cursor,key,host) + { + if(SIMIX_host_get_state(host) == SURF_RESOURCE_ON){ + XBT_INFO("Restart processes on host: %s",SIMIX_host_get_name(host)); + SIMIX_host_autorestart(host); + xbt_dict_remove(watched_hosts_lib,key); + } + else + XBT_DEBUG("See SURF_RESOURCE_OFF on host: %s",key); + } +}