X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fe6bf06966aa6183e31705b167ff36d77b49d0ed..02b7b97c6140acd91203e555f3ee999f7abf353c:/src/surf/surf_routing.c diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 9c7b5fb8b5..349b8cf2a0 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -186,11 +186,9 @@ static void parse_E_host(void) /* * \brief Add a host to the network element list from XML */ -static void parse_S_host_XML(void) +static void parse_S_host_XML(surf_parsing_host_arg_t h) { -// XBT_INFO("parse_S_host_XML"); -// XBT_INFO("'%s' '%s'",struct_host->V_host_id, struct_host->V_host_coord); - parse_S_host(struct_host->V_host_id, struct_host->V_host_coord); + parse_S_host(h->V_host_id, h->V_host_coord); } static void parse_E_host_XML(void) { @@ -489,15 +487,6 @@ void routing_AS_init(const char *AS_id, const char *wanted_routing_type) current_routing = new_routing; } -/* - * Detect the routing model type of the routing component from XML platforms - */ -static void parse_S_AS(void) -{ - routing_AS_init(A_surfxml_AS_id, A_surfxml_AS_routing); -} - - /** * \brief Finish the creation of a new routing component * @@ -526,14 +515,6 @@ void routing_AS_end(const char *AS_id) } } -/* - * \brief Finish the creation of a new routing component from XML - */ -static void parse_E_AS(void) -{ - routing_AS_end(A_surfxml_AS_id); -} - /* Aux Business methods */ /** @@ -972,7 +953,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ current_routing = NULL; /* parse generic elements */ - surfxml_add_callback(STag_surfxml_host_cb_list, &parse_S_host_XML); + surf_parse_host_add_cb(parse_S_host_XML); surfxml_add_callback(ETag_surfxml_host_cb_list, &parse_E_host_XML); surfxml_add_callback(STag_surfxml_router_cb_list, &parse_S_router_XML); @@ -993,9 +974,6 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ surfxml_add_callback(ETag_surfxml_bypassRoute_cb_list, &parse_E_bypassRoute_store_route); - surfxml_add_callback(STag_surfxml_AS_cb_list, &parse_S_AS); - surfxml_add_callback(ETag_surfxml_AS_cb_list, &parse_E_AS); - surfxml_add_callback(STag_surfxml_cluster_cb_list, &routing_parse_Scluster); @@ -1504,6 +1482,8 @@ static void routing_parse_Econfig(void) static void parse_create_host_link(int i) { char *host_id, *link_id = NULL; + s_surf_parsing_host_arg_t host; + memset(&host,0,sizeof(host)); host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, i, struct_cluster->V_cluster_suffix); link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, i); @@ -1511,14 +1491,13 @@ static void parse_create_host_link(int i) A_surfxml_host_state = A_surfxml_host_state_ON; XBT_DEBUG("", host_id, struct_cluster->S_cluster_power); - struct_host = xbt_new0(s_surf_parsing_host_arg_t, 1); - struct_host->V_host_id = xbt_strdup(host_id); + host.V_host_id = xbt_strdup(host_id); if(strcmp(struct_cluster->V_cluster_availability_file,"")){ xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free); char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file); xbt_str_varsubst(tmp_availability_file,patterns); XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file); - struct_host->V_host_power_trace = tmgr_trace_new(tmp_availability_file); + host.V_host_power_trace = tmgr_trace_new(tmp_availability_file); xbt_free(tmp_availability_file); } else @@ -1529,7 +1508,7 @@ static void parse_create_host_link(int i) char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file); xbt_str_varsubst(tmp_state_file,patterns); XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file); - struct_host->V_host_state_trace = tmgr_trace_new(tmp_state_file); + host.V_host_state_trace = tmgr_trace_new(tmp_state_file); xbt_free(tmp_state_file); } else @@ -1537,12 +1516,12 @@ static void parse_create_host_link(int i) XBT_DEBUG("\tstate_file=\"\""); } - struct_host->V_host_power_peak = struct_cluster->S_cluster_power; - struct_host->V_host_power_scale = 1.0; - struct_host->V_host_core = struct_cluster->S_cluster_core; - struct_host->V_host_state_initial = SURF_RESOURCE_ON; - struct_host->V_host_coord = ""; - STag_surfxml_host_cluster(); + host.V_host_power_peak = struct_cluster->S_cluster_power; + host.V_host_power_scale = 1.0; + host.V_host_core = struct_cluster->S_cluster_core; + host.V_host_state_initial = SURF_RESOURCE_ON; + host.V_host_coord = ""; + surf_parse_host(&host); XBT_DEBUG(""); A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; @@ -1572,7 +1551,7 @@ static void parse_create_host_link(int i) else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX) struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX; } - STag_surfxml_link_cluster(); + surf_parse_link(); ETag_surfxml_host(); ETag_surfxml_link(); @@ -1604,6 +1583,8 @@ void routing_parse_Scluster(void) static int AX_ptr = 0; char *host_id, *groups, *link_id = NULL; + s_surf_parsing_host_arg_t host; + if( strcmp(struct_cluster->V_cluster_availability_file,"") || strcmp(struct_cluster->V_cluster_state_file,"") ) { @@ -1633,20 +1614,167 @@ void routing_parse_Scluster(void) //Make all hosts radical_elements = xbt_str_split(struct_cluster->V_cluster_radical, ","); xbt_dynar_foreach(radical_elements, iter, groups) { + memset(&host,0,sizeof(host)); + radical_ends = xbt_str_split(groups, "-"); switch (xbt_dynar_length(radical_ends)) { case 1: surf_parse_get_int(&start, xbt_dynar_get_as(radical_ends, 0, char *)); - parse_create_host_link(start); + host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, start, struct_cluster->V_cluster_suffix); + link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, start); + + XBT_DEBUG("", host_id, struct_cluster->S_cluster_power); + host.V_host_id = host_id; + if(strcmp(struct_cluster->V_cluster_availability_file,"")){ + xbt_dict_set(patterns, "radical", bprintf("%d", start), xbt_free); + char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file); + xbt_str_varsubst(tmp_availability_file,patterns); + XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file); + host.V_host_power_trace = tmgr_trace_new(tmp_availability_file); + xbt_free(tmp_availability_file); + } + else + { + XBT_DEBUG("\tavailability_file=\"\""); + } + if(strcmp(struct_cluster->V_cluster_state_file,"")){ + char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file); + xbt_str_varsubst(tmp_state_file,patterns); + XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file); + host.V_host_state_trace = tmgr_trace_new(tmp_state_file); + xbt_free(tmp_state_file); + } + else + { + XBT_DEBUG("\tstate_file=\"\""); + } + + host.V_host_power_peak = struct_cluster->S_cluster_power; + host.V_host_power_scale = 1.0; + host.V_host_core = struct_cluster->S_cluster_core; + host.V_host_state_initial = SURF_RESOURCE_ON; + host.V_host_coord = ""; + surf_parse_host(&host); + XBT_DEBUG(""); + + A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; + if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;} + if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} + + XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat); + + struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1); + struct_lnk->V_link_id = link_id; + struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bw; + struct_lnk->V_link_latency = struct_cluster->S_cluster_lat; + struct_lnk->V_link_bandwidth_file = NULL; + struct_lnk->V_link_latency_file = NULL; + struct_lnk->V_link_state_file = NULL; + struct_lnk->V_link_state = SURF_RESOURCE_ON; + struct_lnk->V_link_sharing_policy = A_surfxml_link_sharing_policy; + + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED) + struct_lnk->V_policy_initial_link = SURF_LINK_SHARED; + else + { + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FATPIPE) + struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE; + else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX) + struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX; + } + surf_parse_link(); + + xbt_dict_set(cluster_host_link,host_id,strdup(link_id),free); +// XBT_INFO("key '%s' Value '%s'",host_id,link_id); + ETag_surfxml_host(); + ETag_surfxml_link(); + break; case 2: - surf_parse_get_int(&start, xbt_dynar_get_as(radical_ends, 0, char *)); - surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *)); - for (i = start; i <= end; i++) { - parse_create_host_link(i); + + surf_parse_get_int(&start, + xbt_dynar_get_as(radical_ends, 0, char *)); + surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *)); + for (i = start; i <= end; i++) { + host_id = bprintf("%s%d%s", struct_cluster->V_cluster_prefix, i, struct_cluster->V_cluster_suffix); + link_id = bprintf("%s_link_%d", struct_cluster->V_cluster_id, i); + + A_surfxml_host_state = A_surfxml_host_state_ON; + + XBT_DEBUG("", host_id, struct_cluster->S_cluster_power); + host.V_host_id = host_id; + if(strcmp(struct_cluster->V_cluster_availability_file,"")){ + xbt_dict_set(patterns, "radical", bprintf("%d", i), xbt_free); + char* tmp_availability_file = xbt_strdup(struct_cluster->V_cluster_availability_file); + xbt_str_varsubst(tmp_availability_file,patterns); + XBT_DEBUG("\tavailability_file=\"%s\"",tmp_availability_file); + host.V_host_power_trace = tmgr_trace_new(tmp_availability_file); + xbt_free(tmp_availability_file); } - break; + else + { + XBT_DEBUG("\tavailability_file=\"\""); + } + if(strcmp(struct_cluster->V_cluster_state_file,"")){ + char *tmp_state_file = xbt_strdup(struct_cluster->V_cluster_state_file); + xbt_str_varsubst(tmp_state_file,patterns); + XBT_DEBUG("\tstate_file=\"%s\"",tmp_state_file); + host.V_host_state_trace = tmgr_trace_new(tmp_state_file); + xbt_free(tmp_state_file); + } + else + { + XBT_DEBUG("\tstate_file=\"\""); + } + + host.V_host_power_peak = struct_cluster->S_cluster_power; + host.V_host_power_scale = 1.0; + host.V_host_core = struct_cluster->S_cluster_core; + host.V_host_state_initial = SURF_RESOURCE_ON; + host.V_host_coord = ""; + surf_parse_host(&host); + XBT_DEBUG(""); + + A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_SHARED; + if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FULLDUPLEX) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FULLDUPLEX;} + if(struct_cluster->V_cluster_sharing_policy == A_surfxml_cluster_sharing_policy_FATPIPE) + {A_surfxml_link_sharing_policy = A_surfxml_link_sharing_policy_FATPIPE;} + + XBT_DEBUG("", link_id,struct_cluster->S_cluster_bw, struct_cluster->S_cluster_lat); + + struct_lnk = xbt_new0(s_surf_parsing_link_arg_t, 1); + struct_lnk->V_link_id = link_id; + struct_lnk->V_link_bandwidth = struct_cluster->S_cluster_bw; + struct_lnk->V_link_latency = struct_cluster->S_cluster_lat; + struct_lnk->V_link_bandwidth_file = NULL; + struct_lnk->V_link_latency_file = NULL; + struct_lnk->V_link_state_file = NULL; + struct_lnk->V_link_state = SURF_RESOURCE_ON; + struct_lnk->V_link_sharing_policy = A_surfxml_link_sharing_policy; + + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_SHARED) + struct_lnk->V_policy_initial_link = SURF_LINK_SHARED; + else + { + if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FATPIPE) + struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE; + else if (A_surfxml_link_sharing_policy == A_surfxml_link_sharing_policy_FULLDUPLEX) + struct_lnk->V_policy_initial_link = SURF_LINK_FULLDUPLEX; + } + surf_parse_link(); + + xbt_dict_set(cluster_host_link,host_id,strdup(link_id),free); +// XBT_INFO("key '%s' Value '%s'",host_id,link_id); + + ETag_surfxml_host(); + ETag_surfxml_link(); + + } + break; default: XBT_DEBUG("Malformed radical"); @@ -1689,7 +1817,7 @@ void routing_parse_Scluster(void) else struct_lnk->V_policy_initial_link = SURF_LINK_FATPIPE; - STag_surfxml_link_cluster(); + surf_parse_link(); ETag_surfxml_link(); surf_parsing_link_up_down_t info = xbt_new0(s_surf_parsing_link_up_down_t, 1);