aboutsummaryrefslogtreecommitdiff
path: root/src/ats-tests/perf_ats.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-09-18 09:24:32 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-09-18 09:24:32 +0000
commit8413204fafc0c84783bf3cd1ebee9ab3aa2f0ca7 (patch)
treedb5e68c35205cc5e4599d2a9b8e97bbefa65ab19 /src/ats-tests/perf_ats.c
parent281a7aa769d656ffed541f144b5846205dd45e2d (diff)
downloadgnunet-8413204fafc0c84783bf3cd1ebee9ab3aa2f0ca7.tar.gz
gnunet-8413204fafc0c84783bf3cd1ebee9ab3aa2f0ca7.zip
adding ats preference setting
Diffstat (limited to 'src/ats-tests/perf_ats.c')
-rw-r--r--src/ats-tests/perf_ats.c47
1 files changed, 45 insertions, 2 deletions
diff --git a/src/ats-tests/perf_ats.c b/src/ats-tests/perf_ats.c
index 4c2e96877..a50de992f 100644
--- a/src/ats-tests/perf_ats.c
+++ b/src/ats-tests/perf_ats.c
@@ -35,6 +35,10 @@
35#define DEFAULT_SLAVES_NUM 3 35#define DEFAULT_SLAVES_NUM 3
36#define DEFAULT_MASTERS_NUM 1 36#define DEFAULT_MASTERS_NUM 1
37 37
38#define TEST_ATS_PREFRENCE_FREQUENCY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
39#define TEST_ATS_PREFRENCE_START 1.0
40#define TEST_ATS_PREFRENCE_DELTA 1.0
41
38#define TEST_MESSAGE_TYPE_PING 12345 42#define TEST_MESSAGE_TYPE_PING 12345
39#define TEST_MESSAGE_TYPE_PONG 12346 43#define TEST_MESSAGE_TYPE_PONG 12346
40#define TEST_MESSAGE_SIZE 1000 44#define TEST_MESSAGE_SIZE 1000
@@ -165,6 +169,18 @@ struct BenchmarkPeer
165 struct BenchmarkPeer *pref_partner; 169 struct BenchmarkPeer *pref_partner;
166 170
167 /** 171 /**
172 * Masters only
173 * Progress task
174 */
175 GNUNET_SCHEDULER_TaskIdentifier ats_task;
176
177 /**
178 * Masters only
179 * Progress task
180 */
181 double pref_value;
182
183 /**
168 * Array of partners with num_slaves entries (if master) or 184 * Array of partners with num_slaves entries (if master) or
169 * num_master entries (if slave) 185 * num_master entries (if slave)
170 */ 186 */
@@ -299,10 +315,13 @@ evaluate ()
299 for (c_s = 0; c_s < num_slaves; c_s++) 315 for (c_s = 0; c_s < num_slaves; c_s++)
300 { 316 {
301 fprintf (stderr, 317 fprintf (stderr,
302 "Master [%u] -> Slave [%u]: sent %u KiB/s, received %u KiB/s \n", 318 "%c Master [%u] -> Slave [%u]: sent %u KiB/s (%.2f \%), received %u KiB/s (%.2f \%)\n",
319 (mp->pref_partner == mp->partners[c_s].dest) ? '*' : ' ',
303 mp->no, mp->partners[c_s].dest->no, 320 mp->no, mp->partners[c_s].dest->no,
304 (mp->partners[c_s].bytes_sent / 1024) / duration, 321 (mp->partners[c_s].bytes_sent / 1024) / duration,
305 (mp->partners[c_s].bytes_received / 1024) / duration); 322 ((double) mp->partners[c_s].bytes_sent * 100) / mp->total_bytes_sent,
323 (mp->partners[c_s].bytes_received / 1024) / duration,
324 ((double) mp->partners[c_s].bytes_received * 100) / mp->total_bytes_received );
306 } 325 }
307 } 326 }
308} 327}
@@ -340,6 +359,10 @@ do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
340 mps[c_m].peer_id_op = NULL; 359 mps[c_m].peer_id_op = NULL;
341 } 360 }
342 361
362 if (GNUNET_SCHEDULER_NO_TASK != mps[c_m].ats_task)
363 GNUNET_SCHEDULER_cancel (mps[c_m].ats_task);
364 mps[c_m].ats_task = GNUNET_SCHEDULER_NO_TASK;
365
343 for (c_op = 0; c_op < num_slaves; c_op++) 366 for (c_op = 0; c_op < num_slaves; c_op++)
344 { 367 {
345 368
@@ -494,6 +517,23 @@ print_progress ()
494} 517}
495 518
496static void 519static void
520ats_pref_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
521{
522 struct BenchmarkPeer *me = cls;
523
524 me->ats_task = GNUNET_SCHEDULER_NO_TASK;
525
526 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, " Master [%u] set preference for slave [%u] to %f\n",
527 me->no, me->pref_partner->no, me->pref_value);
528 GNUNET_ATS_performance_change_preference (me->ats_perf_handle,
529 &me->pref_partner->id,
530 pref_val, me->pref_value, GNUNET_ATS_PREFERENCE_END);
531 me->pref_value += TEST_ATS_PREFRENCE_DELTA;
532 me->ats_task = GNUNET_SCHEDULER_add_delayed (TEST_ATS_PREFRENCE_FREQUENCY,
533 &ats_pref_task, cls);
534}
535
536static void
497do_benchmark () 537do_benchmark ()
498{ 538{
499 int c_m; 539 int c_m;
@@ -524,6 +564,8 @@ do_benchmark ()
524 mps[c_m].ch, GNUNET_NO, 0, GNUNET_TIME_UNIT_MINUTES, &sps[c_s].id, 564 mps[c_m].ch, GNUNET_NO, 0, GNUNET_TIME_UNIT_MINUTES, &sps[c_s].id,
525 TEST_MESSAGE_SIZE, &core_send_ready, &mps[c_m].partners[c_s]); 565 TEST_MESSAGE_SIZE, &core_send_ready, &mps[c_m].partners[c_s]);
526 } 566 }
567 if (pref_val != GNUNET_ATS_PREFERENCE_END)
568 mps[c_m].ats_task = GNUNET_SCHEDULER_add_now (&ats_pref_task, &mps[c_m]);
527 } 569 }
528} 570}
529 571
@@ -1037,6 +1079,7 @@ main_run (void *cls, struct GNUNET_TESTBED_RunHandle *h, unsigned int num_peers,
1037 mps[c_m].no = c_m; 1079 mps[c_m].no = c_m;
1038 mps[c_m].master = GNUNET_YES; 1080 mps[c_m].master = GNUNET_YES;
1039 mps[c_m].pref_partner = &sps[c_m]; 1081 mps[c_m].pref_partner = &sps[c_m];
1082 mps[c_m].pref_value = TEST_ATS_PREFRENCE_START;
1040 mps[c_m].partners = 1083 mps[c_m].partners =
1041 GNUNET_malloc (num_slaves * sizeof (struct BenchmarkPeer)); 1084 GNUNET_malloc (num_slaves * sizeof (struct BenchmarkPeer));
1042 /* Initialize partners */ 1085 /* Initialize partners */