Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Added a gtnets_jitter_seed parameter enabling jitted repeatable experiments, activate...
authorvelho <velho@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 13 Oct 2009 15:43:19 +0000 (15:43 +0000)
committervelho <velho@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 13 Oct 2009 15:43:19 +0000 (15:43 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6760 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
src/surf/surf_private.h

index 227762b..7ff053c 100644 (file)
@@ -142,4 +142,9 @@ void gtnets_set_jitter(double d){
   gtnets_sim->set_jitter(d);
 }
 
+// set jitter seed
+void gtnets_set_jitter_seed(int seed){
+  gtnets_sim->set_jitter_seed(seed);
+}
+
 
index 095103a..675968d 100644 (file)
@@ -28,6 +28,8 @@ extern "C" {
   int gtnets_run(double delta);
   int gtnets_finalize();
   void gtnets_set_jitter(double);
+  void gtnets_set_jitter_seed(int);
+
 #ifdef __cplusplus
 }
 #endif
index 2acaf14..bc66408 100644 (file)
@@ -36,6 +36,8 @@ GTSim::GTSim(){
   sim_ = new Simulator();
   topo_ = new GTNETS_Topology();
   uniform_jitter_ = NULL;
+  jitter_ = 0;
+  jitter_seed_ = 10;
 
   sim_->verbose=false;
   // Set default values.
@@ -100,10 +102,12 @@ int GTSim::add_link(int id, double bandwidth, double latency){
   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_);
+       DEBUG2("Using jitter %f, and seed %u", jitter_, jitter_seed_);
        double min = -1*jitter_*latency;
        double max = jitter_*latency;
        if(uniform_jitter_ == NULL){
+               Random::GlobalSeed(jitter_seed_  , jitter_seed_+1, jitter_seed_+2,
+                                                  jitter_seed_+3, jitter_seed_+4, jitter_seed_+5);
                uniform_jitter_ = new Uniform(min,max);
        }
        gtnets_links_[id]->Jitter((const Random &) *uniform_jitter_);
@@ -311,6 +315,10 @@ void GTSim::set_jitter(double d){
   jitter_ = d;
 }
 
+void GTSim::set_jitter_seed(int s){
+  jitter_seed_ = s;
+}
+
 void static tcp_sent_callback(void* action, double completion_time){
   // Schedule the flow complete event.
   SimulatorEvent* e =
index 04490f2..8765b96 100644 (file)
@@ -49,6 +49,7 @@ public:
   void create_gtnets_topology();
   void print_topology();
   void set_jitter(double);
+  void set_jitter_seed(int);
 private:
   void add_nodes();
   void node_connect();
@@ -62,6 +63,7 @@ private:
   int is_topology_;
   int nflow_;
   double jitter_;
+  int jitter_seed_;
   Uniform *uniform_jitter_;
 
     map < int, TCPServer * >gtnets_servers_;
index 6e259bd..ad3d39c 100644 (file)
@@ -14,6 +14,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_network_gtnets, surf,
 
 extern routing_t used_routing;
 double sg_gtnets_jitter=0.0;
+int sg_gtnets_jitter_seed=10;
 
 static void link_new(char *name, double bw, double lat, xbt_dict_t props)
 {
@@ -364,6 +365,7 @@ void surf_network_model_init_GTNETS(const char *filename)
 
   if(sg_gtnets_jitter > 0.0){
          gtnets_set_jitter(sg_gtnets_jitter);
+         gtnets_set_jitter_seed(sg_gtnets_jitter_seed);
   }
 
   update_model_description(surf_network_model_description,
index 39f54c2..dafbb29 100644 (file)
@@ -15,9 +15,7 @@ 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)
@@ -120,6 +118,9 @@ static void _surf_cfg_cb__surf_maxmin_selective_update(const char *name, int pos
 static void _surf_cfg_cb__gtnets_jitter(const char *name, int pos){
        sg_gtnets_jitter = xbt_cfg_get_double(_surf_cfg_set, name);
 }
+static void _surf_cfg_cb__gtnets_jitter_seed(const char *name, int pos){
+       sg_gtnets_jitter_seed = xbt_cfg_get_int(_surf_cfg_set, name);
+}
 #endif
 
 /* create the config set, register what should be and parse the command line*/
@@ -132,7 +133,8 @@ void surf_config_init(int *argc, char **argv)
 
     char *description = xbt_malloc(1024), *p = description;
     char *default_value;
-               int default_value_int;
+       int default_value_int;
+       int default_value_int_seed;
     int i;
 
     sprintf(description, "The model to use for the CPU. Possible values: ");
@@ -203,6 +205,11 @@ void surf_config_init(int *argc, char **argv)
                      "Double value to oscillate the link latency, uniformly in random interval [-latency*gtnets_jitter,latency*gtnets_jitter)", xbt_cfgelm_double,
                      NULL, 1, 1, _surf_cfg_cb__gtnets_jitter, NULL);
     xbt_cfg_set_double(_surf_cfg_set, "gtnets_jitter", 0.0);
+
+    default_value_int_seed = 10;
+    xbt_cfg_register(&_surf_cfg_set, "gtnets_jitter_seed",
+                     "Use a positive seed to reproduce jitted results, value must be in [1,1e8], default is 10",
+                     xbt_cfgelm_int, &default_value_int_seed, 0, 1, _surf_cfg_cb__gtnets_jitter_seed, NULL);
 #endif
 
     if (!surf_path) {
index ddd2ca4..63c73ad 100644 (file)
 #define NO_MAX_DURATION -1.0
 extern double sg_tcp_gamma;
 extern int sg_maxmin_selective_update;
+#ifdef HAVE_GTNETS
+  extern double sg_gtnets_jitter;
+  extern int sg_gtnets_jitter_seed;
+#endif
 
 extern const char *surf_action_state_names[6];