X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/558cfc9fc06c8d1a7206b5995d3736cc11319529..28200591a8ba30e8b362400419b03bc94205198e:/src/surf/sg_platf.cpp diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 3adc2e1aeb..9dfdc53525 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -73,8 +73,7 @@ void sg_platf_exit(void) { /** @brief Add an "host" to the current AS */ void sg_platf_new_host(sg_platf_host_cbarg_t host) { - xbt_assert(! sg_host_by_name(host->id), - "Refusing to create a second host named '%s'.", host->id); + xbt_assert(! sg_host_by_name(host->id), "Refusing to create a second host named '%s'.", host->id); simgrid::surf::AsImpl* current_routing = routing_get_current(); if (current_routing->hierarchy_ == simgrid::surf::AsImpl::RoutingMode::unset) @@ -97,8 +96,7 @@ void sg_platf_new_host(sg_platf_host_cbarg_t host) unsigned int cursor; char*str; - if (!COORD_HOST_LEVEL) - xbt_die ("To use host coordinates, please add --cfg=network/coordinates:yes to your command line"); + xbt_assert(COORD_HOST_LEVEL, "To use host coordinates, please add --cfg=network/coordinates:yes to your command line"); /* Pre-parse the host coordinates -- FIXME factorize with routers by overloading the routing->parse_PU function*/ xbt_dynar_t ctn_str = xbt_str_split_str(host->coord, " "); xbt_dynar_t ctn = xbt_dynar_new(sizeof(double),NULL); @@ -112,12 +110,13 @@ void sg_platf_new_host(sg_platf_host_cbarg_t host) XBT_DEBUG("Having set host coordinates for '%s'",host->id); } - simgrid::surf::Cpu *cpu = surf_cpu_model_pm->createCpu( h, - host->speed_peak, - host->speed_trace, - host->core_amount, - host->state_trace); + host->speed_per_pstate, + host->core_amount); + if (host->state_trace) + cpu->setStateTrace(host->state_trace); + if (host->speed_trace) + cpu->setSpeedTrace(host->speed_trace); surf_host_model->createHost(host->id, netcard, cpu, host->properties)->attach(h); if (host->pstate != 0) @@ -141,7 +140,8 @@ void sg_platf_new_router(sg_platf_router_cbarg_t router) xbt_assert(nullptr == xbt_lib_get_or_null(as_router_lib, router->id, ROUTING_ASR_LEVEL), "Refusing to create a router named '%s': this name already describes a node.", router->id); - simgrid::surf::NetCard *netcard = new simgrid::surf::NetCardImpl(router->id, SURF_NETWORK_ELEMENT_ROUTER, current_routing); + simgrid::surf::NetCard *netcard = + new simgrid::surf::NetCardImpl(router->id, SURF_NETWORK_ELEMENT_ROUTER, current_routing); netcard->setId(current_routing->addComponent(netcard)); xbt_lib_set(as_router_lib, router->id, ROUTING_ASR_LEVEL, (void *) netcard); XBT_DEBUG("Having set name '%s' id '%d'", router->id, netcard->id()); @@ -171,6 +171,27 @@ void sg_platf_new_router(sg_platf_router_cbarg_t router) } void sg_platf_new_link(sg_platf_link_cbarg_t link){ + std::vector names; + + if (link->policy == SURF_LINK_FULLDUPLEX) { + names.push_back(bprintf("%s_UP", link->id)); + names.push_back(bprintf("%s_DOWN", link->id)); + } else { + names.push_back(xbt_strdup(link->id)); + } + for (auto link_name : names) { + Link *l = surf_network_model->createLink(link_name, link->bandwidth, link->latency, link->policy, link->properties); + + if (link->latency_trace) + l->setLatencyTrace(link->latency_trace); + if (link->bandwidth_trace) + l->setBandwidthTrace(link->bandwidth_trace); + if (link->state_trace) + l->setStateTrace(link->state_trace); + + xbt_free(link_name); + } + simgrid::surf::on_link(link); } @@ -270,7 +291,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,21 +301,22 @@ 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=\"\""); } - host.speed_peak = xbt_dynar_new(sizeof(double), NULL); - xbt_dynar_push(host.speed_peak,&cluster->speed); + host.speed_per_pstate = xbt_dynar_new(sizeof(double), NULL); + xbt_dynar_push(host.speed_per_pstate,&cluster->speed); host.pstate = 0; //host.power_peak = cluster->power; host.core_amount = cluster->core_amount; host.coord = ""; sg_platf_new_host(&host); - xbt_dynar_free(&host.speed_peak); + xbt_dynar_free(&host.speed_per_pstate); XBT_DEBUG(""); XBT_DEBUG("", link_id, @@ -470,10 +493,10 @@ void sg_platf_new_cabinet(sg_platf_cabinet_cbarg_t cabinet) 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); + host.speed_per_pstate = xbt_dynar_new(sizeof(double), NULL); + xbt_dynar_push(host.speed_per_pstate,&cabinet->speed); sg_platf_new_host(&host); - xbt_dynar_free(&host.speed_peak); + xbt_dynar_free(&host.speed_per_pstate); sg_platf_new_link(&link); char* link_up = bprintf("%s_UP",link_id); @@ -720,15 +743,15 @@ void sg_platf_new_peer(sg_platf_peer_cbarg_t peer) memset(&host, 0, sizeof(host)); host.id = host_id; - host.speed_peak = xbt_dynar_new(sizeof(double), NULL); - xbt_dynar_push(host.speed_peak,&peer->speed); + host.speed_per_pstate = xbt_dynar_new(sizeof(double), NULL); + xbt_dynar_push(host.speed_per_pstate,&peer->speed); host.pstate = 0; //host.power_peak = peer->power; host.speed_trace = peer->availability_trace; host.state_trace = peer->state_trace; host.core_amount = 1; sg_platf_new_host(&host); - xbt_dynar_free(&host.speed_peak); + xbt_dynar_free(&host.speed_per_pstate); s_sg_platf_link_cbarg_t link = SG_PLATF_LINK_INITIALIZER; memset(&link, 0, sizeof(link)); @@ -945,7 +968,7 @@ void sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS) void sg_platf_new_AS_end() { xbt_assert(current_routing, "Cannot seal the current AS: none under construction"); - current_routing->Seal(); + current_routing->seal(); current_routing = static_cast(current_routing->father()); if (TRACE_is_enabled())