SimGrid
3.16
Versatile Simulation of Distributed Systems
|
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>
Public Types | |
enum | RoutingMode { RoutingMode::unset = 0, RoutingMode::base, RoutingMode::recursive } |
Public Member Functions | |
simgrid::s4u::Host * | createHost (const char *name, std::vector< double > *speedPerPstate, int coreAmount, std::unordered_map< std::string, std::string > *props) |
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... | |
virtual void | getGraph (xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges)=0 |
![]() | |
virtual void | seal () |
Seal your netzone once you're done adding content, and before routing stuff through it. More... | |
char * | name () |
NetZone * | father () |
std::vector< NetZone * > * | children () |
void | hosts (std::vector< s4u::Host *> *whereto) |
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::NetPoint *elm) |
virtual void | addRoute (sg_platf_route_cbarg_t route) |
Static Public Member Functions | |
static void | getGlobalRoute (routing::NetPoint *src, routing::NetPoint *dst, std::vector< surf::LinkImpl *> *links, double *latency) |
Public Attributes | |
RoutingMode | hierarchy_ = RoutingMode::unset |
Protected Member Functions | |
NetZoneImpl (NetZone *father, const char *name) | |
virtual | ~NetZoneImpl () |
virtual void | getLocalRoute (NetPoint *src, NetPoint *dst, sg_platf_route_cbarg_t into, double *latency)=0 |
Probe the routing path between two points that are local to the called NetZone. More... | |
bool | getBypassRoute (routing::NetPoint *src, routing::NetPoint *dst, std::vector< surf::LinkImpl *> *links, double *latency) |
retrieves the list of all routes of size 1 (of type src x dst x Link) More... | |
![]() | |
NetZone (NetZone *father, const char *name) | |
virtual | ~NetZone () |
Additional Inherited Members | |
![]() | |
static simgrid::xbt::signal< void(bool symmetrical, kernel::routing::NetPoint *src, kernel::routing::NetPoint *dst, kernel::routing::NetPoint *gw_src, kernel::routing::NetPoint *gw_dst, std::vector< surf::LinkImpl * > *link_list)> | onRouteCreation |
static simgrid::xbt::signal< void(NetZone &)> | onCreation |
static simgrid::xbt::signal< void(NetZone &)> | onSeal |
![]() | |
std::vector< kernel::routing::NetPoint * > | vertices_ |
|
explicitprotected |
|
protectedvirtual |
simgrid::s4u::Host * simgrid::kernel::routing::NetZoneImpl::createHost | ( | const char * | name, |
std::vector< double > * | speedPerPstate, | ||
int | coreAmount, | ||
std::unordered_map< std::string, std::string > * | props | ||
) |
Make an host within that NetZone.
|
overridevirtual |
Creates a new route in this NetZone.
Implements simgrid::s4u::NetZone.
|
protectedpure virtual |
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) |
Implemented in simgrid::kernel::routing::FatTreeZone, simgrid::kernel::routing::ClusterZone, simgrid::kernel::routing::DragonflyZone, simgrid::kernel::routing::DijkstraZone, simgrid::kernel::routing::VivaldiZone, simgrid::kernel::routing::FloydZone, simgrid::kernel::routing::FullZone, simgrid::kernel::routing::EmptyZone, and simgrid::kernel::routing::TorusZone.
|
protected |
retrieves the list of all routes of size 1 (of type src x dst x Link)
|
static |
|
pure virtual |
RoutingMode simgrid::kernel::routing::NetZoneImpl::hierarchy_ = RoutingMode::unset |