SimGrid  3.21
Versatile Simulation of Distributed Systems
simgrid::kernel::routing::FatTreeZone Class Reference

Detailed Description

NetZone using a Fat-Tree topology.

Generate fat trees according to the topology asked for, according to: Eitan Zahavi, D-Mod-K Routing Providing Non-Blocking Traffic for Shift Permutations on Real Life Fat Trees (2010).

RLFT are PGFT with some restrictions to address real world constraints, which are not currently enforced.

The exact topology is described in the mandatory topo_parameters field, and follow the "h ; m_1, ..., m_h ; w_1, ..., w_h ; p_1, ..., p_h" format. h stands for the switches levels number, i.e. the fat tree is of height h, without the processing nodes. m_i stands for the number of lower level nodes connected to a node in level i. w_i stands for the number of upper levels nodes connected to a node in level i-1. p_i stands for the number of parallel links connecting two nodes between level i and i - 1. Level h is the topmost switch level, level 1 is the lowest switch level, and level 0 represents the processing nodes. The number of provided nodes must be exactly the number of processing nodes required to fit the topology, which is the product of the m_i's.

Routing is made using a destination-mod-k scheme.

#include <FatTreeZone.hpp>

Inherits simgrid::kernel::routing::ClusterZone.

Public Member Functions

 FatTreeZone (NetZoneImpl *father, std::string name, resource::NetworkModel *netmodel)
 
 ~FatTreeZone () override
 
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 seal () override
 Generate the fat tree. More...
 
void parse_specific_arguments (ClusterCreationArgs *cluster) override
 Read the parameters in topo_parameters field. More...
 
void add_processing_node (int id)
 
void generate_dot_file (const std::string &filename="fat_tree.dot") const
 
- Public Member Functions inherited from simgrid::kernel::routing::ClusterZone
 ClusterZone (NetZoneImpl *father, std::string name, resource::NetworkModel *netmodel)
 
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)
 
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 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 ()
 

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)
 
- Public Attributes inherited from simgrid::kernel::routing::ClusterZone
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
 
- 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

◆ FatTreeZone()

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

◆ ~FatTreeZone()

simgrid::kernel::routing::FatTreeZone::~FatTreeZone ( )
override

Member Function Documentation

◆ get_local_route()

void simgrid::kernel::routing::FatTreeZone::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)

Reimplemented from simgrid::kernel::routing::ClusterZone.

◆ seal()

void simgrid::kernel::routing::FatTreeZone::seal ( )
overridevirtual

Generate the fat tree.

Once all processing nodes have been added, this will make sure the fat tree is generated by calling generateLabels(), generateSwitches() and then connection all nodes between them, using their label.

Reimplemented from simgrid::kernel::routing::NetZoneImpl.

◆ parse_specific_arguments()

void simgrid::kernel::routing::FatTreeZone::parse_specific_arguments ( ClusterCreationArgs *  cluster)
overridevirtual

Read the parameters in topo_parameters field.

It will also store the cluster for future use.

Reimplemented from simgrid::kernel::routing::ClusterZone.

◆ add_processing_node()

void simgrid::kernel::routing::FatTreeZone::add_processing_node ( int  id)

◆ generate_dot_file()

void simgrid::kernel::routing::FatTreeZone::generate_dot_file ( const std::string &  filename = "fat_tree.dot") const

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