SimGrid  3.16
Versatile Simulation of Distributed Systems
simgrid::kernel::routing::NetZoneImpl Class Referenceabstract

Detailed Description

Private implementation of the Networking Zones.

A netzone is a network container, in charge of routing information between elements (hosts and sub-netzones) and to the nearby netzones. In SimGrid, there is a hierarchy of netzones, ie a tree with a unique root NetZone, that you can retrieve with simgrid::s4u::Engine::netRoot().

The purpose of the kernel::routing module is to retrieve the routing path between two points in a time- and space-efficient manner. This is done by NetZoneImpl::getGlobalRoute(), called when creating a communication to retrieve both the list of links that the create communication will use, and the summed latency that these links represent.

The network model could recompute the latency by itself from the list, but it would require an additional traversal of the link set. This operation being on the critical path of SimGrid, the routing computes the latency on the behalf of the network while constructing the link set.

Finding the path between two nodes is rather complex because we navigate a hierarchy of netzones, each of them being a full network. In addition, the routing can declare shortcuts (called bypasses), either within a NetZone at the route level or directly between NetZones. Also, each NetZone can use a differing routing algorithm, depending on its class. FullZone have a full matrix giving explicitly the path between any pair of their contained nodes, while DijkstraZone or FloydZone rely on a shortest path algorithm. VivaldiZone does not even have any link but only use only coordinate information to compute the latency.

So NetZoneImpl::getGlobalRoute builds the path recursively asking its specific information to each traversed NetZone with NetZoneImpl::getLocalRoute, that is redefined in each sub-class. The algorithm for that is explained in http://hal.inria.fr/hal-00650233/ (but for historical reasons, NetZones are called Autonomous Systems in this article).

#include <NetZoneImpl.hpp>

Inheritance diagram for simgrid::kernel::routing::NetZoneImpl:
simgrid::s4u::NetZone simgrid::kernel::routing::ClusterZone simgrid::kernel::routing::EmptyZone simgrid::kernel::routing::RoutedZone simgrid::kernel::routing::DragonflyZone simgrid::kernel::routing::FatTreeZone simgrid::kernel::routing::TorusZone simgrid::kernel::routing::VivaldiZone simgrid::kernel::routing::DijkstraZone simgrid::kernel::routing::FloydZone simgrid::kernel::routing::FullZone

Public Types

enum  RoutingMode { RoutingMode::unset = 0, RoutingMode::base, RoutingMode::recursive }
 

Public Member Functions

simgrid::s4u::HostcreateHost (const char *name, std::vector< double > *speedPerPstate, int coreAmount, std::unordered_map< std::string, std::string > *props)
 Make an host within that NetZone. More...
 
void addBypassRoute (sg_platf_route_cbarg_t e_route) override
 Creates a new route in this NetZone. More...
 
virtual void getGraph (xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges)=0
 
- Public Member Functions inherited from simgrid::s4u::NetZone
virtual void seal ()
 Seal your netzone once you're done adding content, and before routing stuff through it. More...
 
char * name ()
 
NetZonefather ()
 
std::vector< NetZone * > * children ()
 
void hosts (std::vector< s4u::Host *> *whereto)
 
std::unordered_map< std::string, std::string > * properties ()
 Get the properties assigned to a host. More...
 
const char * property (const char *key)
 Retrieve the property value (or nullptr if not set) More...
 
void setProperty (const char *key, const char *value)
 
virtual int addComponent (kernel::routing::NetPoint *elm)
 
virtual void addRoute (sg_platf_route_cbarg_t route)
 

Static Public Member Functions

static void getGlobalRoute (routing::NetPoint *src, routing::NetPoint *dst, std::vector< surf::LinkImpl *> *links, double *latency)
 

Public Attributes

RoutingMode hierarchy_ = RoutingMode::unset
 

Protected Member Functions

 NetZoneImpl (NetZone *father, const char *name)
 
virtual ~NetZoneImpl ()
 
virtual void getLocalRoute (NetPoint *src, NetPoint *dst, sg_platf_route_cbarg_t into, double *latency)=0
 Probe the routing path between two points that are local to the called NetZone. More...
 
bool getBypassRoute (routing::NetPoint *src, routing::NetPoint *dst, std::vector< surf::LinkImpl *> *links, double *latency)
 retrieves the list of all routes of size 1 (of type src x dst x Link) More...
 
- Protected Member Functions inherited from simgrid::s4u::NetZone
 NetZone (NetZone *father, const char *name)
 
virtual ~NetZone ()
 

Additional Inherited Members

- Static Public Attributes inherited from simgrid::s4u::NetZone
static simgrid::xbt::signal< void(bool symmetrical, kernel::routing::NetPoint *src, kernel::routing::NetPoint *dst, kernel::routing::NetPoint *gw_src, kernel::routing::NetPoint *gw_dst, std::vector< surf::LinkImpl * > *link_list)> onRouteCreation
 
static simgrid::xbt::signal< void(NetZone &)> onCreation
 
static simgrid::xbt::signal< void(NetZone &)> onSeal
 
- Protected Attributes inherited from simgrid::s4u::NetZone
std::vector< kernel::routing::NetPoint * > vertices_
 

Member Enumeration Documentation

◆ RoutingMode

Enumerator
unset 

Undefined type.

base 

Base case: use simple link lists for routing.

recursive 

Recursive case: also return gateway information.

Constructor & Destructor Documentation

◆ NetZoneImpl()

simgrid::kernel::routing::NetZoneImpl::NetZoneImpl ( NetZone father,
const char *  name 
)
explicitprotected

◆ ~NetZoneImpl()

simgrid::kernel::routing::NetZoneImpl::~NetZoneImpl ( )
protectedvirtual

Member Function Documentation

◆ createHost()

simgrid::s4u::Host * simgrid::kernel::routing::NetZoneImpl::createHost ( const char *  name,
std::vector< double > *  speedPerPstate,
int  coreAmount,
std::unordered_map< std::string, std::string > *  props 
)

Make an host within that NetZone.

◆ addBypassRoute()

void simgrid::kernel::routing::NetZoneImpl::addBypassRoute ( sg_platf_route_cbarg_t  e_route)
overridevirtual

Creates a new route in this NetZone.

Implements simgrid::s4u::NetZone.

◆ getLocalRoute()

virtual void simgrid::kernel::routing::NetZoneImpl::getLocalRoute ( NetPoint src,
NetPoint dst,
sg_platf_route_cbarg_t  into,
double *  latency 
)
protectedpure virtual

Probe the routing path between two points that are local to the called NetZone.

Parameters
srcwhere from
dstwhere to
intoContainer into which the traversed links and gateway informations should be pushed
latencyAccumulator in which the latencies should be added (caller must set it to 0)

Implemented in simgrid::kernel::routing::FatTreeZone, simgrid::kernel::routing::ClusterZone, simgrid::kernel::routing::DragonflyZone, simgrid::kernel::routing::DijkstraZone, simgrid::kernel::routing::VivaldiZone, simgrid::kernel::routing::FloydZone, simgrid::kernel::routing::FullZone, simgrid::kernel::routing::EmptyZone, and simgrid::kernel::routing::TorusZone.

◆ getBypassRoute()

bool simgrid::kernel::routing::NetZoneImpl::getBypassRoute ( routing::NetPoint src,
routing::NetPoint dst,
std::vector< surf::LinkImpl *> *  links,
double *  latency 
)
protected

retrieves the list of all routes of size 1 (of type src x dst x Link)

◆ getGlobalRoute()

void simgrid::kernel::routing::NetZoneImpl::getGlobalRoute ( routing::NetPoint src,
routing::NetPoint dst,
std::vector< surf::LinkImpl *> *  links,
double *  latency 
)
static

◆ getGraph()

virtual void simgrid::kernel::routing::NetZoneImpl::getGraph ( xbt_graph_t  graph,
xbt_dict_t  nodes,
xbt_dict_t  edges 
)
pure virtual

Member Data Documentation

◆ hierarchy_

RoutingMode simgrid::kernel::routing::NetZoneImpl::hierarchy_ = RoutingMode::unset

The documentation for this class was generated from the following files: