SimGrid
3.21
Versatile Simulation of Distributed Systems
|
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 |
![]() | |
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) |
![]() | |
s4u::NetZone * | get_iface () |
simgrid::s4u::Host * | 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. 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 () |
NetZoneImpl * | get_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 | |
![]() | |
enum | RoutingMode { RoutingMode::unset = 0, RoutingMode::base, RoutingMode::recursive } |
![]() | |
static void | get_global_route (routing::NetPoint *src, routing::NetPoint *dst, std::vector< resource::LinkImpl *> &links, double *latency) |
![]() | |
std::unordered_map< unsigned int, std::pair< kernel::resource::LinkImpl *, kernel::resource::LinkImpl * > > | private_links_ |
void * | loopback_ = nullptr |
kernel::resource::LinkImpl * | backbone_ = nullptr |
NetPoint * | router_ = nullptr |
bool | has_limiter_ = false |
bool | has_loopback_ = false |
unsigned int | num_links_per_node_ = 1 |
![]() | |
resource::NetworkModel * | network_model_ |
RoutingMode | hierarchy_ = RoutingMode::unset |
![]() | |
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... | |
|
explicit |
|
override |
|
overridevirtual |
Probe the routing path between two points that are local to the called NetZone.
src | where from |
dst | where to |
into | Container into which the traversed links and gateway informations should be pushed |
latency | Accumulator in which the latencies should be added (caller must set it to 0) |
Reimplemented from simgrid::kernel::routing::ClusterZone.
|
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.
|
overridevirtual |
Read the parameters in topo_parameters field.
It will also store the cluster for future use.
Reimplemented from simgrid::kernel::routing::ClusterZone.
void simgrid::kernel::routing::FatTreeZone::add_processing_node | ( | int | id | ) |
void simgrid::kernel::routing::FatTreeZone::generate_dot_file | ( | const std::string & | filename = "fat_tree.dot" | ) | const |