X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/27915da6b357d043681f745c4574699ff0db0146..25a83061ae2c4418c119fb6e47956793183f9c57:/src/surf/sg_platf.cpp diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 55010c7bba..11bbd1879e 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -270,7 +270,8 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) xbt_dict_set(patterns, "radical", bprintf("%d", i), NULL); char *avail_file = xbt_str_varsubst(cluster->availability_trace, patterns); XBT_DEBUG("\tavailability_file=\"%s\"", avail_file); - host.speed_trace = tmgr_trace_new_from_file(avail_file); + if (avail_file && avail_file[0]) + host.speed_trace = tmgr_trace_new_from_file(avail_file); xbt_free(avail_file); } else { XBT_DEBUG("\tavailability_file=\"\""); @@ -279,7 +280,8 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) if (cluster->state_trace && strcmp(cluster->state_trace, "")) { char *avail_file = xbt_str_varsubst(cluster->state_trace, patterns); XBT_DEBUG("\tstate_file=\"%s\"", avail_file); - host.state_trace = tmgr_trace_new_from_file(avail_file); + if (avail_file && avail_file[0]) + host.state_trace = tmgr_trace_new_from_file(avail_file); xbt_free(avail_file); } else { XBT_DEBUG("\tstate_file=\"\""); @@ -425,6 +427,75 @@ void routing_cluster_add_backbone(simgrid::surf::Link* bb) { XBT_DEBUG("Add a backbone to AS '%s'", current_routing->name()); } +void sg_platf_new_cabinet(sg_platf_cabinet_cbarg_t cabinet) +{ + int start, end, i; + char *groups , *host_id , *link_id = NULL; + unsigned int iter; + xbt_dynar_t radical_elements; + xbt_dynar_t radical_ends; + + //Make all hosts + radical_elements = xbt_str_split(cabinet->radical, ","); + xbt_dynar_foreach(radical_elements, iter, groups) { + + radical_ends = xbt_str_split(groups, "-"); + start = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 0, char *)); + + switch (xbt_dynar_length(radical_ends)) { + case 1: + end = start; + break; + case 2: + end = surf_parse_get_int(xbt_dynar_get_as(radical_ends, 1, char *)); + break; + default: + surf_parse_error("Malformed radical"); + break; + } + s_sg_platf_host_cbarg_t host = SG_PLATF_HOST_INITIALIZER; + memset(&host, 0, sizeof(host)); + host.pstate = 0; + host.core_amount = 1; + + s_sg_platf_link_cbarg_t link = SG_PLATF_LINK_INITIALIZER; + memset(&link, 0, sizeof(link)); + link.policy = SURF_LINK_FULLDUPLEX; + link.latency = cabinet->lat; + link.bandwidth = cabinet->bw; + + s_sg_platf_host_link_cbarg_t host_link = SG_PLATF_HOST_LINK_INITIALIZER; + memset(&host_link, 0, sizeof(host_link)); + + for (i = start; i <= end; i++) { + host_id = bprintf("%s%d%s",cabinet->prefix,i,cabinet->suffix); + link_id = bprintf("link_%s%d%s",cabinet->prefix,i,cabinet->suffix); + host.id = host_id; + link.id = link_id; + host.speed_peak = xbt_dynar_new(sizeof(double), NULL); + xbt_dynar_push(host.speed_peak,&cabinet->speed); + sg_platf_new_host(&host); + xbt_dynar_free(&host.speed_peak); + sg_platf_new_link(&link); + + char* link_up = bprintf("%s_UP",link_id); + char* link_down = bprintf("%s_DOWN",link_id); + host_link.id = host_id; + host_link.link_up = link_up; + host_link.link_down = link_down; + sg_platf_new_hostlink(&host_link); + + free(host_id); + free(link_id); + free(link_up); + free(link_down); + } + + xbt_dynar_free(&radical_ends); + } + xbt_dynar_free(&radical_elements); +} + void sg_platf_new_storage(sg_platf_storage_cbarg_t storage) { xbt_assert(!xbt_lib_get_or_null(storage_lib, storage->id,ROUTING_STORAGE_LEVEL), @@ -667,15 +738,13 @@ void sg_platf_new_peer(sg_platf_peer_cbarg_t peer) link.latency = peer->lat; char* link_up = bprintf("%s_UP",link_id); - XBT_DEBUG("", link_up, - peer->bw_out, peer->lat); + XBT_DEBUG("", link_up, peer->bw_out, peer->lat); link.id = link_up; link.bandwidth = peer->bw_out; sg_platf_new_link(&link); char* link_down = bprintf("%s_DOWN",link_id); - XBT_DEBUG("", link_down, - peer->bw_in, peer->lat); + XBT_DEBUG("", link_down, peer->bw_in, peer->lat); link.id = link_down; link.bandwidth = peer->bw_in; sg_platf_new_link(&link);