SimGrid  3.18
Versatile Simulation of Distributed Systems
simgrid::kernel::routing::VivaldiZone Class Reference

Detailed Description

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>

Inheritance diagram for simgrid::kernel::routing::VivaldiZone:
simgrid::kernel::routing::ClusterZone simgrid::kernel::routing::NetZoneImpl simgrid::s4u::NetZone

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...
 
- Public Member Functions inherited from simgrid::kernel::routing::ClusterZone
 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)
 
- Public Member Functions inherited from simgrid::kernel::routing::NetZoneImpl
simgrid::s4u::HostcreateHost (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...
 
- 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...
 
const std::stringgetName () 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...
 
NetZonegetFather ()
 
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)
 

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::NetPoint *src, routing::NetPoint *dst, std::vector< surf::LinkImpl *> &links, double *latency)
 
- Public Attributes inherited from simgrid::kernel::routing::ClusterZone
std::unordered_map< unsigned int, std::pair< surf::LinkImpl *, surf::LinkImpl * > > privateLinks_
 
surf::LinkImplbackbone_ = nullptr
 
voidloopback_ = nullptr
 
NetPointrouter_ = 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::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
 
- Protected Member Functions inherited from simgrid::kernel::routing::NetZoneImpl
 NetZoneImpl (NetZone *father, std::string name)
 
virtual ~NetZoneImpl ()
 
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...
 
- Protected Member Functions inherited from simgrid::s4u::NetZone
 NetZone (NetZone *father, std::string name)
 
virtual ~NetZone ()
 
unsigned int getTableSize ()
 
std::vector< kernel::routing::NetPoint * > getVertices ()
 

Constructor & Destructor Documentation

◆ VivaldiZone()

simgrid::kernel::routing::VivaldiZone::VivaldiZone ( NetZone father,
std::string  name 
)
explicit

Member Function Documentation

◆ setPeerLink()

void simgrid::kernel::routing::VivaldiZone::setPeerLink ( NetPoint netpoint,
double  bw_in,
double  bw_out,
std::string  coord 
)

◆ getLocalRoute()

void simgrid::kernel::routing::VivaldiZone::getLocalRoute ( NetPoint src,
NetPoint dst,
sg_platf_route_cbarg_t  into,
double *  latency 
)
overridevirtual

Probe the routing path between two points that are local to the called NetZone.

Parameters
srcwhere from
dstwhere to
intoContainer into which the traversed links and gateway informations should be pushed
latencyAccumulator in which the latencies should be added (caller must set it to 0)

Reimplemented from simgrid::kernel::routing::ClusterZone.


The documentation for this class was generated from the following files: