X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/07c12189c716ea527ddcf8f8b55983213dead2bf..0a95c78251f3ecbf1dfcb3ebe7904e44acf1beef:/src/surf/sg_platf.cpp diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 3dff876900..94fb072984 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -1,10 +1,9 @@ -/* Copyright (c) 2006-2014. The SimGrid Team. - * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "simgrid/s4u/engine.hpp" + #include "src/kernel/EngineImpl.hpp" #include "src/simix/smx_private.h" @@ -34,7 +33,6 @@ namespace simgrid { namespace surf { simgrid::xbt::signal on_cluster; -simgrid::xbt::signal on_postparse; } } @@ -55,7 +53,7 @@ void sg_platf_init() { /** Module management function: frees all internal data structures */ void sg_platf_exit() { simgrid::surf::on_cluster.disconnect_all_slots(); - simgrid::surf::on_postparse.disconnect_all_slots(); + simgrid::s4u::onPlatformCreated.disconnect_all_slots(); /* make sure that we will reinit the models while loading the platf once reinited */ surf_parse_models_setup_already_called = 0; @@ -102,19 +100,19 @@ simgrid::kernel::routing::NetPoint* sg_platf_new_router(const char* name, const 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::instance()->netcardByNameOrNull(name), + xbt_assert(nullptr == simgrid::s4u::Engine::instance()->netpointByNameOrNull(name), "Refusing to create a router named '%s': this name already describes a node.", name); - simgrid::kernel::routing::NetPoint* netcard = + 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 %d", name, netcard->id()); + XBT_DEBUG("Router '%s' has the id %d", name, netpoint->id()); if (coords && strcmp(coords, "")) - new simgrid::kernel::routing::vivaldi::Coords(netcard, coords); + new simgrid::kernel::routing::vivaldi::Coords(netpoint, coords); sg_instr_new_router(name); - return netcard; + return netpoint; } void sg_platf_new_link(sg_platf_link_cbarg_t link){ @@ -127,7 +125,8 @@ void sg_platf_new_link(sg_platf_link_cbarg_t link){ 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); + simgrid::surf::LinkImpl* l = + surf_network_model->createLink(link_name, link->bandwidth, link->latency, link->policy); if (link->properties) { xbt_dict_cursor_t cursor = nullptr; @@ -225,8 +224,8 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) // other columns are to store one or more link for the node //add a loopback link - Link* linkUp = nullptr; - Link* linkDown = nullptr; + simgrid::surf::LinkImpl* linkUp = nullptr; + simgrid::surf::LinkImpl* linkDown = nullptr; if(cluster->loopback_bw!=0 || cluster->loopback_lat!=0){ char *tmp_link = bprintf("%s_loopback", link_id); XBT_DEBUG("", tmp_link, cluster->loopback_bw); @@ -237,8 +236,8 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) link.latency = cluster->loopback_lat; link.policy = SURF_LINK_FATPIPE; sg_platf_new_link(&link); - linkUp = Link::byName(tmp_link); - linkDown = Link::byName(tmp_link); + linkUp = simgrid::surf::LinkImpl::byName(tmp_link); + linkDown = simgrid::surf::LinkImpl::byName(tmp_link); free(tmp_link); auto as_cluster = static_cast(current_as); @@ -258,7 +257,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) link.latency = 0; link.policy = SURF_LINK_SHARED; sg_platf_new_link(&link); - linkUp = linkDown = Link::byName(tmp_link); + linkUp = linkDown = simgrid::surf::LinkImpl::byName(tmp_link); free(tmp_link); current_as->privateLinks_.insert( {rankId * current_as->linkCountPerNode_ + current_as->hasLoopback_, {linkUp, linkDown}}); @@ -300,7 +299,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster) XBT_DEBUG("", link.id, cluster->bb_bw, cluster->bb_lat); sg_platf_new_link(&link); - routing_cluster_add_backbone(Link::byName(link.id)); + routing_cluster_add_backbone(simgrid::surf::LinkImpl::byName(link.id)); free((char*)link.id); } @@ -310,7 +309,8 @@ 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::Link* bb) { +void routing_cluster_add_backbone(simgrid::surf::LinkImpl* bb) +{ simgrid::kernel::routing::ClusterZone* cluster = dynamic_cast(current_routing); @@ -507,7 +507,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,30 +520,25 @@ 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]() { + smx_actor_t actor = simix_global->create_process_function(arg->name.c_str(), std::move(arg->code), arg->data, + arg->host, arg->properties, arg->auto_restart, nullptr); + if (arg->kill_time >= 0) + simcall_process_set_kill_time(actor, arg->kill_time); 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); + process_created = simix_global->create_process_function(arg->name.c_str(), std::move(code), nullptr, host, + current_property_set, auto_restart, 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) { + if (!process_created) return; - } + + if (arg->kill_time >= 0) + simcall_process_set_kill_time(process_created, arg->kill_time); } current_property_set = nullptr; } @@ -569,7 +564,7 @@ void sg_platf_new_peer(sg_platf_peer_cbarg_t peer) void sg_platf_begin() { /* Do nothing: just for symmetry of user code */ } void sg_platf_end() { - simgrid::surf::on_postparse(); + simgrid::s4u::onPlatformCreated(); } /* Pick the right models for CPU, net and host, and call their model_init_preparse */ @@ -720,24 +715,24 @@ void sg_platf_new_AS_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) { - simgrid::kernel::routing::NetPoint* netcard = sg_host_by_name(hostlink->id)->pimpl_netpoint; - xbt_assert(netcard, "Host '%s' not found!", hostlink->id); + simgrid::kernel::routing::NetPoint* netpoint = sg_host_by_name(hostlink->id)->pimpl_netpoint; + xbt_assert(netpoint, "Host '%s' not found!", hostlink->id); xbt_assert(dynamic_cast(current_routing), "Only hosts from Cluster and Vivaldi ASes can get an host_link."); - simgrid::surf::Link* linkUp = Link::byName(hostlink->link_up); - simgrid::surf::Link* linkDown = Link::byName(hostlink->link_down); + 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); auto as_cluster = static_cast(current_routing); - if (as_cluster->privateLinks_.find(netcard->id()) != as_cluster->privateLinks_.end()) + if (as_cluster->privateLinks_.find(netpoint->id()) != as_cluster->privateLinks_.end()) surf_parse_error("Host_link for '%s' is already defined!",hostlink->id); - XBT_DEBUG("Push Host_link for host '%s' to position %d", netcard->cname(), netcard->id()); - as_cluster->privateLinks_.insert({netcard->id(), {linkUp, linkDown}}); + XBT_DEBUG("Push Host_link for host '%s' to position %d", netpoint->cname(), netpoint->id()); + as_cluster->privateLinks_.insert({netpoint->id(), {linkUp, linkDown}}); } void sg_platf_new_trace(sg_platf_trace_cbarg_t trace)