X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/804de3039e8b344955309a3adb6d9425f7f4c378..45e20894800af8da592dab3f80288af23add6512:/src/surf/surfxml_parse.c diff --git a/src/surf/surfxml_parse.c b/src/surf/surfxml_parse.c index a0b98683cc..4135c78116 100644 --- a/src/surf/surfxml_parse.c +++ b/src/surf/surfxml_parse.c @@ -12,8 +12,6 @@ #include "surf/surfxml_parse_private.h" #include "surf/surf_private.h" -#define NO_IMPLICIT_ROUTES - XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_parse, surf, "Logging specific to the SURF parsing module"); #undef CLEANUP @@ -31,11 +29,11 @@ xbt_dict_t trace_connect_list_latency = NULL; /* This buffer is used to store the original buffer before substituing it by out own buffer. Usefull for the foreach tag */ static xbt_dynar_t surfxml_bufferstack_stack = NULL; -static int surfxml_bufferstack_size = 2048; +int surfxml_bufferstack_size = 2048; static char *old_buff = NULL; static void surf_parse_error(char *msg); -static void push_surfxml_bufferstack(int new) +void surfxml_bufferstack_push(int new) { if (!new) old_buff = surfxml_bufferstack; @@ -45,7 +43,7 @@ static void push_surfxml_bufferstack(int new) } } -static void pop_surfxml_bufferstack(int new) +void surfxml_bufferstack_pop(int new) { if (!new) surfxml_bufferstack = old_buff; @@ -58,9 +56,7 @@ static void pop_surfxml_bufferstack(int new) /* Stores the set name reffered to by the foreach tag */ static char *foreach_set_name; static xbt_dynar_t main_STag_surfxml_host_cb_list = NULL; -static xbt_dynar_t main_ETag_surfxml_host_cb_list = NULL; static xbt_dynar_t main_STag_surfxml_link_cb_list = NULL; -static xbt_dynar_t main_ETag_surfxml_link_cb_list = NULL; /* make sure these symbols are defined as strong ones in this file so that the linked can resolve them */ xbt_dynar_t STag_surfxml_platform_cb_list = NULL; @@ -125,7 +121,6 @@ static void parse_foreach(void); static void parse_sets(void); static void parse_route_multi_set_endpoints(void); static void parse_route_multi_set_route(void); -static void parse_cluster(void); static void parse_trace_init(void); static void parse_trace_finalize(void); static void parse_trace_c_connect(void); @@ -365,7 +360,7 @@ void ETag_surfxml_set(void) void STag_surfxml_foreach(void) { /* Save the current buffer */ - push_surfxml_bufferstack(0); + surfxml_bufferstack_push(0); surfxml_call_cb_functions(STag_surfxml_foreach_cb_list); } @@ -375,18 +370,11 @@ void ETag_surfxml_foreach(void) /* free the temporary dynar and restore original */ xbt_dynar_free(&STag_surfxml_host_cb_list); - xbt_dynar_free(&ETag_surfxml_host_cb_list); - STag_surfxml_host_cb_list = main_STag_surfxml_host_cb_list; - ETag_surfxml_host_cb_list = main_ETag_surfxml_host_cb_list; /* free the temporary dynar and restore original */ xbt_dynar_free(&STag_surfxml_link_cb_list); - xbt_dynar_free(&ETag_surfxml_link_cb_list); - STag_surfxml_link_cb_list = main_STag_surfxml_link_cb_list; - ETag_surfxml_link_cb_list = main_ETag_surfxml_link_cb_list; - } void STag_surfxml_route_c_multi(void) @@ -529,7 +517,6 @@ static XBT_INLINE void surfxml_call_cb_functions(xbt_dynar_t cb_list) unsigned int iterator; void_f_void_t fun; xbt_dynar_foreach(cb_list, iterator, fun) { - DEBUG2("call %p %p", fun, *fun); (*fun) (); } } @@ -570,7 +557,6 @@ static void init_data(void) surfxml_add_callback(ETag_surfxml_route_c_multi_cb_list, &parse_route_multi_set_route); surfxml_add_callback(STag_surfxml_foreach_cb_list, &parse_foreach); - surfxml_add_callback(STag_surfxml_cluster_cb_list, &parse_cluster); surfxml_add_callback(STag_surfxml_trace_cb_list, &parse_trace_init); surfxml_add_callback(ETag_surfxml_trace_cb_list, &parse_trace_finalize); surfxml_add_callback(STag_surfxml_trace_c_connect_cb_list, @@ -630,7 +616,7 @@ void parse_platform_file(const char *file) surf_parse_close(); } -/* Functions to bypass route, host and link tags. Used by the foreach and route:multi tags */ +/* Functions to bypass route tag. Used by the route:multi tag */ static void parse_make_temporary_route(const char *src, const char *dst, int action) @@ -642,38 +628,6 @@ static void parse_make_temporary_route(const char *src, const char *dst, SURFXML_BUFFER_SET(route_dst, dst); } -static void parse_change_cpu_data(const char *hostName, - const char *surfxml_host_power, - const char *surfxml_host_availability, - const char *surfxml_host_availability_file, - const char *surfxml_host_state_file) -{ - int AX_ptr = 0; - - SURFXML_BUFFER_SET(host_id, hostName); - SURFXML_BUFFER_SET(host_power, surfxml_host_power /*hostPower */ ); - SURFXML_BUFFER_SET(host_availability, surfxml_host_availability); - SURFXML_BUFFER_SET(host_availability_file, surfxml_host_availability_file); - SURFXML_BUFFER_SET(host_state_file, surfxml_host_state_file); -} - -static void parse_change_link_data(const char *linkName, - const char *surfxml_link_bandwidth, - const char *surfxml_link_bandwidth_file, - const char *surfxml_link_latency, - const char *surfxml_link_latency_file, - const char *surfxml_link_state_file) -{ - int AX_ptr = 0; - - SURFXML_BUFFER_SET(link_id, linkName); - SURFXML_BUFFER_SET(link_bandwidth, surfxml_link_bandwidth); - SURFXML_BUFFER_SET(link_bandwidth_file, surfxml_link_bandwidth_file); - SURFXML_BUFFER_SET(link_latency, surfxml_link_latency); - SURFXML_BUFFER_SET(link_latency_file, surfxml_link_latency_file); - SURFXML_BUFFER_SET(link_state_file, surfxml_link_state_file); -} - /* Functions for the sets and foreach tags */ static void parse_sets(void) @@ -738,27 +692,19 @@ static void parse_sets(void) free(id); } -static const char *surfxml_host_power; -static const char *surfxml_host_availability; -static const char *surfxml_host_availability_file; -static const char *surfxml_host_state_file; - -static void parse_host_foreach(void) -{ - surfxml_host_power = A_surfxml_host_power; - surfxml_host_availability = A_surfxml_host_availability; - surfxml_host_availability_file = A_surfxml_host_availability_file; - surfxml_host_state_file = A_surfxml_host_state_file; -} - -static void finalize_host_foreach(void) -{ +static void parse_host_foreach(void){ xbt_dynar_t names = NULL; unsigned int cpt = 0; char *name; xbt_dict_cursor_t cursor = NULL; char *key, *data; + const char *surfxml_host_power = A_surfxml_host_power; + const char *surfxml_host_availability = A_surfxml_host_availability; + const char *surfxml_host_availability_file = A_surfxml_host_availability_file; + const char *surfxml_host_state_file = A_surfxml_host_state_file; + + xbt_dict_t cluster_host_props = current_property_set; names = xbt_dict_get_or_null(set_list, foreach_set_name); @@ -773,10 +719,16 @@ static void finalize_host_foreach(void) /* foreach name in set call the main host callback */ xbt_dynar_foreach(names, cpt, name) { - push_surfxml_bufferstack(1); - parse_change_cpu_data(name, surfxml_host_power, surfxml_host_availability, - surfxml_host_availability_file, - surfxml_host_state_file); + int AX_ptr = 0; /* needed by the SURFXML_BUFFER_SET macro */ + + surfxml_bufferstack_push(1); + + SURFXML_BUFFER_SET(host_id, name); + SURFXML_BUFFER_SET(host_power, surfxml_host_power /*hostPower */ ); + SURFXML_BUFFER_SET(host_availability, surfxml_host_availability); + SURFXML_BUFFER_SET(host_availability_file, surfxml_host_availability_file); + SURFXML_BUFFER_SET(host_state_file, surfxml_host_state_file); + surfxml_call_cb_functions(main_STag_surfxml_host_cb_list); xbt_dict_foreach(cluster_host_props, cursor, key, data) { @@ -784,32 +736,23 @@ static void finalize_host_foreach(void) free); } - surfxml_call_cb_functions(main_ETag_surfxml_host_cb_list); - pop_surfxml_bufferstack(1); + /* Call the (unmodified) callbacks of , if any */ + surfxml_call_cb_functions(ETag_surfxml_host_cb_list); + surfxml_bufferstack_pop(1); } current_property_set = xbt_dict_new(); - pop_surfxml_bufferstack(0); + surfxml_bufferstack_pop(0); } -static const char *surfxml_link_bandwidth; -static const char *surfxml_link_bandwidth_file; -static const char *surfxml_link_latency; -static const char *surfxml_link_latency_file; -static const char *surfxml_link_state_file; +static void parse_link_foreach(void) { + const char *surfxml_link_bandwidth = A_surfxml_link_bandwidth; + const char *surfxml_link_bandwidth_file = A_surfxml_link_bandwidth_file; + const char *surfxml_link_latency = A_surfxml_link_latency; + const char *surfxml_link_latency_file = A_surfxml_link_latency_file; + const char *surfxml_link_state_file = A_surfxml_link_state_file; -static void parse_link_foreach(void) -{ - surfxml_link_bandwidth = A_surfxml_link_bandwidth; - surfxml_link_bandwidth_file = A_surfxml_link_bandwidth_file; - surfxml_link_latency = A_surfxml_link_latency; - surfxml_link_latency_file = A_surfxml_link_latency_file; - surfxml_link_state_file = A_surfxml_link_state_file; -} - -static void finalize_link_foreach(void) -{ xbt_dynar_t names = NULL; unsigned int cpt = 0; char *name; @@ -829,11 +772,17 @@ static void finalize_link_foreach(void) /* for each name in set call the main link callback */ xbt_dynar_foreach(names, cpt, name) { - push_surfxml_bufferstack(1); - parse_change_link_data(name, surfxml_link_bandwidth, - surfxml_link_bandwidth_file, surfxml_link_latency, - surfxml_link_latency_file, - surfxml_link_state_file); + int AX_ptr = 0; /* needed by the SURFXML_BUFFER_SET */ + + surfxml_bufferstack_push(1); + + SURFXML_BUFFER_SET(link_id, name); + SURFXML_BUFFER_SET(link_bandwidth, surfxml_link_bandwidth); + SURFXML_BUFFER_SET(link_bandwidth_file, surfxml_link_bandwidth_file); + SURFXML_BUFFER_SET(link_latency, surfxml_link_latency); + SURFXML_BUFFER_SET(link_latency_file, surfxml_link_latency_file); + SURFXML_BUFFER_SET(link_state_file, surfxml_link_state_file); + surfxml_call_cb_functions(main_STag_surfxml_link_cb_list); xbt_dict_foreach(cluster_link_props, cursor, key, data) { @@ -841,13 +790,14 @@ static void finalize_link_foreach(void) free); } - surfxml_call_cb_functions(main_ETag_surfxml_link_cb_list); - pop_surfxml_bufferstack(1); + /* Call the (unmodified) callbacks of , if any */ + surfxml_call_cb_functions(ETag_surfxml_link_cb_list); + surfxml_bufferstack_pop(1); } current_property_set = xbt_dict_new(); - pop_surfxml_bufferstack(0); + surfxml_bufferstack_pop(0); free(foreach_set_name); foreach_set_name = NULL; } @@ -856,20 +806,14 @@ static void parse_foreach(void) { /* save the host & link callbacks */ main_STag_surfxml_host_cb_list = STag_surfxml_host_cb_list; - main_ETag_surfxml_host_cb_list = ETag_surfxml_host_cb_list; main_STag_surfxml_link_cb_list = STag_surfxml_link_cb_list; - main_ETag_surfxml_link_cb_list = ETag_surfxml_link_cb_list; - /* define host & link callbacks to be used only by the foreach tag */ + /* redefine host & link callbacks to be used only by the foreach tag */ STag_surfxml_host_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_host_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); STag_surfxml_link_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); - ETag_surfxml_link_cb_list = xbt_dynar_new(sizeof(void_f_void_t), NULL); surfxml_add_callback(STag_surfxml_host_cb_list, &parse_host_foreach); - surfxml_add_callback(ETag_surfxml_host_cb_list, &finalize_host_foreach); surfxml_add_callback(STag_surfxml_link_cb_list, &parse_link_foreach); - surfxml_add_callback(ETag_surfxml_link_cb_list, &finalize_link_foreach); /* get set name */ foreach_set_name = xbt_strdup(A_surfxml_foreach_set_id); @@ -987,7 +931,7 @@ static void add_multi_links(const char *src, const char *dst, unsigned int cpt; char *value, *val; - push_surfxml_bufferstack(1); + surfxml_bufferstack_push(1); parse_make_temporary_route(src_name, dst_name, route_action); surfxml_call_cb_functions(STag_surfxml_route_cb_list); @@ -1008,7 +952,7 @@ static void add_multi_links(const char *src, const char *dst, xbt_dynar_push(route_link_list, &val); } surfxml_call_cb_functions(ETag_surfxml_route_cb_list); - pop_surfxml_bufferstack(1); + surfxml_bufferstack_pop(1); } static void convert_route_multi_to_routes(void) @@ -1033,7 +977,7 @@ static void convert_route_multi_to_routes(void) set = surf_model_resource_set(surf_workstation_model); - push_surfxml_bufferstack(0); + surfxml_bufferstack_push(0); /* Get all routes in the exact order they were entered in the platform file */ xbt_dynar_foreach(route_multi_elements, cursor, key) { /* Get links for the route */ @@ -1099,111 +1043,14 @@ static void convert_route_multi_to_routes(void) } xbt_dynar_free(&keys); } - pop_surfxml_bufferstack(0); + surfxml_bufferstack_pop(0); } -/* Cluster tag functions */ - -static void parse_cluster(void) -{ - static int AX_ptr = 0; - - char *cluster_id = A_surfxml_cluster_id; - char *cluster_prefix = A_surfxml_cluster_prefix; - char *cluster_suffix = A_surfxml_cluster_suffix; - char *cluster_radical = A_surfxml_cluster_radical; - char *cluster_power = A_surfxml_cluster_power; -#if !defined NO_IMPLICIT_ROUTES - char *cluster_bw = A_surfxml_cluster_bw; - char *cluster_lat = A_surfxml_cluster_lat; -#endif - char *cluster_bb_bw = A_surfxml_cluster_bb_bw; - char *cluster_bb_lat = A_surfxml_cluster_bb_lat; - char *backbone_name; - - push_surfxml_bufferstack(1); - - /* Make set */ - SURFXML_BUFFER_SET(set_id, cluster_id); - SURFXML_BUFFER_SET(set_prefix, cluster_prefix); - SURFXML_BUFFER_SET(set_suffix, cluster_suffix); - SURFXML_BUFFER_SET(set_radical, cluster_radical); - - SURFXML_START_TAG(set); - SURFXML_END_TAG(set); - - /* Make foreach */ - SURFXML_BUFFER_SET(foreach_set_id, cluster_id); - - SURFXML_START_TAG(foreach); - - /* Make host for the foreach */ - parse_change_cpu_data("$1", cluster_power, "1.0", "", ""); - A_surfxml_host_state = A_surfxml_host_state_ON; - - SURFXML_START_TAG(host); - SURFXML_END_TAG(host); -#ifndef NO_IMPLICIT_ROUTES - /* Make link for the foreach */ - parse_change_link_data("$1", cluster_bw, "", cluster_lat, "", ""); - A_surfxml_link_state = A_surfxml_link_state_ON; - A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; - - SURFXML_START_TAG(link); - SURFXML_END_TAG(link); -#endif - SURFXML_END_TAG(foreach); - - /* Make backbone link */ - backbone_name = bprintf("%s_bb", cluster_id); - parse_change_link_data(backbone_name, cluster_bb_bw, "", cluster_bb_lat, "", - ""); - A_surfxml_link_state = A_surfxml_link_state_ON; - A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE; - - SURFXML_START_TAG(link); - SURFXML_END_TAG(link); -#ifndef NO_IMPLICIT_ROUTES - /* Make route multi with the outside world, i.e. cluster->$* */ - SURFXML_BUFFER_SET(route_c_multi_src, cluster_id); - SURFXML_BUFFER_SET(route_c_multi_dst, "$*"); - A_surfxml_route_c_multi_symmetric = A_surfxml_route_c_multi_symmetric_NO; - A_surfxml_route_c_multi_action = A_surfxml_route_c_multi_action_OVERRIDE; - - SURFXML_START_TAG(route_c_multi); - - SURFXML_BUFFER_SET(link_c_ctn_id, "$src"); - - SURFXML_START_TAG(link_c_ctn); - SURFXML_END_TAG(link_c_ctn); - - SURFXML_END_TAG(route_c_multi); - - /* Make route multi between cluster hosts, i.e. cluster->cluster */ - SURFXML_BUFFER_SET(route_c_multi_src, cluster_id); - SURFXML_BUFFER_SET(route_c_multi_dst, cluster_id); - A_surfxml_route_c_multi_action = A_surfxml_route_c_multi_action_POSTPEND; - A_surfxml_route_c_multi_symmetric = A_surfxml_route_c_multi_symmetric_NO; - - SURFXML_START_TAG(route_c_multi); - - SURFXML_BUFFER_SET(link_c_ctn_id, backbone_name); - - SURFXML_START_TAG(link_c_ctn); - SURFXML_END_TAG(link_c_ctn); - - SURFXML_END_TAG(route_c_multi); -#endif - - free(backbone_name); - - /* Restore buff */ - pop_surfxml_bufferstack(1); -} /* Trace management functions */ static double trace_periodicity = -1.0; +static double trace_timestep = -1.0; static char *trace_file = NULL; static char *trace_id; @@ -1212,6 +1059,7 @@ static void parse_trace_init(void) trace_id = strdup(A_surfxml_trace_id); trace_file = strdup(A_surfxml_trace_file); surf_parse_get_double(&trace_periodicity, A_surfxml_trace_periodicity); + surf_parse_get_double(&trace_timestep, A_surfxml_trace_timestep); } static void parse_trace_finalize(void) @@ -1225,7 +1073,7 @@ static void parse_trace_finalize(void) else trace = tmgr_trace_new_from_string(trace_id, surfxml_pcdata, - trace_periodicity); + trace_periodicity, trace_timestep); } xbt_dict_set(traces_set_list, trace_id, (void *) trace, NULL); }