diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-06-20 22:16:25 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-06-20 22:16:25 +0000 |
commit | f6f1b9fb73dc4c7f03c70b80b94cfb2a6ce81e65 (patch) | |
tree | 96dedaab7217465eb6ad952beebd3e5d92ae92e1 /src/ats-tests | |
parent | 019338425afc502fc25aeb1896f404a6c0087a2e (diff) | |
download | gnunet-f6f1b9fb73dc4c7f03c70b80b94cfb2a6ce81e65.tar.gz gnunet-f6f1b9fb73dc4c7f03c70b80b94cfb2a6ce81e65.zip |
fix ATS testcase
Diffstat (limited to 'src/ats-tests')
-rw-r--r-- | src/ats-tests/ats-testing-experiment.c | 2 | ||||
-rw-r--r-- | src/ats-tests/ats-testing-log.c | 17 | ||||
-rw-r--r-- | src/ats-tests/ats-testing.c | 65 | ||||
-rw-r--r-- | src/ats-tests/ats-testing.h | 62 | ||||
-rw-r--r-- | src/ats-tests/perf_ats.c | 182 |
5 files changed, 194 insertions, 134 deletions
diff --git a/src/ats-tests/ats-testing-experiment.c b/src/ats-tests/ats-testing-experiment.c index b8da23df9..110a48043 100644 --- a/src/ats-tests/ats-testing-experiment.c +++ b/src/ats-tests/ats-testing-experiment.c | |||
@@ -639,7 +639,7 @@ GNUNET_ATS_TEST_experimentation_run (struct Experiment *e, | |||
639 | 639 | ||
640 | 640 | ||
641 | struct Experiment * | 641 | struct Experiment * |
642 | GNUNET_ATS_TEST_experimentation_load (char *filename) | 642 | GNUNET_ATS_TEST_experimentation_load (const char *filename) |
643 | { | 643 | { |
644 | struct Experiment *e; | 644 | struct Experiment *e; |
645 | struct GNUNET_CONFIGURATION_Handle *cfg; | 645 | struct GNUNET_CONFIGURATION_Handle *cfg; |
diff --git a/src/ats-tests/ats-testing-log.c b/src/ats-tests/ats-testing-log.c index 87af31f5f..2442a8249 100644 --- a/src/ats-tests/ats-testing-log.c +++ b/src/ats-tests/ats-testing-log.c | |||
@@ -227,7 +227,7 @@ struct LoggingHandle | |||
227 | /** | 227 | /** |
228 | * Logging task | 228 | * Logging task |
229 | */ | 229 | */ |
230 | struct GNUNET_SCHEDULER_Task * log_task; | 230 | struct GNUNET_SCHEDULER_Task *log_task; |
231 | 231 | ||
232 | /** | 232 | /** |
233 | * Reference to perf_ats' masters | 233 | * Reference to perf_ats' masters |
@@ -236,7 +236,7 @@ struct LoggingHandle | |||
236 | int num_slaves; | 236 | int num_slaves; |
237 | int running; | 237 | int running; |
238 | int verbose; | 238 | int verbose; |
239 | char *name; | 239 | const char *name; |
240 | struct GNUNET_TIME_Relative frequency; | 240 | struct GNUNET_TIME_Relative frequency; |
241 | 241 | ||
242 | /** | 242 | /** |
@@ -419,11 +419,12 @@ write_bw_gnuplot_script (char * fn, struct LoggingPeer *lp, char **fs, int slave | |||
419 | 419 | ||
420 | void | 420 | void |
421 | GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, | 421 | GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, |
422 | char *experiment_name, int plots) | 422 | const char *experiment_name, |
423 | int plots) | ||
423 | { | 424 | { |
424 | struct GNUNET_DISK_FileHandle *f[l->num_slaves]; | 425 | struct GNUNET_DISK_FileHandle *f[l->num_slaves]; |
425 | struct GNUNET_DISK_FileHandle *f_m; | 426 | struct GNUNET_DISK_FileHandle *f_m; |
426 | char *tmp_exp_name; | 427 | const char *tmp_exp_name; |
427 | char *filename_master; | 428 | char *filename_master; |
428 | char *filename_slaves[l->num_slaves]; | 429 | char *filename_slaves[l->num_slaves]; |
429 | char *data; | 430 | char *data; |
@@ -878,11 +879,15 @@ GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l) | |||
878 | */ | 879 | */ |
879 | struct LoggingHandle * | 880 | struct LoggingHandle * |
880 | GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency, | 881 | GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency, |
881 | char *testname, struct BenchmarkPeer *masters, int num_masters, int num_slaves, | 882 | const char *testname, |
882 | int verbose) | 883 | struct BenchmarkPeer *masters, |
884 | int num_masters, | ||
885 | int num_slaves, | ||
886 | int verbose) | ||
883 | { | 887 | { |
884 | struct LoggingHandle *l; | 888 | struct LoggingHandle *l; |
885 | int c_m; | 889 | int c_m; |
890 | |||
886 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 891 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, |
887 | _("Start logging `%s'\n"), testname); | 892 | _("Start logging `%s'\n"), testname); |
888 | 893 | ||
diff --git a/src/ats-tests/ats-testing.c b/src/ats-tests/ats-testing.c index 24d464424..c894f4445 100644 --- a/src/ats-tests/ats-testing.c +++ b/src/ats-tests/ats-testing.c | |||
@@ -66,7 +66,6 @@ do_shutdown (void *cls) | |||
66 | int c_op; | 66 | int c_op; |
67 | struct BenchmarkPeer *p; | 67 | struct BenchmarkPeer *p; |
68 | 68 | ||
69 | top->shutdown_task = NULL; | ||
70 | top->state.benchmarking = GNUNET_NO; | 69 | top->state.benchmarking = GNUNET_NO; |
71 | 70 | ||
72 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Benchmarking done\n")); | 71 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Benchmarking done\n")); |
@@ -379,7 +378,8 @@ test_recv_cb (void *cls, | |||
379 | 378 | ||
380 | 379 | ||
381 | static void * | 380 | static void * |
382 | transport_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) | 381 | transport_connect_adapter (void *cls, |
382 | const struct GNUNET_CONFIGURATION_Handle *cfg) | ||
383 | { | 383 | { |
384 | struct BenchmarkPeer *me = cls; | 384 | struct BenchmarkPeer *me = cls; |
385 | 385 | ||
@@ -390,6 +390,7 @@ transport_connect_adapter (void *cls, const struct GNUNET_CONFIGURATION_Handle * | |||
390 | return me->th; | 390 | return me->th; |
391 | } | 391 | } |
392 | 392 | ||
393 | |||
393 | static void | 394 | static void |
394 | transport_disconnect_adapter (void *cls, void *op_result) | 395 | transport_disconnect_adapter (void *cls, void *op_result) |
395 | { | 396 | { |
@@ -401,8 +402,9 @@ transport_disconnect_adapter (void *cls, void *op_result) | |||
401 | 402 | ||
402 | 403 | ||
403 | static void | 404 | static void |
404 | connect_completion_callback (void *cls, struct GNUNET_TESTBED_Operation *op, | 405 | connect_completion_callback (void *cls, |
405 | const char *emsg) | 406 | struct GNUNET_TESTBED_Operation *op, |
407 | const char *emsg) | ||
406 | { | 408 | { |
407 | struct TestbedConnectOperation *cop = cls; | 409 | struct TestbedConnectOperation *cop = cls; |
408 | static int ops = 0; | 410 | static int ops = 0; |
@@ -410,8 +412,9 @@ connect_completion_callback (void *cls, struct GNUNET_TESTBED_Operation *op, | |||
410 | if (NULL == emsg) | 412 | if (NULL == emsg) |
411 | { | 413 | { |
412 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 414 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, |
413 | _("Connected master [%u] with slave [%u]\n"), cop->master->no, | 415 | _("Connected master [%u] with slave [%u]\n"), |
414 | cop->slave->no); | 416 | cop->master->no, |
417 | cop->slave->no); | ||
415 | } | 418 | } |
416 | else | 419 | else |
417 | { | 420 | { |
@@ -419,9 +422,7 @@ connect_completion_callback (void *cls, struct GNUNET_TESTBED_Operation *op, | |||
419 | _("Failed to connect master peer [%u] with slave [%u]\n"), | 422 | _("Failed to connect master peer [%u] with slave [%u]\n"), |
420 | cop->master->no, cop->slave->no); | 423 | cop->master->no, cop->slave->no); |
421 | GNUNET_break(0); | 424 | GNUNET_break(0); |
422 | if (NULL != top->shutdown_task) | 425 | GNUNET_SCHEDULER_shutdown (); |
423 | GNUNET_SCHEDULER_cancel (top->shutdown_task); | ||
424 | top->shutdown_task = GNUNET_SCHEDULER_add_now (do_shutdown, NULL ); | ||
425 | } | 426 | } |
426 | GNUNET_TESTBED_operation_done (op); | 427 | GNUNET_TESTBED_operation_done (op); |
427 | ops++; | 428 | ops++; |
@@ -436,6 +437,7 @@ connect_completion_callback (void *cls, struct GNUNET_TESTBED_Operation *op, | |||
436 | } | 437 | } |
437 | } | 438 | } |
438 | 439 | ||
440 | |||
439 | static void | 441 | static void |
440 | do_connect_peers (void *cls) | 442 | do_connect_peers (void *cls) |
441 | { | 443 | { |
@@ -470,9 +472,7 @@ do_connect_peers (void *cls) | |||
470 | _("Could not connect master [%u] and slave [%u]\n"), p->no, | 472 | _("Could not connect master [%u] and slave [%u]\n"), p->no, |
471 | top->sps[c_s].no); | 473 | top->sps[c_s].no); |
472 | GNUNET_break(0); | 474 | GNUNET_break(0); |
473 | if (NULL != top->shutdown_task) | 475 | GNUNET_SCHEDULER_shutdown (); |
474 | GNUNET_SCHEDULER_cancel (top->shutdown_task); | ||
475 | top->shutdown_task = GNUNET_SCHEDULER_add_now (do_shutdown, NULL ); | ||
476 | return; | 476 | return; |
477 | } | 477 | } |
478 | } | 478 | } |
@@ -481,17 +481,19 @@ do_connect_peers (void *cls) | |||
481 | 481 | ||
482 | 482 | ||
483 | static void | 483 | static void |
484 | comm_connect_completion_cb (void *cls, struct GNUNET_TESTBED_Operation *op, | 484 | comm_connect_completion_cb (void *cls, |
485 | void *ca_result, const char *emsg) | 485 | struct GNUNET_TESTBED_Operation *op, |
486 | void *ca_result, | ||
487 | const char *emsg) | ||
486 | { | 488 | { |
487 | static int comm_done = 0; | 489 | static int comm_done = 0; |
490 | |||
488 | if ((NULL != emsg) || (NULL == ca_result)) | 491 | if ((NULL != emsg) || (NULL == ca_result)) |
489 | { | 492 | { |
490 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Initialization failed, shutdown\n")); | 493 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, |
494 | "Initialization failed, shutdown\n"); | ||
491 | GNUNET_break(0); | 495 | GNUNET_break(0); |
492 | if (NULL != top->shutdown_task) | 496 | GNUNET_SCHEDULER_shutdown (); |
493 | GNUNET_SCHEDULER_cancel (top->shutdown_task); | ||
494 | top->shutdown_task = GNUNET_SCHEDULER_add_now (do_shutdown, NULL ); | ||
495 | return; | 497 | return; |
496 | } | 498 | } |
497 | comm_done++; | 499 | comm_done++; |
@@ -505,6 +507,7 @@ comm_connect_completion_cb (void *cls, struct GNUNET_TESTBED_Operation *op, | |||
505 | } | 507 | } |
506 | } | 508 | } |
507 | 509 | ||
510 | |||
508 | static void | 511 | static void |
509 | do_comm_connect (void *cls) | 512 | do_comm_connect (void *cls) |
510 | { | 513 | { |
@@ -631,11 +634,10 @@ ats_connect_completion_cb (void *cls, struct GNUNET_TESTBED_Operation *op, | |||
631 | 634 | ||
632 | if ((NULL != emsg) || (NULL == ca_result)) | 635 | if ((NULL != emsg) || (NULL == ca_result)) |
633 | { | 636 | { |
634 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Initialization failed, shutdown\n")); | 637 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, |
638 | "Initialization failed, shutdown\n"); | ||
635 | GNUNET_break(0); | 639 | GNUNET_break(0); |
636 | if (NULL != top->shutdown_task) | 640 | GNUNET_SCHEDULER_shutdown (); |
637 | GNUNET_SCHEDULER_cancel (top->shutdown_task); | ||
638 | top->shutdown_task = GNUNET_SCHEDULER_add_now (do_shutdown, NULL ); | ||
639 | return; | 641 | return; |
640 | } | 642 | } |
641 | op_done++; | 643 | op_done++; |
@@ -721,15 +723,18 @@ main_run (void *cls, struct GNUNET_TESTBED_RunHandle *h, | |||
721 | { | 723 | { |
722 | int c_m; | 724 | int c_m; |
723 | int c_s; | 725 | int c_s; |
726 | |||
724 | GNUNET_assert(NULL == cls); | 727 | GNUNET_assert(NULL == cls); |
725 | GNUNET_assert(top->num_masters + top->num_slaves == num_peers); | 728 | GNUNET_assert(top->num_masters + top->num_slaves == num_peers); |
726 | GNUNET_assert(NULL != peers_); | 729 | GNUNET_assert(NULL != peers_); |
727 | 730 | ||
728 | top->shutdown_task = GNUNET_SCHEDULER_add_delayed ( | 731 | GNUNET_SCHEDULER_add_shutdown (&do_shutdown, |
729 | GNUNET_TIME_UNIT_FOREVER_REL, &do_shutdown, top); | 732 | top); |
730 | 733 | ||
731 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Setting up %u masters and %u slaves\n", | 734 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
732 | top->num_masters, top->num_slaves); | 735 | "Setting up %u masters and %u slaves\n", |
736 | top->num_masters, | ||
737 | top->num_slaves); | ||
733 | 738 | ||
734 | /* Setup master peers */ | 739 | /* Setup master peers */ |
735 | for (c_m = 0; c_m < top->num_masters; c_m++) | 740 | for (c_m = 0; c_m < top->num_masters; c_m++) |
@@ -791,9 +796,8 @@ main_run (void *cls, struct GNUNET_TESTBED_RunHandle *h, | |||
791 | */ | 796 | */ |
792 | static void | 797 | static void |
793 | controller_event_cb (void *cls, | 798 | controller_event_cb (void *cls, |
794 | const struct GNUNET_TESTBED_EventInformation *event) | 799 | const struct GNUNET_TESTBED_EventInformation *event) |
795 | { | 800 | { |
796 | struct GNUNET_ATS_TEST_Topology *top = cls; | ||
797 | switch (event->type) | 801 | switch (event->type) |
798 | { | 802 | { |
799 | case GNUNET_TESTBED_ET_CONNECT: | 803 | case GNUNET_TESTBED_ET_CONNECT: |
@@ -802,11 +806,11 @@ controller_event_cb (void *cls, | |||
802 | break; | 806 | break; |
803 | default: | 807 | default: |
804 | GNUNET_break(0); | 808 | GNUNET_break(0); |
805 | GNUNET_SCHEDULER_cancel (top->shutdown_task); | 809 | GNUNET_SCHEDULER_shutdown (); |
806 | top->shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL ); | ||
807 | } | 810 | } |
808 | } | 811 | } |
809 | 812 | ||
813 | |||
810 | struct BenchmarkPeer * | 814 | struct BenchmarkPeer * |
811 | GNUNET_ATS_TEST_get_peer (int src) | 815 | GNUNET_ATS_TEST_get_peer (int src) |
812 | { | 816 | { |
@@ -815,6 +819,7 @@ GNUNET_ATS_TEST_get_peer (int src) | |||
815 | return &top->mps[src]; | 819 | return &top->mps[src]; |
816 | } | 820 | } |
817 | 821 | ||
822 | |||
818 | struct BenchmarkPartner * | 823 | struct BenchmarkPartner * |
819 | GNUNET_ATS_TEST_get_partner (int src, int dest) | 824 | GNUNET_ATS_TEST_get_partner (int src, int dest) |
820 | { | 825 | { |
diff --git a/src/ats-tests/ats-testing.h b/src/ats-tests/ats-testing.h index 74da0f78c..b2a4d13e6 100644 --- a/src/ats-tests/ats-testing.h +++ b/src/ats-tests/ats-testing.h | |||
@@ -377,14 +377,9 @@ struct BenchmarkState | |||
377 | struct GNUNET_ATS_TEST_Topology | 377 | struct GNUNET_ATS_TEST_Topology |
378 | { | 378 | { |
379 | /** | 379 | /** |
380 | * Shutdown task | ||
381 | */ | ||
382 | struct GNUNET_SCHEDULER_Task * shutdown_task; | ||
383 | |||
384 | /** | ||
385 | * Progress task | 380 | * Progress task |
386 | */ | 381 | */ |
387 | struct GNUNET_SCHEDULER_Task * progress_task; | 382 | struct GNUNET_SCHEDULER_Task *progress_task; |
388 | 383 | ||
389 | /** | 384 | /** |
390 | * Test result | 385 | * Test result |
@@ -544,8 +539,9 @@ extern struct GNUNET_CONFIGURATION_Handle *cfg; | |||
544 | */ | 539 | */ |
545 | void | 540 | void |
546 | GNUNET_ATS_TEST_experimentation_run (struct Experiment *e, | 541 | GNUNET_ATS_TEST_experimentation_run (struct Experiment *e, |
547 | GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb, | 542 | GNUNET_ATS_TESTING_EpisodeDoneCallback ep_done_cb, |
548 | GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb); | 543 | GNUNET_ATS_TESTING_ExperimentDoneCallback e_done_cb); |
544 | |||
549 | 545 | ||
550 | /** | 546 | /** |
551 | * Load an experiment from a file | 547 | * Load an experiment from a file |
@@ -554,7 +550,7 @@ GNUNET_ATS_TEST_experimentation_run (struct Experiment *e, | |||
554 | * @return the Experiment or NULL on failure | 550 | * @return the Experiment or NULL on failure |
555 | */ | 551 | */ |
556 | struct Experiment * | 552 | struct Experiment * |
557 | GNUNET_ATS_TEST_experimentation_load (char *filename); | 553 | GNUNET_ATS_TEST_experimentation_load (const char *filename); |
558 | 554 | ||
559 | 555 | ||
560 | /** | 556 | /** |
@@ -606,7 +602,8 @@ GNUNET_ATS_TEST_generate_traffic_stop (struct TrafficGenerator *tg); | |||
606 | * Stop all traffic generators | 602 | * Stop all traffic generators |
607 | */ | 603 | */ |
608 | void | 604 | void |
609 | GNUNET_ATS_TEST_generate_traffic_stop_all (); | 605 | GNUNET_ATS_TEST_generate_traffic_stop_all (void); |
606 | |||
610 | 607 | ||
611 | /** | 608 | /** |
612 | * Generate between the source master and the partner and set preferences with a | 609 | * Generate between the source master and the partner and set preferences with a |
@@ -635,8 +632,9 @@ GNUNET_ATS_TEST_generate_preferences_start (struct BenchmarkPeer *src, | |||
635 | void | 632 | void |
636 | GNUNET_ATS_TEST_generate_preferences_stop (struct PreferenceGenerator *pg); | 633 | GNUNET_ATS_TEST_generate_preferences_stop (struct PreferenceGenerator *pg); |
637 | 634 | ||
635 | |||
638 | void | 636 | void |
639 | GNUNET_ATS_TEST_generate_preferences_stop_all (); | 637 | GNUNET_ATS_TEST_generate_preferences_stop_all (void); |
640 | 638 | ||
641 | /* | 639 | /* |
642 | * Logging related functions | 640 | * Logging related functions |
@@ -655,8 +653,12 @@ GNUNET_ATS_TEST_generate_preferences_stop_all (); | |||
655 | */ | 653 | */ |
656 | struct LoggingHandle * | 654 | struct LoggingHandle * |
657 | GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency, | 655 | GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency, |
658 | char *testname, struct BenchmarkPeer *masters, int num_masters, int num_slaves, | 656 | const char *testname, |
659 | int verbose); | 657 | struct BenchmarkPeer *masters, |
658 | int num_masters, | ||
659 | int num_slaves, | ||
660 | int verbose); | ||
661 | |||
660 | 662 | ||
661 | /** | 663 | /** |
662 | * Stop logging | 664 | * Stop logging |
@@ -666,6 +668,7 @@ GNUNET_ATS_TEST_logging_start(struct GNUNET_TIME_Relative log_frequency, | |||
666 | void | 668 | void |
667 | GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l); | 669 | GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l); |
668 | 670 | ||
671 | |||
669 | /** | 672 | /** |
670 | * Stop logging | 673 | * Stop logging |
671 | * | 674 | * |
@@ -674,6 +677,7 @@ GNUNET_ATS_TEST_logging_clean_up (struct LoggingHandle *l); | |||
674 | void | 677 | void |
675 | GNUNET_ATS_TEST_logging_stop (struct LoggingHandle *l); | 678 | GNUNET_ATS_TEST_logging_stop (struct LoggingHandle *l); |
676 | 679 | ||
680 | |||
677 | /** | 681 | /** |
678 | * Log all data now | 682 | * Log all data now |
679 | * | 683 | * |
@@ -688,22 +692,25 @@ GNUNET_ATS_TEST_logging_now (struct LoggingHandle *l); | |||
688 | * | 692 | * |
689 | * @param l logging handle to use | 693 | * @param l logging handle to use |
690 | * @param test_name name of the current test | 694 | * @param test_name name of the current test |
691 | * @param plots create gnuplots: GNUNET_YES or GNUNET_NO | 695 | * @param plots create gnuplots: #GNUNET_YES or #GNUNET_NO |
692 | */ | 696 | */ |
693 | void | 697 | void |
694 | GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, | 698 | GNUNET_ATS_TEST_logging_write_to_file (struct LoggingHandle *l, |
695 | char *test_name, int plots); | 699 | const char *test_name, |
700 | int plots); | ||
696 | 701 | ||
697 | /* | 702 | |
703 | /** | ||
698 | * Topology related functions | 704 | * Topology related functions |
699 | */ | 705 | */ |
700 | |||
701 | struct BenchmarkPeer * | 706 | struct BenchmarkPeer * |
702 | GNUNET_ATS_TEST_get_peer (int src); | 707 | GNUNET_ATS_TEST_get_peer (int src); |
703 | 708 | ||
709 | |||
704 | struct BenchmarkPartner * | 710 | struct BenchmarkPartner * |
705 | GNUNET_ATS_TEST_get_partner (int src, int dest); | 711 | GNUNET_ATS_TEST_get_partner (int src, int dest); |
706 | 712 | ||
713 | |||
707 | /** | 714 | /** |
708 | * Create a topology for ats testing | 715 | * Create a topology for ats testing |
709 | * | 716 | * |
@@ -711,21 +718,23 @@ GNUNET_ATS_TEST_get_partner (int src, int dest); | |||
711 | * @param cfg_file configuration file to use for the peers | 718 | * @param cfg_file configuration file to use for the peers |
712 | * @param num_slaves number of slaves | 719 | * @param num_slaves number of slaves |
713 | * @param num_masters number of masters | 720 | * @param num_masters number of masters |
714 | * @param test_core connect to CORE service (GNUNET_YES) or transport (GNUNET_NO) | 721 | * @param test_core connect to CORE service (#GNUNET_YES) or transport (#GNUNET_NO) |
715 | * @param done_cb function to call when topology is setup | 722 | * @param done_cb function to call when topology is setup |
716 | * @param done_cb_cls cls for callback | 723 | * @param done_cb_cls cls for callback |
717 | * @param transport_recv_cb callback to call when data are received | 724 | * @param transport_recv_cb callback to call when data are received |
718 | * @param log_request_cb callback to call when logging is required | 725 | * @param log_request_cb callback to call when logging is required |
719 | */ | 726 | */ |
720 | void | 727 | void |
721 | GNUNET_ATS_TEST_create_topology (char *name, char *cfg_file, | 728 | GNUNET_ATS_TEST_create_topology (char *name, |
722 | unsigned int num_slaves, | 729 | char *cfg_file, |
723 | unsigned int num_masters, | 730 | unsigned int num_slaves, |
724 | int test_core, | 731 | unsigned int num_masters, |
725 | GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb, | 732 | int test_core, |
726 | void *done_cb_cls, | 733 | GNUNET_ATS_TEST_TopologySetupDoneCallback done_cb, |
727 | GNUNET_TRANSPORT_ReceiveCallback recv_cb, | 734 | void *done_cb_cls, |
728 | GNUNET_ATS_TEST_LogRequest ats_perf_cb); | 735 | GNUNET_TRANSPORT_ReceiveCallback recv_cb, |
736 | GNUNET_ATS_TEST_LogRequest ats_perf_cb); | ||
737 | |||
729 | 738 | ||
730 | /** | 739 | /** |
731 | * Shutdown topology | 740 | * Shutdown topology |
@@ -733,4 +742,5 @@ GNUNET_ATS_TEST_create_topology (char *name, char *cfg_file, | |||
733 | void | 742 | void |
734 | GNUNET_ATS_TEST_shutdown_topology (void); | 743 | GNUNET_ATS_TEST_shutdown_topology (void); |
735 | 744 | ||
745 | |||
736 | /* end of file ats-testing.h */ | 746 | /* end of file ats-testing.h */ |
diff --git a/src/ats-tests/perf_ats.c b/src/ats-tests/perf_ats.c index 4c22043e5..0e4056a6c 100644 --- a/src/ats-tests/perf_ats.c +++ b/src/ats-tests/perf_ats.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of GNUnet. | 2 | This file is part of GNUnet. |
3 | Copyright (C) 2010-2013 GNUnet e.V. | 3 | Copyright (C) 2010-2013, 2016 GNUnet e.V. |
4 | 4 | ||
5 | GNUnet is free software; you can redistribute it and/or modify | 5 | GNUnet is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published | 6 | it under the terms of the GNU General Public License as published |
@@ -43,15 +43,16 @@ | |||
43 | #define TESTNAME_PREFIX "perf_ats_" | 43 | #define TESTNAME_PREFIX "perf_ats_" |
44 | #define DEFAULT_SLAVES_NUM 2 | 44 | #define DEFAULT_SLAVES_NUM 2 |
45 | #define DEFAULT_MASTERS_NUM 1 | 45 | #define DEFAULT_MASTERS_NUM 1 |
46 | |||
46 | /** | 47 | /** |
47 | * Shutdown task | 48 | * timeout task |
48 | */ | 49 | */ |
49 | static struct GNUNET_SCHEDULER_Task * shutdown_task; | 50 | static struct GNUNET_SCHEDULER_Task *timeout_task; |
50 | 51 | ||
51 | /** | 52 | /** |
52 | * Progress task | 53 | * Progress task |
53 | */ | 54 | */ |
54 | static struct GNUNET_SCHEDULER_Task * progress_task; | 55 | static struct GNUNET_SCHEDULER_Task *progress_task; |
55 | 56 | ||
56 | /** | 57 | /** |
57 | * Test result | 58 | * Test result |
@@ -63,7 +64,8 @@ static int result; | |||
63 | */ | 64 | */ |
64 | static int logging; | 65 | static int logging; |
65 | 66 | ||
66 | /**Test core (GNUNET_YES) or transport (GNUNET_NO) | 67 | /** |
68 | * Test core (#GNUNET_YES) or transport (#GNUNET_NO) | ||
67 | */ | 69 | */ |
68 | static int test_core; | 70 | static int test_core; |
69 | 71 | ||
@@ -119,6 +121,7 @@ static struct BenchmarkPeer *sps; | |||
119 | 121 | ||
120 | static struct LoggingHandle *l; | 122 | static struct LoggingHandle *l; |
121 | 123 | ||
124 | |||
122 | static void | 125 | static void |
123 | evaluate () | 126 | evaluate () |
124 | { | 127 | { |
@@ -138,6 +141,8 @@ evaluate () | |||
138 | for (c_m = 0; c_m < num_masters; c_m++) | 141 | for (c_m = 0; c_m < num_masters; c_m++) |
139 | { | 142 | { |
140 | mp = &mps[c_m]; | 143 | mp = &mps[c_m]; |
144 | if (NULL == mp) | ||
145 | continue; | ||
141 | fprintf (stderr, | 146 | fprintf (stderr, |
142 | _("Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. = %u KiB/s\n"), | 147 | _("Master [%u]: sent: %u KiB in %u sec. = %u KiB/s, received: %u KiB in %u sec. = %u KiB/s\n"), |
143 | mp->no, mp->total_bytes_sent / 1024, duration, | 148 | mp->no, mp->total_bytes_sent / 1024, duration, |
@@ -148,7 +153,8 @@ evaluate () | |||
148 | for (c_s = 0; c_s < num_slaves; c_s++) | 153 | for (c_s = 0; c_s < num_slaves; c_s++) |
149 | { | 154 | { |
150 | p = &mp->partners[c_s]; | 155 | p = &mp->partners[c_s]; |
151 | 156 | if (NULL == p) | |
157 | continue; | ||
152 | kb_sent_sec = 0; | 158 | kb_sent_sec = 0; |
153 | kb_recv_sec = 0; | 159 | kb_recv_sec = 0; |
154 | kb_sent_percent = 0.0; | 160 | kb_sent_percent = 0.0; |
@@ -168,19 +174,20 @@ evaluate () | |||
168 | if (1000 * p->messages_sent > 0) | 174 | if (1000 * p->messages_sent > 0) |
169 | rtt = p->total_app_rtt / (1000 * p->messages_sent); | 175 | rtt = p->total_app_rtt / (1000 * p->messages_sent); |
170 | fprintf (stderr, | 176 | fprintf (stderr, |
171 | "%c Master [%u] -> Slave [%u]: sent %u KiB/s (%.2f %%), received %u KiB/s (%.2f %%)\n", | 177 | "%c Master [%u] -> Slave [%u]: sent %u KiB/s (%.2f %%), received %u KiB/s (%.2f %%)\n", |
172 | (mp->pref_partner == p->dest) ? '*' : ' ', | 178 | (mp->pref_partner == p->dest) ? '*' : ' ', |
173 | mp->no, p->dest->no, | 179 | mp->no, p->dest->no, |
174 | kb_sent_sec, kb_sent_percent, | 180 | kb_sent_sec, kb_sent_percent, |
175 | kb_recv_sec, kb_recv_percent); | 181 | kb_recv_sec, kb_recv_percent); |
176 | fprintf (stderr, | 182 | fprintf (stderr, |
177 | "%c Master [%u] -> Slave [%u]: Average application layer RTT: %u ms\n", | 183 | "%c Master [%u] -> Slave [%u]: Average application layer RTT: %u ms\n", |
178 | (mp->pref_partner == p->dest) ? '*' : ' ', | 184 | (mp->pref_partner == p->dest) ? '*' : ' ', |
179 | mp->no, p->dest->no, rtt); | 185 | mp->no, p->dest->no, rtt); |
180 | } | 186 | } |
181 | } | 187 | } |
182 | } | 188 | } |
183 | 189 | ||
190 | |||
184 | /** | 191 | /** |
185 | * Shutdown nicely | 192 | * Shutdown nicely |
186 | * | 193 | * |
@@ -189,37 +196,55 @@ evaluate () | |||
189 | static void | 196 | static void |
190 | do_shutdown (void *cls) | 197 | do_shutdown (void *cls) |
191 | { | 198 | { |
192 | |||
193 | if (GNUNET_YES == logging) | 199 | if (GNUNET_YES == logging) |
194 | GNUNET_ATS_TEST_logging_clean_up(l); | 200 | GNUNET_ATS_TEST_logging_clean_up(l); |
195 | 201 | if (NULL != timeout_task) | |
196 | shutdown_task = NULL; | 202 | { |
203 | GNUNET_SCHEDULER_cancel (timeout_task); | ||
204 | timeout_task = NULL; | ||
205 | } | ||
197 | if (NULL != progress_task) | 206 | if (NULL != progress_task) |
198 | { | 207 | { |
199 | fprintf (stderr, "0\n"); | 208 | fprintf (stderr, "0\n"); |
200 | GNUNET_SCHEDULER_cancel (progress_task); | 209 | GNUNET_SCHEDULER_cancel (progress_task); |
210 | progress_task = NULL; | ||
201 | } | 211 | } |
202 | progress_task = NULL; | 212 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
213 | "Benchmarking done\n"); | ||
214 | GNUNET_ATS_TEST_shutdown_topology (); | ||
215 | } | ||
203 | 216 | ||
204 | evaluate (); | ||
205 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Benchmarking done\n")); | ||
206 | 217 | ||
207 | GNUNET_ATS_TEST_shutdown_topology(); | 218 | /** |
219 | * Shutdown nicely | ||
220 | * | ||
221 | * @param cls NULL | ||
222 | */ | ||
223 | static void | ||
224 | do_timeout (void *cls) | ||
225 | { | ||
226 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
227 | "Terminating with timeout\n"); | ||
228 | timeout_task = NULL; | ||
229 | evaluate (); | ||
230 | GNUNET_SCHEDULER_shutdown (); | ||
208 | } | 231 | } |
209 | 232 | ||
210 | 233 | ||
211 | static void | 234 | static void |
212 | print_progress () | 235 | print_progress (void *cls) |
213 | { | 236 | { |
214 | static int calls; | 237 | static int calls; |
215 | progress_task = NULL; | ||
216 | 238 | ||
217 | fprintf (stderr, "%llu..", | 239 | progress_task = NULL; |
218 | (long long unsigned) perf_duration.rel_value_us / (1000 * 1000) - calls); | 240 | fprintf (stderr, |
241 | "%llu..", | ||
242 | (long long unsigned) perf_duration.rel_value_us / (1000 * 1000) - calls); | ||
219 | calls++; | 243 | calls++; |
220 | 244 | ||
221 | progress_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, | 245 | progress_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, |
222 | &print_progress, NULL ); | 246 | &print_progress, |
247 | NULL); | ||
223 | } | 248 | } |
224 | 249 | ||
225 | 250 | ||
@@ -240,56 +265,65 @@ ats_pref_task (void *cls) | |||
240 | &ats_pref_task, cls); | 265 | &ats_pref_task, cls); |
241 | } | 266 | } |
242 | 267 | ||
268 | |||
243 | static void | 269 | static void |
244 | start_benchmark() | 270 | start_benchmark (void *cls) |
245 | { | 271 | { |
246 | int c_m; | 272 | int c_m; |
247 | int c_s; | 273 | int c_s; |
248 | 274 | ||
249 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Benchmarking start\n")); | 275 | progress_task = GNUNET_SCHEDULER_add_now (&print_progress, |
250 | 276 | NULL); | |
251 | if (NULL != shutdown_task) | ||
252 | GNUNET_SCHEDULER_cancel(shutdown_task); | ||
253 | shutdown_task = GNUNET_SCHEDULER_add_delayed(perf_duration, &do_shutdown, | ||
254 | NULL ); | ||
255 | |||
256 | progress_task = GNUNET_SCHEDULER_add_now(&print_progress, NULL ); | ||
257 | 277 | ||
258 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 278 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, |
259 | "Topology connected, start benchmarking...\n"); | 279 | "Topology connected, start benchmarking...\n"); |
260 | 280 | ||
261 | /* Start sending test messages */ | 281 | /* Start sending test messages */ |
262 | for (c_m = 0; c_m < num_masters; c_m++) | 282 | for (c_m = 0; c_m < num_masters; c_m++) |
283 | { | ||
284 | for (c_s = 0; c_s < num_slaves; c_s++) | ||
263 | { | 285 | { |
264 | for (c_s = 0; c_s < num_slaves; c_s++) | 286 | GNUNET_ATS_TEST_generate_traffic_start (&mps[c_m], |
265 | { | 287 | &mps[c_m].partners[c_s], |
266 | GNUNET_ATS_TEST_generate_traffic_start (&mps[c_m], &mps[c_m].partners[c_s], | 288 | GNUNET_ATS_TEST_TG_LINEAR, |
267 | GNUNET_ATS_TEST_TG_LINEAR, UINT32_MAX, UINT32_MAX, | 289 | UINT32_MAX, |
268 | GNUNET_TIME_UNIT_MINUTES, GNUNET_TIME_UNIT_FOREVER_REL); | 290 | UINT32_MAX, |
269 | } | 291 | GNUNET_TIME_UNIT_MINUTES, |
270 | if (pref_val != GNUNET_ATS_PREFERENCE_END) | 292 | GNUNET_TIME_UNIT_FOREVER_REL); |
271 | mps[c_m].ats_task = GNUNET_SCHEDULER_add_now(&ats_pref_task, &mps[c_m]); | ||
272 | } | 293 | } |
294 | if (pref_val != GNUNET_ATS_PREFERENCE_END) | ||
295 | mps[c_m].ats_task = GNUNET_SCHEDULER_add_now (&ats_pref_task, | ||
296 | &mps[c_m]); | ||
297 | } | ||
273 | 298 | ||
274 | if (GNUNET_YES == logging) | 299 | if (GNUNET_YES == logging) |
275 | l = GNUNET_ATS_TEST_logging_start (log_frequency, testname, mps, | 300 | l = GNUNET_ATS_TEST_logging_start (log_frequency, |
276 | num_masters, num_slaves, GNUNET_NO); | 301 | testname, mps, |
302 | num_masters, num_slaves, | ||
303 | GNUNET_NO); | ||
277 | } | 304 | } |
278 | 305 | ||
306 | |||
279 | static void | 307 | static void |
280 | do_benchmark (void *cls, struct BenchmarkPeer *masters, struct BenchmarkPeer *slaves) | 308 | do_benchmark (void *cls, |
309 | struct BenchmarkPeer *masters, | ||
310 | struct BenchmarkPeer *slaves) | ||
281 | { | 311 | { |
282 | mps = masters; | 312 | mps = masters; |
283 | sps = slaves; | 313 | sps = slaves; |
284 | 314 | GNUNET_SCHEDULER_add_shutdown (&do_shutdown, | |
285 | GNUNET_SCHEDULER_add_now(&start_benchmark, NULL); | 315 | NULL); |
316 | timeout_task = GNUNET_SCHEDULER_add_delayed (perf_duration, | ||
317 | &do_timeout, | ||
318 | NULL); | ||
319 | progress_task = GNUNET_SCHEDULER_add_now (&start_benchmark, | ||
320 | NULL); | ||
286 | } | 321 | } |
287 | 322 | ||
288 | 323 | ||
289 | |||
290 | |||
291 | static struct BenchmarkPartner * | 324 | static struct BenchmarkPartner * |
292 | find_partner (struct BenchmarkPeer *me, const struct GNUNET_PeerIdentity * peer) | 325 | find_partner (struct BenchmarkPeer *me, |
326 | const struct GNUNET_PeerIdentity *peer) | ||
293 | { | 327 | { |
294 | int c_m; | 328 | int c_m; |
295 | GNUNET_assert (NULL != me); | 329 | GNUNET_assert (NULL != me); |
@@ -307,20 +341,23 @@ find_partner (struct BenchmarkPeer *me, const struct GNUNET_PeerIdentity * peer) | |||
307 | return NULL; | 341 | return NULL; |
308 | } | 342 | } |
309 | 343 | ||
344 | |||
310 | static void | 345 | static void |
311 | test_recv_cb (void *cls, | 346 | test_recv_cb (void *cls, |
312 | const struct GNUNET_PeerIdentity * peer, | 347 | const struct GNUNET_PeerIdentity * peer, |
313 | const struct GNUNET_MessageHeader * message) | 348 | const struct GNUNET_MessageHeader * message) |
314 | { | 349 | { |
315 | 350 | ||
316 | } | 351 | } |
317 | 352 | ||
318 | 353 | ||
319 | static void | 354 | static void |
320 | log_request_cb (void *cls, const struct GNUNET_HELLO_Address *address, | 355 | log_request_cb (void *cls, |
321 | int address_active, struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, | 356 | const struct GNUNET_HELLO_Address *address, |
322 | struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, | 357 | int address_active, |
323 | const struct GNUNET_ATS_Properties *ats) | 358 | struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out, |
359 | struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in, | ||
360 | const struct GNUNET_ATS_Properties *ats) | ||
324 | { | 361 | { |
325 | struct BenchmarkPeer *me = cls; | 362 | struct BenchmarkPeer *me = cls; |
326 | struct BenchmarkPartner *p; | 363 | struct BenchmarkPartner *p; |
@@ -341,12 +378,13 @@ log_request_cb (void *cls, const struct GNUNET_HELLO_Address *address, | |||
341 | p->bandwidth_in = ntohl (bandwidth_in.value__); | 378 | p->bandwidth_in = ntohl (bandwidth_in.value__); |
342 | p->bandwidth_out = ntohl (bandwidth_out.value__); | 379 | p->bandwidth_out = ntohl (bandwidth_out.value__); |
343 | 380 | ||
344 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%s [%u] received ATS information for peers `%s'\n", | 381 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
345 | (GNUNET_YES == p->me->master) ? "Master" : "Slave", | 382 | "%s [%u] received ATS information for peers `%s'\n", |
346 | p->me->no, | 383 | (GNUNET_YES == p->me->master) ? "Master" : "Slave", |
347 | GNUNET_i2s (&p->dest->id)); | 384 | p->me->no, |
385 | GNUNET_i2s (&p->dest->id)); | ||
348 | 386 | ||
349 | GNUNET_free(peer_id); | 387 | GNUNET_free (peer_id); |
350 | if (NULL != l) | 388 | if (NULL != l) |
351 | GNUNET_ATS_TEST_logging_now (l); | 389 | GNUNET_ATS_TEST_logging_now (l); |
352 | } | 390 | } |
@@ -534,7 +572,8 @@ main (int argc, char *argv[]) | |||
534 | 572 | ||
535 | if (num_slaves < num_masters) | 573 | if (num_slaves < num_masters) |
536 | { | 574 | { |
537 | fprintf (stderr, "Number of master peers is lower than slaves! exit...\n"); | 575 | fprintf (stderr, |
576 | "Number of master peers is lower than slaves! exit...\n"); | ||
538 | GNUNET_free(test_name); | 577 | GNUNET_free(test_name); |
539 | GNUNET_free(solver); | 578 | GNUNET_free(solver); |
540 | GNUNET_free(pref_str); | 579 | GNUNET_free(pref_str); |
@@ -545,13 +584,14 @@ main (int argc, char *argv[]) | |||
545 | /** | 584 | /** |
546 | * Setup the topology | 585 | * Setup the topology |
547 | */ | 586 | */ |
548 | GNUNET_ATS_TEST_create_topology ("perf-ats", conf_name, | 587 | GNUNET_ATS_TEST_create_topology ("perf-ats", |
549 | num_slaves, num_masters, | 588 | conf_name, |
550 | test_core, | 589 | num_slaves, num_masters, |
551 | &do_benchmark, | 590 | test_core, |
552 | NULL, | 591 | &do_benchmark, |
553 | &test_recv_cb, | 592 | NULL, |
554 | &log_request_cb); | 593 | &test_recv_cb, |
594 | &log_request_cb); | ||
555 | 595 | ||
556 | return result; | 596 | return result; |
557 | } | 597 | } |