aboutsummaryrefslogtreecommitdiff
path: root/src/ats-tests
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2014-01-31 16:13:14 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2014-01-31 16:13:14 +0000
commitbf9c6ce12b8ad43d58cc05e62f75a86d59778f54 (patch)
tree792565279055ba9d0bcfa6fa453ba39cd5944a01 /src/ats-tests
parent12e3ee5beb64ee106df8e8974c228a003a676a53 (diff)
downloadgnunet-bf9c6ce12b8ad43d58cc05e62f75a86d59778f54.tar.gz
gnunet-bf9c6ce12b8ad43d58cc05e62f75a86d59778f54.zip
adding linear and saw wave support for traffic generator
Diffstat (limited to 'src/ats-tests')
-rw-r--r--src/ats-tests/ats-testing-experiment.c2
-rw-r--r--src/ats-tests/ats-testing-traffic.c45
-rw-r--r--src/ats-tests/ats-testing.h12
-rw-r--r--src/ats-tests/gnunet-ats-sim.c11
4 files changed, 54 insertions, 16 deletions
diff --git a/src/ats-tests/ats-testing-experiment.c b/src/ats-tests/ats-testing-experiment.c
index d55adc2d7..12858f2aa 100644
--- a/src/ats-tests/ats-testing-experiment.c
+++ b/src/ats-tests/ats-testing-experiment.c
@@ -261,8 +261,8 @@ timeout_experiment (void *cls, const struct GNUNET_SCHEDULER_TaskContext* tc)
261 261
262 if (GNUNET_SCHEDULER_NO_TASK != e->episode_timeout_task) 262 if (GNUNET_SCHEDULER_NO_TASK != e->episode_timeout_task)
263 { 263 {
264 e->episode_timeout_task = GNUNET_SCHEDULER_NO_TASK;
265 GNUNET_SCHEDULER_cancel (e->episode_timeout_task); 264 GNUNET_SCHEDULER_cancel (e->episode_timeout_task);
265 e->episode_timeout_task = GNUNET_SCHEDULER_NO_TASK;
266 } 266 }
267 267
268 e->e_done_cb (e, GNUNET_TIME_absolute_get_duration(e->start_time), 268 e->e_done_cb (e, GNUNET_TIME_absolute_get_duration(e->start_time),
diff --git a/src/ats-tests/ats-testing-traffic.c b/src/ats-tests/ats-testing-traffic.c
index 78ee63acb..3019d2054 100644
--- a/src/ats-tests/ats-testing-traffic.c
+++ b/src/ats-tests/ats-testing-traffic.c
@@ -36,19 +36,26 @@ static struct GNUNET_TIME_Relative
36get_delay (struct TrafficGenerator *tg) 36get_delay (struct TrafficGenerator *tg)
37{ 37{
38 struct GNUNET_TIME_Relative delay; 38 struct GNUNET_TIME_Relative delay;
39 struct GNUNET_TIME_Relative time_delta;
40 long long int cur_rate;
41 long long int delta_rate;
42
43
39 delay.rel_value_us = 0; 44 delay.rel_value_us = 0;
40 45
41 switch (tg->type) { 46 switch (tg->type) {
42 case GNUNET_ATS_TEST_TG_CONSTANT: 47 case GNUNET_ATS_TEST_TG_CONSTANT:
43 if (UINT32_MAX == tg->rate) 48 if (UINT32_MAX == tg->base_rate)
44 delay.rel_value_us = 0; 49 return GNUNET_TIME_UNIT_ZERO;
45 else if (tg->rate <= TEST_MESSAGE_SIZE) 50 cur_rate = tg->base_rate;
46 delay.rel_value_us = (GNUNET_TIME_UNIT_SECONDS.rel_value_us); 51 return delay;
47 else
48 delay.rel_value_us = (GNUNET_TIME_UNIT_SECONDS.rel_value_us / (tg->rate / TEST_MESSAGE_SIZE));
49 break; 52 break;
50 case GNUNET_ATS_TEST_TG_LINEAR: 53 case GNUNET_ATS_TEST_TG_LINEAR:
51 GNUNET_break (0); 54 time_delta = GNUNET_TIME_absolute_get_duration(tg->time_start);
55 time_delta.rel_value_us = time_delta.rel_value_us % tg->duration_period.rel_value_us;
56 delta_rate = ((double) time_delta.rel_value_us / tg->duration_period.rel_value_us) *
57 (tg->max_rate - tg->base_rate);
58 cur_rate = tg->base_rate + delta_rate;
52 break; 59 break;
53 case GNUNET_ATS_TEST_TG_RANDOM: 60 case GNUNET_ATS_TEST_TG_RANDOM:
54 GNUNET_break (0); 61 GNUNET_break (0);
@@ -60,6 +67,8 @@ get_delay (struct TrafficGenerator *tg)
60 return delay; 67 return delay;
61 break; 68 break;
62 } 69 }
70
71 delay.rel_value_us = GNUNET_TIME_UNIT_SECONDS.rel_value_us * TEST_MESSAGE_SIZE / cur_rate;
63 return delay; 72 return delay;
64} 73}
65 74
@@ -69,6 +78,7 @@ send_ping_ready_cb (void *cls, size_t size, void *buf)
69 struct BenchmarkPartner *p = cls; 78 struct BenchmarkPartner *p = cls;
70 static char msgbuf[TEST_MESSAGE_SIZE]; 79 static char msgbuf[TEST_MESSAGE_SIZE];
71 struct GNUNET_MessageHeader *msg; 80 struct GNUNET_MessageHeader *msg;
81 struct GNUNET_TIME_Relative delay;
72 82
73 if (NULL == buf) 83 if (NULL == buf)
74 { 84 {
@@ -117,8 +127,11 @@ send_ping_ready_cb (void *cls, size_t size, void *buf)
117 GNUNET_break (0); 127 GNUNET_break (0);
118 return TEST_MESSAGE_SIZE; 128 return TEST_MESSAGE_SIZE;
119 } 129 }
130 delay = get_delay (p->tg);
131 fprintf (stderr, "Delay for next transmission %llu ms\n",
132 (long long unsigned int) delay.rel_value_us / 1000);
120 p->tg->next_ping_transmission = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(), 133 p->tg->next_ping_transmission = GNUNET_TIME_absolute_add(GNUNET_TIME_absolute_get(),
121 get_delay (p->tg)); 134 delay);
122 135
123 return TEST_MESSAGE_SIZE; 136 return TEST_MESSAGE_SIZE;
124} 137}
@@ -226,7 +239,7 @@ GNUNET_ATS_TEST_traffic_handle_pong (struct BenchmarkPartner *p)
226 239
227 /* Schedule next send event */ 240 /* Schedule next send event */
228 left = GNUNET_TIME_absolute_get_remaining(p->tg->next_ping_transmission); 241 left = GNUNET_TIME_absolute_get_remaining(p->tg->next_ping_transmission);
229 if (UINT32_MAX == p->tg->rate) 242 if (UINT32_MAX == p->tg->base_rate)
230 { 243 {
231 p->tg->send_task = GNUNET_SCHEDULER_add_now (&comm_schedule_send, p); 244 p->tg->send_task = GNUNET_SCHEDULER_add_now (&comm_schedule_send, p);
232 } 245 }
@@ -246,12 +259,17 @@ GNUNET_ATS_TEST_traffic_handle_pong (struct BenchmarkPartner *p)
246 * Generate between the source master and the partner and send traffic with a 259 * Generate between the source master and the partner and send traffic with a
247 * maximum rate. 260 * maximum rate.
248 * 261 *
262 * @base_rate traffic base rate to send data with
263 * @max_rate traffic maximum rate to send data with
264 * @frequency
249 */ 265 */
250struct TrafficGenerator * 266struct TrafficGenerator *
251GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src, 267GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src,
252 struct BenchmarkPartner *dest, 268 struct BenchmarkPartner *dest,
253 enum TrafficGeneratorType type, 269 enum TrafficGeneratorType type,
254 unsigned int rate, 270 long int base_rate,
271 long int max_rate,
272 struct GNUNET_TIME_Relative period,
255 struct GNUNET_TIME_Relative duration) 273 struct GNUNET_TIME_Relative duration)
256{ 274{
257 struct TrafficGenerator * tg; 275 struct TrafficGenerator * tg;
@@ -268,14 +286,17 @@ GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src,
268 tg->type = type; 286 tg->type = type;
269 tg->src = src; 287 tg->src = src;
270 tg->dest = dest; 288 tg->dest = dest;
271 tg->rate = rate; 289 tg->base_rate = base_rate;
290 tg->max_rate = max_rate;
291 tg->duration_period = period;
292 tg->time_start = GNUNET_TIME_absolute_get();
272 tg->next_ping_transmission = GNUNET_TIME_UNIT_FOREVER_ABS; 293 tg->next_ping_transmission = GNUNET_TIME_UNIT_FOREVER_ABS;
273 294
274 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 295 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
275 "Setting up traffic generator master[%u] `%s' and slave [%u] `%s' max %u Bips\n", 296 "Setting up traffic generator master[%u] `%s' and slave [%u] `%s' max %u Bips\n",
276 dest->me->no, GNUNET_i2s (&dest->me->id), 297 dest->me->no, GNUNET_i2s (&dest->me->id),
277 dest->dest->no, GNUNET_i2s (&dest->dest->id), 298 dest->dest->no, GNUNET_i2s (&dest->dest->id),
278 rate); 299 base_rate);
279 300
280 if ( ((GNUNET_YES == top->test_core) && (NULL != dest->cth)) || 301 if ( ((GNUNET_YES == top->test_core) && (NULL != dest->cth)) ||
281 ((GNUNET_NO == top->test_core) && (NULL != dest->tth)) ) 302 ((GNUNET_NO == top->test_core) && (NULL != dest->tth)) )
diff --git a/src/ats-tests/ats-testing.h b/src/ats-tests/ats-testing.h
index cbef3abf3..2b4bf3f12 100644
--- a/src/ats-tests/ats-testing.h
+++ b/src/ats-tests/ats-testing.h
@@ -227,10 +227,14 @@ struct TrafficGenerator
227 227
228 struct BenchmarkPeer *src; 228 struct BenchmarkPeer *src;
229 struct BenchmarkPartner *dest; 229 struct BenchmarkPartner *dest;
230 unsigned int rate; 230
231 long int base_rate;
232 long int max_rate;
233 struct GNUNET_TIME_Relative duration_period;
234
231 GNUNET_SCHEDULER_TaskIdentifier send_task; 235 GNUNET_SCHEDULER_TaskIdentifier send_task;
232 struct GNUNET_TIME_Absolute next_ping_transmission; 236 struct GNUNET_TIME_Absolute next_ping_transmission;
233 struct GNUNET_TIME_Relative delta; 237 struct GNUNET_TIME_Absolute time_start;
234}; 238};
235 239
236 240
@@ -540,7 +544,9 @@ struct TrafficGenerator *
540GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src, 544GNUNET_ATS_TEST_generate_traffic_start (struct BenchmarkPeer *src,
541 struct BenchmarkPartner *dest, 545 struct BenchmarkPartner *dest,
542 enum TrafficGeneratorType type, 546 enum TrafficGeneratorType type,
543 unsigned int rate, 547 long int base_rate,
548 long int max_rate,
549 struct GNUNET_TIME_Relative period,
544 struct GNUNET_TIME_Relative duration); 550 struct GNUNET_TIME_Relative duration);
545 551
546void 552void
diff --git a/src/ats-tests/gnunet-ats-sim.c b/src/ats-tests/gnunet-ats-sim.c
index 27a9dae01..02441fffe 100644
--- a/src/ats-tests/gnunet-ats-sim.c
+++ b/src/ats-tests/gnunet-ats-sim.c
@@ -208,11 +208,22 @@ static void topology_setup_done (void *cls,
208 for (c_s = 0; c_s < e->num_slaves; c_s++) 208 for (c_s = 0; c_s < e->num_slaves; c_s++)
209 { 209 {
210 /* Generate maximum traffic to all peers */ 210 /* Generate maximum traffic to all peers */
211 /*
211 GNUNET_ATS_TEST_generate_traffic_start (&masters[c_m], 212 GNUNET_ATS_TEST_generate_traffic_start (&masters[c_m],
212 &masters[c_m].partners[c_s], 213 &masters[c_m].partners[c_s],
213 GNUNET_ATS_TEST_TG_CONSTANT, 214 GNUNET_ATS_TEST_TG_CONSTANT,
214 10000, 215 10000,
215 GNUNET_TIME_UNIT_FOREVER_REL); 216 GNUNET_TIME_UNIT_FOREVER_REL);
217 */
218 /*
219 GNUNET_ATS_TEST_generate_traffic_start (&masters[c_m],
220 &masters[c_m].partners[c_s],
221 GNUNET_ATS_TEST_TG_LINEAR,
222 100,
223 200,
224 GNUNET_TIME_UNIT_MINUTES,
225 GNUNET_TIME_UNIT_FOREVER_REL);
226 */
216 } 227 }
217 } 228 }
218 229