Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Added a jitter functionallity to GTNets model, latency is increased by a random numbe...
authorvelho <velho@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 8 Oct 2009 07:50:45 +0000 (07:50 +0000)
committervelho <velho@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 8 Oct 2009 07:50:45 +0000 (07:50 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6741 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/surf/gtnets/gtnets_interface.cc
src/surf/gtnets/gtnets_interface.h
src/surf/gtnets/gtnets_simulator.cc
src/surf/gtnets/gtnets_simulator.h
src/surf/network_gtnets.c
src/surf/surf_config.c

index f62dbdb..227762b 100644 (file)
@@ -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);
+}
+
+
index 8ab44e2..095103a 100644 (file)
@@ -27,7 +27,7 @@ extern "C" {
 
   int gtnets_run(double delta);
   int gtnets_finalize();
-
+  void gtnets_set_jitter(double);
 #ifdef __cplusplus
 }
 #endif
index 505e4c5..4a9a950 100644 (file)
@@ -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.
index 15faec7..04490f2 100644 (file)
@@ -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_;
index 62e3c0e..6e259bd 100644 (file)
@@ -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);
 }
index ec30531..d19ca40 100644 (file)
@@ -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();