X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/210da270d0339479db706757d8c836621bb138c9..786b8a177574a5523973881724dbebb103a73ed5:/src/surf/sg_platf.cpp diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index ac3ce92a35..bb4d2e8483 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -24,7 +24,7 @@ #include "src/kernel/routing/NetZoneImpl.hpp" #include "src/kernel/routing/TorusZone.hpp" #include "src/kernel/routing/VivaldiZone.hpp" - +#include XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_parse); XBT_PRIVATE xbt_dynar_t mount_list = nullptr; @@ -115,18 +115,19 @@ simgrid::kernel::routing::NetPoint* sg_platf_new_router(const char* name, const return netpoint; } -void sg_platf_new_link(sg_platf_link_cbarg_t link){ - std::vector names; +void sg_platf_new_link(LinkCreationArgs* 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)); + names.push_back(link->id+ "_UP"); + names.push_back(link->id+ "_DOWN"); } else { - names.push_back(xbt_strdup(link->id)); + names.push_back(link->id); } for (auto link_name : names) { simgrid::surf::LinkImpl* l = - surf_network_model->createLink(link_name, link->bandwidth, link->latency, link->policy); + surf_network_model->createLink(link_name.c_str(), link->bandwidth, link->latency, link->policy); if (link->properties) { xbt_dict_cursor_t cursor = nullptr; @@ -142,8 +143,6 @@ void sg_platf_new_link(sg_platf_link_cbarg_t link){ l->setBandwidthTrace(link->bandwidth_trace); if (link->state_trace) l->setStateTrace(link->state_trace); - - xbt_free(link_name); } } @@ -156,7 +155,6 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) int rankId=0; - s_sg_platf_link_cbarg_t link; // What an inventive way of initializing the AS that I have as ancestor :-( s_sg_platf_AS_cbarg_t AS; @@ -230,7 +228,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) char *tmp_link = bprintf("%s_loopback", link_id); XBT_DEBUG("", tmp_link, cluster->loopback_bw); - memset(&link, 0, sizeof(link)); + LinkCreationArgs link; link.id = tmp_link; link.bandwidth = cluster->loopback_bw; link.latency = cluster->loopback_lat; @@ -251,7 +249,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) char *tmp_link = bprintf("%s_limiter", link_id); XBT_DEBUG("", tmp_link, cluster->limiter_link); - memset(&link, 0, sizeof(link)); + LinkCreationArgs link; link.id = tmp_link; link.bandwidth = cluster->limiter_link; link.latency = 0; @@ -290,17 +288,16 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) //Make the backbone if ((cluster->bb_bw != 0) || (cluster->bb_lat != 0)) { - memset(&link, 0, sizeof(link)); - link.id = bprintf("%s_backbone", cluster->id); + LinkCreationArgs link; + link.id = std::string(cluster->id)+ "_backbone"; link.bandwidth = cluster->bb_bw; link.latency = cluster->bb_lat; link.policy = cluster->bb_sharing_policy; - XBT_DEBUG("", link.id, cluster->bb_bw, cluster->bb_lat); + XBT_DEBUG("", link.id.c_str(), cluster->bb_bw, cluster->bb_lat); sg_platf_new_link(&link); - routing_cluster_add_backbone(simgrid::surf::LinkImpl::byName(link.id)); - free((char*)link.id); + routing_cluster_add_backbone(simgrid::surf::LinkImpl::byName(link.id.c_str())); } XBT_DEBUG(""); @@ -309,6 +306,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) simgrid::surf::on_cluster(cluster); delete cluster->radicals; } + void routing_cluster_add_backbone(simgrid::surf::LinkImpl* bb) { simgrid::kernel::routing::ClusterZone* cluster = @@ -324,34 +322,30 @@ void routing_cluster_add_backbone(simgrid::surf::LinkImpl* bb) void sg_platf_new_cabinet(sg_platf_cabinet_cbarg_t cabinet) { for (int radical : *cabinet->radicals) { - char *hostname = bprintf("%s%d%s", cabinet->prefix, radical, cabinet->suffix); + std::string hostname = std::string(cabinet->prefix) + std::to_string(radical) + std::string(cabinet->suffix); s_sg_platf_host_cbarg_t host; memset(&host, 0, sizeof(host)); host.pstate = 0; host.core_amount = 1; - host.id = hostname; + host.id = hostname.c_str(); host.speed_per_pstate.push_back(cabinet->speed); sg_platf_new_host(&host); - s_sg_platf_link_cbarg_t link; - memset(&link, 0, sizeof(link)); + LinkCreationArgs link; link.policy = SURF_LINK_FULLDUPLEX; link.latency = cabinet->lat; link.bandwidth = cabinet->bw; - link.id = bprintf("link_%s",hostname); + link.id = "link_" + hostname; sg_platf_new_link(&link); - free((char*)link.id); s_sg_platf_host_link_cbarg_t host_link; memset(&host_link, 0, sizeof(host_link)); - host_link.id = hostname; - host_link.link_up = bprintf("link_%s_UP",hostname); - host_link.link_down = bprintf("link_%s_DOWN",hostname); + host_link.id = hostname.c_str(); + host_link.link_up = bprintf("link_%s_UP",hostname.c_str()); + host_link.link_down = bprintf("link_%s_DOWN",hostname.c_str()); sg_platf_new_hostlink(&host_link); free((char*)host_link.link_up); free((char*)host_link.link_down); - - free(hostname); } delete cabinet->radicals; } @@ -497,7 +491,6 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) std::function code = factory(std::move(args)); smx_process_arg_t arg = nullptr; - smx_actor_t process_created = nullptr; arg = new simgrid::simix::ProcessArg(); arg->name = std::string(process->argv[0]); @@ -507,7 +500,7 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) arg->kill_time = kill_time; arg->properties = current_property_set; - sg_host_simix(host)->boot_processes.push_back(arg); + host->extension()->boot_processes.push_back(arg); if (start_time > SIMIX_get_clock()) { @@ -520,29 +513,27 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) arg->properties = current_property_set; XBT_DEBUG("Process %s@%s will be started at time %f", arg->name.c_str(), arg->host->cname(), start_time); - SIMIX_timer_set(start_time, [=]() { - simix_global->create_process_function( - arg->name.c_str(), - std::move(arg->code), - arg->data, - arg->host, - arg->kill_time, - arg->properties, - arg->auto_restart, - nullptr); + SIMIX_timer_set(start_time, [arg, auto_restart]() { + smx_actor_t actor = simix_global->create_process_function(arg->name.c_str(), std::move(arg->code), arg->data, + arg->host, arg->properties, nullptr); + if (arg->kill_time >= 0) + simcall_process_set_kill_time(actor, arg->kill_time); + if (auto_restart) + SIMIX_process_auto_restart_set(actor, auto_restart); delete arg; }); } else { // start_time <= SIMIX_get_clock() XBT_DEBUG("Starting Process %s(%s) right now", arg->name.c_str(), host->cname()); - process_created = simix_global->create_process_function( - arg->name.c_str(), std::move(code), nullptr, - host, kill_time, - current_property_set, auto_restart, nullptr); + smx_actor_t actor = simix_global->create_process_function(arg->name.c_str(), std::move(code), nullptr, host, + current_property_set, nullptr); - /* verify if process has been created (won't be the case if the host is currently dead, but that's fine) */ - if (!process_created) { - return; + /* The actor creation will fail if the host is currently dead, but that's fine */ + if (actor != nullptr) { + if (arg->kill_time >= 0) + simcall_process_set_kill_time(actor, arg->kill_time); + if (auto_restart) + SIMIX_process_auto_restart_set(actor, auto_restart); } } current_property_set = nullptr;