Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix FatTreeZone with limiter links
authorBruno Donassolo <bruno.donassolo@inria.fr>
Tue, 27 Apr 2021 15:27:03 +0000 (17:27 +0200)
committerBruno Donassolo <bruno.donassolo@inria.fr>
Tue, 27 Apr 2021 15:45:44 +0000 (17:45 +0200)
Are we sure we want this "feature" in complex clusters?
As for Torus, no test using it.

Segfault when communicating with limiter links.
Routers inside the FatTreeZone don't have limiters, even when user sets
the limiter on the XML.

Code was adding nullptr to the list of links in this case, generating a
segfault in communicate function.

Example:
  <zone id="world" routing="Full">
    <cluster id="bob_cluster"
     prefix="node-" radical="0-15" suffix=".simgrid.org"
     speed="1Gf" bw="125MBps" lat="50us"
             topology="FAT_TREE" topo_parameters="2;4,4;1,2;1,2"
     loopback_bw="100MBps" loopback_lat="0" limiter_link="100MBps" />

src/kernel/routing/FatTreeZone.cpp

index c6c27ea..e68caae 100644 (file)
@@ -93,7 +93,7 @@ void FatTreeZone::get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArg
     if (latency)
       *latency += currentNode->parents[d]->up_link_->get_latency();
 
-    if (has_limiter())
+    if (currentNode->limiter_link_)
       into->link_list.push_back(currentNode->limiter_link_);
     currentNode = currentNode->parents[d]->up_node_;
   }
@@ -109,7 +109,7 @@ void FatTreeZone::get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArg
         if (latency)
           *latency += currentNode->children[i]->down_link_->get_latency();
         currentNode = currentNode->children[i]->down_node_;
-        if (has_limiter())
+        if (currentNode->limiter_link_)
           into->link_list.push_back(currentNode->limiter_link_);
         XBT_DEBUG("%d(%u,%u) is accessible through %d(%u,%u)", destination->id, destination->level,
                   destination->position, currentNode->id, currentNode->level, currentNode->position);