|
SimGrid
3.14.159
Versatile Simulation of Distributed Systems
|
NetZone modeling peers connected to the cloud through a private link.
This netzone model is particularly well adapted to Peer-to-Peer and Clouds platforms: each component is connected to the cloud through a private link of which the upload and download rate may be asymmetric.
The network core (between the private links) is assumed to be over-sized so only the latency is taken into account. Instead of a matrix of latencies that would become too large when the amount of peers grows, Vivaldi netzones give a coordinate to each peer and compute the latency between host A=(xA,yA,zA) and host B=(xB,yB,zB) as follows:
latency = sqrt( (xA-xB)² + (yA-yB)² ) + zA + zB
The resulting value is assumed to be in milliseconds.
So, to go from an host A to an host B, the following links would be used: private(A)_UP, private(B)_DOWN, with the additional latency computed above.
Such Network Coordinate systems were shown to provide rather good latency estimations in a compact way. Other systems, such as <a href="https://en.wikipedia.org/wiki/Phoenix_network_coordinates"Phoenix network coordinates were shown superior to the Vivaldi system and could be also implemented in SimGrid.
#include <VivaldiZone.hpp>
Public Member Functions | |
| VivaldiZone (NetZone *father, const char *name) | |
| void | setPeerLink (NetCard *netcard, double bw_in, double bw_out, double lat, const char *coord) |
| 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... | |
Public Member Functions inherited from simgrid::kernel::routing::ClusterZone | |
| ClusterZone (NetZone *father, const char *name) | |
| 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::Host * | createHost (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 () |
| NetZone * | father () |
| 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) |
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) |
Public Attributes inherited from simgrid::kernel::routing::ClusterZone | |
| std::unordered_map< unsigned int, std::pair< Link *, Link * > > | privateLinks_ |
| Link * | backbone_ = nullptr |
| void * | loopback_ = nullptr |
| NetCard * | router_ = nullptr |
| bool | hasLimiter_ = false |
| bool | hasLoopback_ = false |
| unsigned int | linkCountPerNode_ = 1 |
Public Attributes inherited from simgrid::kernel::routing::NetZoneImpl | |
| RoutingMode | hierarchy_ = RoutingMode::unset |
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_ |
|
explicit |
| void simgrid::kernel::routing::VivaldiZone::setPeerLink | ( | NetCard * | netcard, |
| double | bw_in, | ||
| double | bw_out, | ||
| double | lat, | ||
| const char * | coord | ||
| ) |
|
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.