SimGrid
3.18
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. The bandwidth of the UP and DOWN links is not symmetric (in contrary to usual SimGrid links), but naturally correspond to the values provided when the peer was created. More information in the relevant section of the XML reference guide: <peer> (Vivaldi netzones only).
You can find some Coordinate-based platforms from the OptorSim project, as well as a script to turn them into SimGrid platforms in examples/platforms/syscoord.
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, std::string name) | |
void | setPeerLink (NetPoint *netpoint, double bw_in, double bw_out, std::string coord) |
void | getLocalRoute (NetPoint *src, NetPoint *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... | |
![]() | |
ClusterZone (NetZone *father, std::string name) | |
void | getGraph (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 | nodePosition (int id) |
unsigned int | nodePositionWithLoopback (int id) |
unsigned int | nodePositionWithLimiter (int id) |
![]() | |
simgrid::s4u::Host * | createHost (const char *name, std::vector< double > *speedPerPstate, int coreAmount, std::map< std::string, std::string > *props) |
Make an host within that NetZone. More... | |
void | addBypassRoute (NetPoint *src, NetPoint *dst, NetPoint *gw_src, NetPoint *gw_dst, std::vector< simgrid::surf::LinkImpl *> &link_list, bool symmetrical) override |
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... | |
const std::string & | getName () const |
Retrieves the name of that netzone as a C++ string. More... | |
const char * | getCname () const |
Retrieves the name of that netzone as a C string. More... | |
NetZone * | getFather () |
std::vector< NetZone * > * | getChildren () |
void | getHosts (std::vector< s4u::Host *> *whereto) |
std::unordered_map< std::string, std::string > * | getProperties () |
Get the properties assigned to a host. More... | |
const char * | getProperty (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 (kernel::routing::NetPoint *src, kernel::routing::NetPoint *dst, kernel::routing::NetPoint *gw_src, kernel::routing::NetPoint *gw_dst, std::vector< simgrid::surf::LinkImpl *> &link_list, bool symmetrical) |
|
explicit |
void simgrid::kernel::routing::VivaldiZone::setPeerLink | ( | NetPoint * | netpoint, |
double | bw_in, | ||
double | bw_out, | ||
std::string | 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.