From: velho Date: Thu, 8 Oct 2009 07:50:45 +0000 (+0000) Subject: Added a jitter functionallity to GTNets model, latency is increased by a random numbe... X-Git-Tag: SVN~973 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/f830403bb72f4e44f773ad87c2aa298f2393d395 Added a jitter functionallity to GTNets model, latency is increased by a random number in [0,latency*jitter). git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6741 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/surf/gtnets/gtnets_interface.cc b/src/surf/gtnets/gtnets_interface.cc index f62dbdb50d..227762bd8f 100644 --- a/src/surf/gtnets/gtnets_interface.cc +++ b/src/surf/gtnets/gtnets_interface.cc @@ -137,3 +137,9 @@ void gtnets_print_topology(void){ gtnets_sim->print_topology(); } +// set jitter +void gtnets_set_jitter(double d){ + gtnets_sim->set_jitter(d); +} + + diff --git a/src/surf/gtnets/gtnets_interface.h b/src/surf/gtnets/gtnets_interface.h index 8ab44e2649..095103a415 100644 --- a/src/surf/gtnets/gtnets_interface.h +++ b/src/surf/gtnets/gtnets_interface.h @@ -27,7 +27,7 @@ extern "C" { int gtnets_run(double delta); int gtnets_finalize(); - + void gtnets_set_jitter(double); #ifdef __cplusplus } #endif diff --git a/src/surf/gtnets/gtnets_simulator.cc b/src/surf/gtnets/gtnets_simulator.cc index 505e4c59d3..4a9a950920 100644 --- a/src/surf/gtnets/gtnets_simulator.cc +++ b/src/surf/gtnets/gtnets_simulator.cc @@ -35,6 +35,7 @@ GTSim::GTSim(){ nflow_ = 0; sim_ = new Simulator(); topo_ = new GTNETS_Topology(); + uniform_jitter_ = NULL; sim_->verbose=false; // Set default values. @@ -98,6 +99,15 @@ int GTSim::add_link(int id, double bandwidth, double latency){ xbt_assert1(!(topo_->add_link(id) < 0),"Can't add link %d. already exists", id); DEBUG3("Creating a new P2P, linkid %d, bandwidth %gl, latency %gl", id, bandwidth, latency); gtnets_links_[id] = new Linkp2p(bw, latency); + if(jitter_ > 0){ + DEBUG1("Using jitter %f", jitter_); + double min = 0.0; + double max = jitter_*latency; + if(uniform_jitter_ == NULL){ + uniform_jitter_ = new Uniform(min,max); + } + gtnets_links_[id]->Jitter((const Random &) *uniform_jitter_); + } return 0; } @@ -297,6 +307,9 @@ int GTSim::run(double delta){ return 0; } +void GTSim::set_jitter(double d){ + jitter_ = d; +} void static tcp_sent_callback(void* action, double completion_time){ // Schedule the flow complete event. diff --git a/src/surf/gtnets/gtnets_simulator.h b/src/surf/gtnets/gtnets_simulator.h index 15faec73b4..04490f2828 100644 --- a/src/surf/gtnets/gtnets_simulator.h +++ b/src/surf/gtnets/gtnets_simulator.h @@ -48,6 +48,7 @@ public: double gtnets_get_flow_rx(void *metadata); void create_gtnets_topology(); void print_topology(); + void set_jitter(double); private: void add_nodes(); void node_connect(); @@ -60,6 +61,8 @@ private: int nnode_; int is_topology_; int nflow_; + double jitter_; + Uniform *uniform_jitter_; map < int, TCPServer * >gtnets_servers_; map < int, TCPSend * >gtnets_clients_; diff --git a/src/surf/network_gtnets.c b/src/surf/network_gtnets.c index 62e3c0eaa1..6e259bd371 100644 --- a/src/surf/network_gtnets.c +++ b/src/surf/network_gtnets.c @@ -13,6 +13,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets, surf, "Logging specific to the SURF network GTNetS module"); extern routing_t used_routing; +double sg_gtnets_jitter=0.0; static void link_new(char *name, double bw, double lat, xbt_dict_t props) { @@ -361,6 +362,10 @@ void surf_network_model_init_GTNETS(const char *filename) define_callbacks(filename); xbt_dynar_push(model_list, &surf_network_model); + if(sg_gtnets_jitter > 0.0){ + gtnets_set_jitter(sg_gtnets_jitter); + } + update_model_description(surf_network_model_description, "GTNets", surf_network_model); } diff --git a/src/surf/surf_config.c b/src/surf/surf_config.c index ec3053146b..d19ca40694 100644 --- a/src/surf/surf_config.c +++ b/src/surf/surf_config.c @@ -15,7 +15,9 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_config, surf, "About the configuration of surf (and the rest of the simulation)"); xbt_cfg_t _surf_cfg_set = NULL; - +#ifdef HAVE_GTNETS +extern double sg_gtnets_jitter; +#endif /* Parse the command line, looking for options */ static void surf_config_cmd_line(int *argc, char **argv) @@ -114,6 +116,12 @@ static void _surf_cfg_cb__surf_maxmin_selective_update(const char *name, int pos sg_maxmin_selective_update = xbt_cfg_get_int(_surf_cfg_set, name); } +#ifdef HAVE_GTNETS +static void _surf_cfg_cb__gtnets_jitter(const char *name, int pos){ + sg_gtnets_jitter = xbt_cfg_get_double(_surf_cfg_set, name); +} +#endif + /* create the config set, register what should be and parse the command line*/ void surf_config_init(int *argc, char **argv) { @@ -189,6 +197,14 @@ void surf_config_init(int *argc, char **argv) xbt_cfg_register(&_surf_cfg_set, "maxmin_selective_update", "Update the constraint set propagating recursively to others constraints", xbt_cfgelm_int, &default_value_int, 0, 1, _surf_cfg_cb__surf_maxmin_selective_update, NULL); + +#ifdef HAVE_GTNETS + xbt_cfg_register(&_surf_cfg_set, "gtnets_jitter", + "Double value to inflate the link latency, latency plus random in [0,latency*gtnets_jitter)", xbt_cfgelm_double, + NULL, 1, 1, _surf_cfg_cb__gtnets_jitter, NULL); + xbt_cfg_set_double(_surf_cfg_set, "gtnets_jitter", 1.0); +#endif + if (!surf_path) { /* retrieves the current directory of the current process */ const char *initial_path = __surf_get_initial_path();