X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6e8a5aeab4a376b73cdcbe116d2437af319cafc3..1957cbeaedc9d28cea7839684d82ac8454cc8bef:/src/surf/sg_platf.cpp diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 48013068ba..354ba1c6c6 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -35,8 +35,7 @@ XBT_PRIVATE std::vector known_storages; namespace simgrid { namespace surf { -simgrid::xbt::signal on_cluster; - +simgrid::xbt::signal on_cluster; } } @@ -77,7 +76,7 @@ void sg_platf_new_host(sg_platf_host_cbarg_t args) { std::map props; if (args->properties) { - for (auto elm : *args->properties) + for (auto const& elm : *args->properties) props.insert({elm.first, elm.second}); delete args->properties; } @@ -100,18 +99,18 @@ void sg_platf_new_host(sg_platf_host_cbarg_t args) } /** @brief Add a "router" to the network element list */ -simgrid::kernel::routing::NetPoint* sg_platf_new_router(const char* name, const char* coords) +simgrid::kernel::routing::NetPoint* sg_platf_new_router(std::string name, const char* coords) { simgrid::kernel::routing::NetZoneImpl* current_routing = routing_get_current(); if (current_routing->hierarchy_ == simgrid::kernel::routing::NetZoneImpl::RoutingMode::unset) current_routing->hierarchy_ = simgrid::kernel::routing::NetZoneImpl::RoutingMode::base; xbt_assert(nullptr == simgrid::s4u::Engine::getInstance()->getNetpointByNameOrNull(name), - "Refusing to create a router named '%s': this name already describes a node.", name); + "Refusing to create a router named '%s': this name already describes a node.", name.c_str()); simgrid::kernel::routing::NetPoint* netpoint = new simgrid::kernel::routing::NetPoint(name, simgrid::kernel::routing::NetPoint::Type::Router, current_routing); - XBT_DEBUG("Router '%s' has the id %u", name, netpoint->id()); + XBT_DEBUG("Router '%s' has the id %u", name.c_str(), netpoint->id()); if (coords && strcmp(coords, "")) new simgrid::kernel::routing::vivaldi::Coords(netpoint, coords); @@ -130,14 +129,13 @@ void sg_platf_new_link(LinkCreationArgs* link) } else { names.push_back(link->id); } - for (auto link_name : names) { + for (auto const& link_name : names) { simgrid::surf::LinkImpl* l = - surf_network_model->createLink(link_name.c_str(), link->bandwidth, link->latency, link->policy); + surf_network_model->createLink(link_name, link->bandwidth, link->latency, link->policy); if (link->properties) { - for (auto elm : *link->properties) + for (auto const& elm : *link->properties) l->setProperty(elm.first, elm.second); - delete link->properties; } if (link->latency_trace) @@ -147,9 +145,10 @@ void sg_platf_new_link(LinkCreationArgs* link) if (link->state_trace) l->setStateTrace(link->state_trace); } + delete link->properties; } -void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) +void sg_platf_new_cluster(ClusterCreationArgs* cluster) { using simgrid::kernel::routing::ClusterZone; using simgrid::kernel::routing::DragonflyZone; @@ -181,15 +180,15 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) if(cluster->loopback_bw > 0 || cluster->loopback_lat > 0){ current_as->linkCountPerNode_++; - current_as->hasLoopback_ = 1; + current_as->hasLoopback_ = true; } if(cluster->limiter_link > 0){ current_as->linkCountPerNode_++; - current_as->hasLimiter_ = 1; + current_as->hasLimiter_ = true; } - for (int i : *cluster->radicals) { + for (int const& i : *cluster->radicals) { std::string host_id = std::string(cluster->prefix) + std::to_string(i) + cluster->suffix; std::string link_id = std::string(cluster->id) + "_link_" + std::to_string(i); @@ -201,7 +200,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) if ((cluster->properties != nullptr) && (not cluster->properties->empty())) { host.properties = new std::map; - for (auto elm : *cluster->properties) + for (auto const& elm : *cluster->properties) host.properties->insert({elm.first, elm.second}); } @@ -237,7 +236,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) linkDown = simgrid::surf::LinkImpl::byName(tmp_link); auto as_cluster = static_cast(current_as); - as_cluster->privateLinks_.insert({rankId * as_cluster->linkCountPerNode_, {linkUp, linkDown}}); + as_cluster->privateLinks_.insert({as_cluster->nodePosition(rankId), {linkUp, linkDown}}); } //add a limiter link (shared link to account for maximal bandwidth of the node) @@ -255,16 +254,14 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) sg_platf_new_link(&link); linkDown = simgrid::surf::LinkImpl::byName(tmp_link); linkUp = linkDown; - current_as->privateLinks_.insert( - {rankId * current_as->linkCountPerNode_ + current_as->hasLoopback_, {linkUp, linkDown}}); + current_as->privateLinks_.insert({current_as->nodePositionWithLoopback(rankId), {linkUp, linkDown}}); } //call the cluster function that adds the others links if (cluster->topology == SURF_CLUSTER_FAT_TREE) { static_cast(current_as)->addProcessingNode(i); } else { - current_as->create_links_for_node(cluster, i, rankId, - rankId*current_as->linkCountPerNode_ + current_as->hasLoopback_ + current_as->hasLimiter_ ); + current_as->create_links_for_node(cluster, i, rankId, current_as->nodePositionWithLimiter(rankId)); } rankId++; } @@ -272,10 +269,10 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) // Add a router. XBT_DEBUG(" "); - XBT_DEBUG("", cluster->router_id); - if (not cluster->router_id || not strcmp(cluster->router_id, "")) { + XBT_DEBUG("", cluster->router_id.c_str()); + if (cluster->router_id.empty()) { std::string newid = std::string(cluster->prefix) + cluster->id + "_router" + cluster->suffix; - current_as->router_ = sg_platf_new_router(newid.c_str(), NULL); + current_as->router_ = sg_platf_new_router(newid, NULL); } else { current_as->router_ = sg_platf_new_router(cluster->router_id, NULL); } @@ -316,7 +313,7 @@ void routing_cluster_add_backbone(simgrid::surf::LinkImpl* bb) void sg_platf_new_cabinet(CabinetCreationArgs* cabinet) { - for (int radical : *cabinet->radicals) { + for (int const& radical : *cabinet->radicals) { std::string hostname = cabinet->prefix + std::to_string(radical) + cabinet->suffix; s_sg_platf_host_cbarg_t host; memset(&host, 0, sizeof(host)); @@ -333,13 +330,10 @@ void sg_platf_new_cabinet(CabinetCreationArgs* cabinet) link.id = "link_" + hostname; sg_platf_new_link(&link); - s_sg_platf_host_link_cbarg_t host_link; - memset(&host_link, 0, sizeof(host_link)); - std::string tmp_link_up = std::string("link_") + hostname + "_UP"; - std::string tmp_link_down = std::string("link_") + hostname + "_DOWN"; - host_link.id = hostname.c_str(); - host_link.link_up = tmp_link_up.c_str(); - host_link.link_down = tmp_link_down.c_str(); + HostLinkCreationArgs host_link; + host_link.id = hostname; + host_link.link_up = std::string("link_") + hostname + "_UP"; + host_link.link_down = std::string("link_") + hostname + "_DOWN"; sg_platf_new_hostlink(&host_link); } delete cabinet->radicals; @@ -379,7 +373,7 @@ void sg_platf_new_storage(StorageCreationArgs* storage) auto s = surf_storage_model->createStorage(storage->id, stype->id, storage->content, storage->attach); if (storage->properties) { - for (auto elm : *storage->properties) + for (auto const& elm : *storage->properties) s->setProperty(elm.first, elm.second); delete storage->properties; } @@ -429,7 +423,7 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) // The requested host does not exist. Do a nice message to the user std::string msg = std::string("Cannot create process '") + process->function + "': host '" + process->host + "' does not exist\nExisting hosts: '"; - for (auto kv : simgrid::s4u::host_list) { + for (auto const& kv : simgrid::s4u::host_list) { simgrid::s4u::Host* host = kv.second; msg += host->getName(); msg += "', '"; @@ -450,6 +444,7 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) std::vector args(process->argv, process->argv + process->argc); std::function code = factory(std::move(args)); + std::shared_ptr> properties(process->properties); smx_process_arg_t arg = nullptr; @@ -459,7 +454,7 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) arg->data = nullptr; arg->host = host; arg->kill_time = kill_time; - arg->properties = process->properties; + arg->properties = properties; host->extension()->boot_processes.push_back(arg); @@ -471,12 +466,12 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) arg->data = nullptr; arg->host = host; arg->kill_time = kill_time; - arg->properties = process->properties; + arg->properties = properties; XBT_DEBUG("Process %s@%s will be started at time %f", arg->name.c_str(), arg->host->getCname(), start_time); 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); + arg->host, arg->properties.get(), nullptr); if (arg->kill_time >= 0) simcall_process_set_kill_time(actor, arg->kill_time); if (auto_restart) @@ -487,7 +482,7 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) XBT_DEBUG("Starting Process %s(%s) right now", arg->name.c_str(), host->getCname()); smx_actor_t actor = simix_global->create_process_function(arg->name.c_str(), std::move(code), nullptr, host, - arg->properties, nullptr); + arg->properties.get(), nullptr); /* The actor creation will fail if the host is currently dead, but that's fine */ if (actor != nullptr) { @@ -497,7 +492,6 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) SIMIX_process_auto_restart_set(actor, auto_restart); } } - current_property_set = nullptr; } void sg_platf_new_peer(PeerCreationArgs* peer) @@ -664,23 +658,23 @@ void sg_platf_new_Zone_seal() } /** @brief Add a link connecting an host to the rest of its AS (which must be cluster or vivaldi) */ -void sg_platf_new_hostlink(sg_platf_host_link_cbarg_t hostlink) +void sg_platf_new_hostlink(HostLinkCreationArgs* hostlink) { - simgrid::kernel::routing::NetPoint* netpoint = sg_host_by_name(hostlink->id)->pimpl_netpoint; - xbt_assert(netpoint, "Host '%s' not found!", hostlink->id); + simgrid::kernel::routing::NetPoint* netpoint = sg_host_by_name(hostlink->id.c_str())->pimpl_netpoint; + xbt_assert(netpoint, "Host '%s' not found!", hostlink->id.c_str()); xbt_assert(dynamic_cast(current_routing), "Only hosts from Cluster and Vivaldi ASes can get an host_link."); simgrid::surf::LinkImpl* linkUp = simgrid::surf::LinkImpl::byName(hostlink->link_up); simgrid::surf::LinkImpl* linkDown = simgrid::surf::LinkImpl::byName(hostlink->link_down); - xbt_assert(linkUp, "Link '%s' not found!", hostlink->link_up); - xbt_assert(linkDown, "Link '%s' not found!", hostlink->link_down); + xbt_assert(linkUp, "Link '%s' not found!", hostlink->link_up.c_str()); + xbt_assert(linkDown, "Link '%s' not found!", hostlink->link_down.c_str()); auto as_cluster = static_cast(current_routing); if (as_cluster->privateLinks_.find(netpoint->id()) != as_cluster->privateLinks_.end()) - surf_parse_error(std::string("Host_link for '") + hostlink->id + "' is already defined!"); + surf_parse_error(std::string("Host_link for '") + hostlink->id.c_str() + "' is already defined!"); XBT_DEBUG("Push Host_link for host '%s' to position %u", netpoint->cname(), netpoint->id()); as_cluster->privateLinks_.insert({netpoint->id(), {linkUp, linkDown}});