SimGrid  3.21
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>

Inherited by simgrid::kernel::routing::ClusterZone, simgrid::kernel::routing::EmptyZone, and simgrid::kernel::routing::RoutedZone.

Public Types

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

Public Member Functions

s4u::NetZoneget_iface ()
 
simgrid::s4u::Hostcreate_host (const char *name, std::vector< double > *speed_per_pstate, int core_count, std::map< std::string, std::string > *props)
 Make an host within that NetZone. More...
 
virtual void add_bypass_route (NetPoint *src, NetPoint *dst, NetPoint *gw_src, NetPoint *gw_dst, std::vector< resource::LinkImpl *> &link_list, bool symmetrical)
 Creates a new route in this NetZone. More...
 
virtual void seal ()
 Seal your netzone once you're done adding content, and before routing stuff through it. More...
 
virtual int add_component (kernel::routing::NetPoint *elm)
 
virtual void add_route (kernel::routing::NetPoint *src, kernel::routing::NetPoint *dst, kernel::routing::NetPoint *gw_src, kernel::routing::NetPoint *gw_dst, std::vector< kernel::resource::LinkImpl *> &link_list, bool symmetrical)
 
unsigned int get_table_size ()
 
std::vector< kernel::routing::NetPoint * > get_vertices ()
 
NetZoneImplget_father ()
 
std::vector< NetZoneImpl * > * get_children ()
 
const std::string & get_name () const
 Retrieves the name of that netzone as a C++ string. More...
 
const char * get_cname () const
 Retrieves the name of that netzone as a C string. More...
 
std::vector< s4u::Host * > get_all_hosts ()
 
int get_host_count ()
 
virtual void get_graph (xbt_graph_t graph, std::map< std::string, xbt_node_t > *nodes, std::map< std::string, xbt_edge_t > *edges)=0
 

Static Public Member Functions

static void get_global_route (routing::NetPoint *src, routing::NetPoint *dst, std::vector< resource::LinkImpl *> &links, double *latency)
 

Public Attributes

resource::NetworkModel * network_model_
 
RoutingMode hierarchy_ = RoutingMode::unset
 

Protected Member Functions

 NetZoneImpl (NetZoneImpl *father, std::string name, resource::NetworkModel *network_model)
 
virtual ~NetZoneImpl ()
 
virtual void get_local_route (NetPoint *src, NetPoint *dst, RouteCreationArgs *into, double *latency)=0
 Probe the routing path between two points that are local to the called NetZone. More...
 
bool get_bypass_route (routing::NetPoint *src, routing::NetPoint *dst, std::vector< resource::LinkImpl *> &links, double *latency)
 retrieves the list of all routes of size 1 (of type src x dst x Link) More...
 

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 ( NetZoneImpl father,
std::string  name,
resource::NetworkModel *  network_model 
)
explicitprotected

◆ ~NetZoneImpl()

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

Member Function Documentation

◆ get_iface()

s4u::NetZone* simgrid::kernel::routing::NetZoneImpl::get_iface ( )
inline

◆ create_host()

simgrid::s4u::Host* simgrid::kernel::routing::NetZoneImpl::create_host ( const char *  name,
std::vector< double > *  speed_per_pstate,
int  core_count,
std::map< std::string, std::string > *  props 
)

Make an host within that NetZone.

◆ add_bypass_route()

virtual void simgrid::kernel::routing::NetZoneImpl::add_bypass_route ( NetPoint src,
NetPoint dst,
NetPoint gw_src,
NetPoint gw_dst,
std::vector< resource::LinkImpl *> &  link_list,
bool  symmetrical 
)
virtual

Creates a new route in this NetZone.

◆ seal()

virtual void simgrid::kernel::routing::NetZoneImpl::seal ( )
virtual

◆ add_component()

virtual int simgrid::kernel::routing::NetZoneImpl::add_component ( kernel::routing::NetPoint elm)
virtual

◆ add_route()

virtual void simgrid::kernel::routing::NetZoneImpl::add_route ( kernel::routing::NetPoint src,
kernel::routing::NetPoint dst,
kernel::routing::NetPoint gw_src,
kernel::routing::NetPoint gw_dst,
std::vector< kernel::resource::LinkImpl *> &  link_list,
bool  symmetrical 
)
virtual

◆ get_local_route()

virtual void simgrid::kernel::routing::NetZoneImpl::get_local_route ( NetPoint src,
NetPoint dst,
RouteCreationArgs *  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::VivaldiZone, simgrid::kernel::routing::DijkstraZone, simgrid::kernel::routing::FloydZone, simgrid::kernel::routing::EmptyZone, simgrid::kernel::routing::FullZone, and simgrid::kernel::routing::TorusZone.

◆ get_bypass_route()

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

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

◆ get_table_size()

unsigned int simgrid::kernel::routing::NetZoneImpl::get_table_size ( )
inline

◆ get_vertices()

std::vector<kernel::routing::NetPoint*> simgrid::kernel::routing::NetZoneImpl::get_vertices ( )
inline

◆ get_father()

NetZoneImpl* simgrid::kernel::routing::NetZoneImpl::get_father ( )

◆ get_children()

std::vector<NetZoneImpl*>* simgrid::kernel::routing::NetZoneImpl::get_children ( )

◆ get_name()

const std::string& simgrid::kernel::routing::NetZoneImpl::get_name ( ) const
inline

Retrieves the name of that netzone as a C++ string.

◆ get_cname()

const char* simgrid::kernel::routing::NetZoneImpl::get_cname ( ) const

Retrieves the name of that netzone as a C string.

◆ get_all_hosts()

std::vector<s4u::Host*> simgrid::kernel::routing::NetZoneImpl::get_all_hosts ( )

◆ get_host_count()

int simgrid::kernel::routing::NetZoneImpl::get_host_count ( )

◆ get_global_route()

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

◆ get_graph()

virtual void simgrid::kernel::routing::NetZoneImpl::get_graph ( xbt_graph_t  graph,
std::map< std::string, xbt_node_t > *  nodes,
std::map< std::string, xbt_edge_t > *  edges 
)
pure virtual

Member Data Documentation

◆ network_model_

resource::NetworkModel* simgrid::kernel::routing::NetZoneImpl::network_model_

◆ hierarchy_

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

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