gtnets_sim->set_jitter(d);
}
+// set jitter seed
+void gtnets_set_jitter_seed(int seed){
+ gtnets_sim->set_jitter_seed(seed);
+}
+
int gtnets_run(double delta);
int gtnets_finalize();
void gtnets_set_jitter(double);
+ void gtnets_set_jitter_seed(int);
+
#ifdef __cplusplus
}
#endif
sim_ = new Simulator();
topo_ = new GTNETS_Topology();
uniform_jitter_ = NULL;
+ jitter_ = 0;
+ jitter_seed_ = 10;
sim_->verbose=false;
// Set default values.
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_);
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 =
void create_gtnets_topology();
void print_topology();
void set_jitter(double);
+ void set_jitter_seed(int);
private:
void add_nodes();
void node_connect();
int is_topology_;
int nflow_;
double jitter_;
+ int jitter_seed_;
Uniform *uniform_jitter_;
map < int, TCPServer * >gtnets_servers_;
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)
{
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,
"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)
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*/
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: ");
"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) {
#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];