SimGrid  3.14.159
Versatile Simulation of Distributed Systems
simgrid::kernel::routing::ClusterZone Class Reference

Detailed Description

NetZone where each component is connected through a private link.

Cluster zones have a collection of private links that interconnect their components. This is particularly well adapted to model a collection of elements interconnected through a hub or a through a switch.

In a cluster, each component are given from 1 to 3 private links at creation:

  • Private link (mandatory): link connecting the component to the cluster core.
  • Limiter (optional): Additional link on the way from the component to the cluster core
  • Loopback (optional): non-shared link connecting the component to itself.

Then, the cluster core may be constituted of a specific backbone link or not; A backbone can easily represent a network connected in a Hub. If you want to model a switch, either don't use a backbone at all, or use a fatpipe link (non-shared link) to represent the switch backplane.

*   (outer world)
*         |
*   ======+====== <--backbone
*   |   |   |   |
* l0| l1| l2| l4| <-- private links + limiters
*   |   |   |   |
*   X   X   X   X <-- cluster's hosts
* 
*   (outer world)
*         |       <-- NO backbone
*        /|\
*       / | \     <-- private links + limiters     __________
*      /  |  \
*  l0 / l1|   \l2
*    /    |    \
* host0 host1 host2
* 

So, a communication from an host A to an host B goes through the following links (if they exist): limiter(A)_UP, private(A)_UP, backbone, private(B)_DOWN, limiter(B)_DOWN. link_UP and link_DOWN usually share the exact same characteristics, but their performance are not shared, to model the fact that TCP links are full-duplex.

A cluster is connected to the outer world through a router that is connected directly to the cluster's backbone (no private link).

A communication from an host A to the outer world goes through the following links: limiter(A)_UP, private(A)_UP, backbone (because the private router is directly connected to the cluster core).

#include <ClusterZone.hpp>

Inheritance diagram for simgrid::kernel::routing::ClusterZone:
simgrid::kernel::routing::NetZoneImpl simgrid::s4u::NetZone simgrid::kernel::routing::DragonflyZone simgrid::kernel::routing::FatTreeZone simgrid::kernel::routing::TorusZone simgrid::kernel::routing::VivaldiZone

Public Member Functions

 ClusterZone (NetZone *father, const char *name)
 
void getLocalRoute (NetCard *src, NetCard *dst, sg_platf_route_cbarg_t into, double *latency) override
 Probe the routing path between two points that are local to the called NetZone. More...
 
void getGraph (xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) override
 
virtual void create_links_for_node (sg_platf_cluster_cbarg_t cluster, int id, int rank, int position)
 
virtual void parse_specific_arguments (sg_platf_cluster_cbarg_t cluster)
 
- Public Member Functions inherited from simgrid::kernel::routing::NetZoneImpl
simgrid::s4u::HostcreateHost (const char *name, std::vector< double > *speedPerPstate, int coreAmount)
 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...
 
- 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 ()
 
xbt_dict_t children ()
 
xbt_dynar_t hosts ()
 
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::NetCard *elm)
 
virtual void addRoute (sg_platf_route_cbarg_t route)
 

Public Attributes

std::unordered_map< unsigned int, std::pair< Link *, Link * > > privateLinks_
 
Linkbackbone_ = nullptr
 
voidloopback_ = nullptr
 
NetCardrouter_ = nullptr
 
bool hasLimiter_ = false
 
bool hasLoopback_ = false
 
unsigned int linkCountPerNode_ = 1
 
- Public Attributes inherited from simgrid::kernel::routing::NetZoneImpl
RoutingMode hierarchy_ = RoutingMode::unset
 

Additional Inherited Members

- Public Types inherited from simgrid::kernel::routing::NetZoneImpl
enum  RoutingMode { RoutingMode::unset = 0, RoutingMode::base, RoutingMode::recursive }
 
- Static Public Member Functions inherited from simgrid::kernel::routing::NetZoneImpl
static void getGlobalRoute (routing::NetCard *src, routing::NetCard *dst, std::vector< surf::Link *> *links, double *latency)
 
- Static Public Attributes inherited from simgrid::s4u::NetZone
static simgrid::xbt::signal< void(bool symmetrical, kernel::routing::NetCard *src, kernel::routing::NetCard *dst, kernel::routing::NetCard *gw_src, kernel::routing::NetCard *gw_dst, std::vector< Link * > *link_list)> onRouteCreation
 
- Protected Member Functions inherited from simgrid::kernel::routing::NetZoneImpl
 NetZoneImpl (NetZone *father, const char *name)
 
virtual ~NetZoneImpl ()
 
bool getBypassRoute (routing::NetCard *src, routing::NetCard *dst, std::vector< surf::Link *> *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 ()
 
- Protected Attributes inherited from simgrid::s4u::NetZone
std::vector< kernel::routing::NetCard * > vertices_
 

Constructor & Destructor Documentation

◆ ClusterZone()

simgrid::kernel::routing::ClusterZone::ClusterZone ( NetZone father,
const char *  name 
)
explicit

Member Function Documentation

◆ getLocalRoute()

void simgrid::kernel::routing::ClusterZone::getLocalRoute ( NetCard src,
NetCard dst,
sg_platf_route_cbarg_t  into,
double *  latency 
)
overridevirtual

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)

Implements simgrid::kernel::routing::NetZoneImpl.

Reimplemented in simgrid::kernel::routing::FatTreeZone, simgrid::kernel::routing::DragonflyZone, simgrid::kernel::routing::VivaldiZone, and simgrid::kernel::routing::TorusZone.

◆ getGraph()

void simgrid::kernel::routing::ClusterZone::getGraph ( xbt_graph_t  graph,
xbt_dict_t  nodes,
xbt_dict_t  edges 
)
overridevirtual

◆ create_links_for_node()

void simgrid::kernel::routing::ClusterZone::create_links_for_node ( sg_platf_cluster_cbarg_t  cluster,
int  id,
int  rank,
int  position 
)
virtual

◆ parse_specific_arguments()

virtual void simgrid::kernel::routing::ClusterZone::parse_specific_arguments ( sg_platf_cluster_cbarg_t  cluster)
inlinevirtual

Member Data Documentation

◆ privateLinks_

std::unordered_map<unsigned int, std::pair<Link*, Link*> > simgrid::kernel::routing::ClusterZone::privateLinks_

◆ backbone_

Link* simgrid::kernel::routing::ClusterZone::backbone_ = nullptr

◆ loopback_

void* simgrid::kernel::routing::ClusterZone::loopback_ = nullptr

◆ router_

NetCard* simgrid::kernel::routing::ClusterZone::router_ = nullptr

◆ hasLimiter_

bool simgrid::kernel::routing::ClusterZone::hasLimiter_ = false

◆ hasLoopback_

bool simgrid::kernel::routing::ClusterZone::hasLoopback_ = false

◆ linkCountPerNode_

unsigned int simgrid::kernel::routing::ClusterZone::linkCountPerNode_ = 1

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