$ java -classpath ${classpath:=.} app/tokenring/Main ${srcdir:=.}/../platforms/two_peers.xml '--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n'
> [ 0.000000] (0:maestro@) Using regular java threads.
> [ 0.000000] (0:maestro@) Number of hosts '2'
-> [ 0.000000] (1:0@peer_100030591) Host '0' send 'Token' to Host '1'
-> [ 0.637910] (2:1@peer_100036570) Host '1' received 'Token'
-> [ 0.637910] (2:1@peer_100036570) Host '1' send 'Token' to Host '0'
-> [ 1.275820] (1:0@peer_100030591) Host '0' received 'Token'
+> [ 0.000000] (1:0@100030591) Host '0' send 'Token' to Host '1'
+> [ 0.637910] (2:1@100036570) Host '1' received 'Token'
+> [ 0.637910] (2:1@100036570) Host '1' send 'Token' to Host '0'
+> [ 1.275820] (1:0@100030591) Host '0' received 'Token'
> [ 1.275820] (0:maestro@) MSG_main finished; Cleaning up the simulation...
> [ 1.275820] (0:maestro@) Simulation time 1.2758201322136908
{
}
+void AsVivaldi::setPeerLink(NetCard* netcard, double bw_in, double bw_out, double latency, const char* coord)
+{
+ xbt_assert(netcard->containingAS() == this, "Cannot add a peer link to a netcard that is not in this AS");
+
+ new simgrid::kernel::routing::vivaldi::Coords(netcard, coord);
+
+ s_surf_parsing_link_up_down_t info;
+ char* link_up = bprintf("link_%s_UP", netcard->cname());
+ char* link_down = bprintf("link_%s_DOWN", netcard->cname());
+ info.linkUp = surf_network_model->createLink(link_up, bw_out, latency, SURF_LINK_SHARED);
+ info.linkDown = surf_network_model->createLink(link_down, bw_in, latency, SURF_LINK_SHARED);
+ privateLinks_.insert({netcard->id(), info});
+
+ free(link_up);
+ free(link_down);
+}
+
void AsVivaldi::getLocalRoute(NetCard* src, NetCard* dst, sg_platf_route_cbarg_t route, double* lat)
{
XBT_DEBUG("vivaldi getLocalRoute from '%s'[%d] '%s'[%d]", src->cname(), src->id(), dst->cname(), dst->id());
}
/* Retrieve the private links */
- if (privateLinks_.size() > src->id()) {
+ if (privateLinks_.find(src->id()) != privateLinks_.end()) {
s_surf_parsing_link_up_down_t info = privateLinks_.at(src->id());
if (info.linkUp) {
route->link_list->push_back(info.linkUp);
*lat += info.linkUp->latency();
}
}
- if (privateLinks_.size() > dst->id()) {
+ if (privateLinks_.find(dst->id()) != privateLinks_.end()) {
s_surf_parsing_link_up_down_t info = privateLinks_.at(dst->id());
if (info.linkDown) {
route->link_list->push_back(info.linkDown);
void sg_platf_new_peer(sg_platf_peer_cbarg_t peer)
{
- using simgrid::kernel::routing::NetCard;
- using simgrid::kernel::routing::AsCluster;
-
- char *host_id = bprintf("peer_%s", peer->id);
- char *router_id = bprintf("router_%s", peer->id);
-
- XBT_DEBUG(" ");
-
- XBT_DEBUG("<AS id=\"%s\"\trouting=\"Cluster\">", peer->id);
- s_sg_platf_AS_cbarg_t AS;
- AS.id = peer->id;
- AS.routing = A_surfxml_AS_routing_Cluster;
- sg_platf_new_AS_begin(&AS);
- new simgrid::kernel::routing::vivaldi::Coords(current_routing->netcard_, peer->coord);
-
- XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\"/>", host_id, peer->speed);
- s_sg_platf_host_cbarg_t host;
- memset(&host, 0, sizeof(host));
- host.id = host_id;
-
- host.speed_per_pstate.push_back(peer->speed);
- host.pstate = 0;
- host.speed_trace = peer->availability_trace;
- host.state_trace = peer->state_trace;
- host.core_amount = 1;
- sg_platf_new_host(&host);
+ using simgrid::kernel::routing::AsVivaldi;
- s_sg_platf_link_cbarg_t link;
- memset(&link, 0, sizeof(link));
- link.policy = SURF_LINK_SHARED;
- link.latency = peer->lat;
-
- char* link_up = bprintf("link_%s_UP",peer->id);
- XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", 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("link_%s_DOWN",peer->id);
- XBT_DEBUG("<link\tid=\"%s\"\tbw=\"%f\"\tlat=\"%f\"/>", link_down, peer->bw_in, peer->lat);
- link.id = link_down;
- link.bandwidth = peer->bw_in;
- sg_platf_new_link(&link);
-
- XBT_DEBUG("<host_link\tid=\"%s\"\tup=\"%s\"\tdown=\"%s\" />", host_id,link_up,link_down);
- s_sg_platf_host_link_cbarg_t host_link;
- memset(&host_link, 0, sizeof(host_link));
- host_link.id = host_id;
- host_link.link_up = link_up;
- host_link.link_down = link_down;
- sg_platf_new_hostlink(&host_link);
- free(link_up);
- free(link_down);
-
- XBT_DEBUG("<router id=\"%s\"/>", router_id);
- s_sg_platf_router_cbarg_t router;
- memset(&router, 0, sizeof(router));
- router.id = router_id;
- router.coord = peer->coord;
- sg_platf_new_router(&router);
+ AsVivaldi* as = dynamic_cast<simgrid::kernel::routing::AsVivaldi*>(current_routing);
+ xbt_assert(as, "<peer> tag can only be used in Vivaldi ASes");
- XBT_DEBUG("</AS>");
- sg_platf_new_AS_seal();
- XBT_DEBUG(" ");
+ std::vector<double> speedPerPstate;
+ speedPerPstate.push_back(peer->speed);
+ simgrid::s4u::Host* host = as->createHost(peer->id, &speedPerPstate, 1);
+ as->setPeerLink(host->pimpl_netcard, peer->bw_in, peer->bw_out, peer->lat, peer->coord);
+ simgrid::s4u::Host::onCreation(*host);
- free(router_id);
- free(host_id);
+ /* Change from the defaults */
+ if (peer->state_trace)
+ host->pimpl_cpu->setStateTrace(peer->state_trace);
+ if (peer->availability_trace)
+ host->pimpl_cpu->setSpeedTrace(peer->availability_trace);
}
void sg_platf_begin() { /* Do nothing: just for symmetry of user code */ }