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

Inherits simgrid::kernel::routing::NetZoneImpl.

Inherited by simgrid::kernel::routing::DragonflyZone, simgrid::kernel::routing::FatTreeZone, simgrid::kernel::routing::TorusZone, and simgrid::kernel::routing::VivaldiZone.

Public Member Functions

 ClusterZone (NetZoneImpl *father, std::string name, resource::NetworkModel *netmodel)
 
void get_local_route (NetPoint *src, NetPoint *dst, RouteCreationArgs *into, double *latency) override
 Probe the routing path between two points that are local to the called NetZone. More...
 
void get_graph (xbt_graph_t graph, std::map< std::string, xbt_node_t > *nodes, std::map< std::string, xbt_edge_t > *edges) override
 
virtual void create_links_for_node (ClusterCreationArgs *cluster, int id, int rank, unsigned int position)
 
virtual void parse_specific_arguments (ClusterCreationArgs *cluster)
 
unsigned int node_pos (int id)
 
unsigned int node_pos_with_loopback (int id)
 
unsigned int node_pos_with_loopback_limiter (int id)
 
- Public Member Functions inherited from simgrid::kernel::routing::NetZoneImpl
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 ()
 

Public Attributes

std::unordered_map< unsigned int, std::pair< kernel::resource::LinkImpl *, kernel::resource::LinkImpl * > > private_links_
 
void * loopback_ = nullptr
 
kernel::resource::LinkImpl * backbone_ = nullptr
 
NetPointrouter_ = nullptr
 
bool has_limiter_ = false
 
bool has_loopback_ = false
 
unsigned int num_links_per_node_ = 1
 
- Public Attributes inherited from simgrid::kernel::routing::NetZoneImpl
resource::NetworkModel * network_model_
 
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 get_global_route (routing::NetPoint *src, routing::NetPoint *dst, std::vector< resource::LinkImpl *> &links, double *latency)
 
- Protected Member Functions inherited from simgrid::kernel::routing::NetZoneImpl
 NetZoneImpl (NetZoneImpl *father, std::string name, resource::NetworkModel *network_model)
 
virtual ~NetZoneImpl ()
 
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...
 

Constructor & Destructor Documentation

◆ ClusterZone()

simgrid::kernel::routing::ClusterZone::ClusterZone ( NetZoneImpl father,
std::string  name,
resource::NetworkModel *  netmodel 
)
explicit

Member Function Documentation

◆ get_local_route()

void simgrid::kernel::routing::ClusterZone::get_local_route ( NetPoint src,
NetPoint dst,
RouteCreationArgs *  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.

◆ get_graph()

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

◆ create_links_for_node()

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

◆ parse_specific_arguments()

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

◆ node_pos()

unsigned int simgrid::kernel::routing::ClusterZone::node_pos ( int  id)
inline

◆ node_pos_with_loopback()

unsigned int simgrid::kernel::routing::ClusterZone::node_pos_with_loopback ( int  id)
inline

◆ node_pos_with_loopback_limiter()

unsigned int simgrid::kernel::routing::ClusterZone::node_pos_with_loopback_limiter ( int  id)
inline

Member Data Documentation

◆ private_links_

std::unordered_map<unsigned int, std::pair<kernel::resource::LinkImpl*, kernel::resource::LinkImpl*> > simgrid::kernel::routing::ClusterZone::private_links_

◆ loopback_

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

◆ backbone_

kernel::resource::LinkImpl* simgrid::kernel::routing::ClusterZone::backbone_ = nullptr

◆ router_

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

◆ has_limiter_

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

◆ has_loopback_

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

◆ num_links_per_node_

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

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