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... | |
![]() | |
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) |
![]() | |
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... | |
![]() | |
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 | |
![]() | |
enum | RoutingMode { RoutingMode::unset = 0, RoutingMode::base, RoutingMode::recursive } |
![]() | |
static void | getGlobalRoute (routing::NetCard *src, routing::NetCard *dst, std::vector< surf::Link *> *links, double *latency) |
![]() | |
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 |
![]() | |
RoutingMode | hierarchy_ = RoutingMode::unset |
![]() | |
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 |
![]() | |
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... | |
![]() | |
NetZone (NetZone *father, const char *name) | |
virtual | ~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.