diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2014-01-27 15:07:27 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2014-01-27 15:07:27 +0000 |
commit | 2e7e731865654bde25f222151b70b5b96df67d52 (patch) | |
tree | 61bd064e31d814cd809f34f924ea19f77d9dac22 /src/ats/perf_ats_solver.c | |
parent | aba203f8b2d14db50d69b0f81f7d33e948f56308 (diff) | |
download | gnunet-2e7e731865654bde25f222151b70b5b96df67d52.tar.gz gnunet-2e7e731865654bde25f222151b70b5b96df67d52.zip |
average calculation
Diffstat (limited to 'src/ats/perf_ats_solver.c')
-rw-r--r-- | src/ats/perf_ats_solver.c | 79 |
1 files changed, 76 insertions, 3 deletions
diff --git a/src/ats/perf_ats_solver.c b/src/ats/perf_ats_solver.c index 6c1f7abaf..6f1a1a921 100644 --- a/src/ats/perf_ats_solver.c +++ b/src/ats/perf_ats_solver.c | |||
@@ -110,8 +110,16 @@ struct PerfHandle | |||
110 | * */ | 110 | * */ |
111 | struct GNUNET_ATS_PluginEnvironment env; | 111 | struct GNUNET_ATS_PluginEnvironment env; |
112 | 112 | ||
113 | /** | ||
114 | * Array for results for each iteration with length iterations | ||
115 | */ | ||
113 | struct Iteration *iterations_results; | 116 | struct Iteration *iterations_results; |
114 | 117 | ||
118 | /** | ||
119 | * Array to store averaged result with length #peers | ||
120 | */ | ||
121 | struct Result *averaged_result; | ||
122 | |||
115 | struct Result *current_result; | 123 | struct Result *current_result; |
116 | 124 | ||
117 | int current_p; | 125 | int current_p; |
@@ -700,7 +708,7 @@ write_gnuplot_script (char * data_fn, int full) | |||
700 | /** | 708 | /** |
701 | * Evaluate results for a specific iteration | 709 | * Evaluate results for a specific iteration |
702 | * | 710 | * |
703 | * @oaram iteration the iteration to evaluate | 711 | * @param iteration the iteration to evaluate |
704 | */ | 712 | */ |
705 | 713 | ||
706 | static void | 714 | static void |
@@ -753,7 +761,11 @@ evaluate (int iteration) | |||
753 | data_fn_update = NULL; | 761 | data_fn_update = NULL; |
754 | if ((ph.create_plot) && (GNUNET_YES == ph.measure_updates)) | 762 | if ((ph.create_plot) && (GNUNET_YES == ph.measure_updates)) |
755 | { | 763 | { |
756 | GNUNET_asprintf (&data_fn_update, "perf_%s_update_%u_%u_%u.data", ph.ats_string, ph.N_peers_start, ph.N_peers_end, ph.N_address); | 764 | GNUNET_asprintf (&data_fn_update, "perf_%s_update_%u_%u_%u.data", |
765 | ph.ats_string, | ||
766 | ph.N_peers_start, | ||
767 | ph.N_peers_end, | ||
768 | ph.N_address); | ||
757 | f_update = GNUNET_DISK_file_open (data_fn_update, | 769 | f_update = GNUNET_DISK_file_open (data_fn_update, |
758 | GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE, | 770 | GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE, |
759 | GNUNET_DISK_PERM_USER_EXEC | GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE); | 771 | GNUNET_DISK_PERM_USER_EXEC | GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE); |
@@ -775,7 +787,6 @@ evaluate (int iteration) | |||
775 | write_gnuplot_script (data_fn_update, GNUNET_NO); | 787 | write_gnuplot_script (data_fn_update, GNUNET_NO); |
776 | } | 788 | } |
777 | 789 | ||
778 | |||
779 | next = ph.iterations_results[ph.current_iteration -1].result_head; | 790 | next = ph.iterations_results[ph.current_iteration -1].result_head; |
780 | while (NULL != (cur = next)) | 791 | while (NULL != (cur = next)) |
781 | { | 792 | { |
@@ -786,8 +797,15 @@ evaluate (int iteration) | |||
786 | str_d_mlp = NULL; | 797 | str_d_mlp = NULL; |
787 | 798 | ||
788 | /* Print log */ | 799 | /* Print log */ |
800 | ph.averaged_result[cur->peers - ph.N_peers_start].peers = cur->peers; | ||
801 | ph.averaged_result[cur->peers - ph.N_peers_start].addresses = cur->addresses; | ||
802 | ph.averaged_result[cur->peers - ph.N_peers_start].update = cur->update; | ||
803 | |||
789 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_total.rel_value_us) | 804 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_total.rel_value_us) |
790 | { | 805 | { |
806 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us == ph.averaged_result[cur->peers - ph.N_peers_start].d_total.rel_value_us) | ||
807 | ph.averaged_result[cur->peers - ph.N_peers_start].d_total.rel_value_us = 0; | ||
808 | ph.averaged_result[cur->peers - ph.N_peers_start].d_total.rel_value_us += cur->d_total.rel_value_us; | ||
791 | fprintf (stderr, | 809 | fprintf (stderr, |
792 | "Total time to solve %s for %u peers %u addresses: %llu us\n", | 810 | "Total time to solve %s for %u peers %u addresses: %llu us\n", |
793 | (GNUNET_YES == cur->update) ? "updated" : "full", | 811 | (GNUNET_YES == cur->update) ? "updated" : "full", |
@@ -800,6 +818,9 @@ evaluate (int iteration) | |||
800 | GNUNET_asprintf(&str_d_total, "-1"); | 818 | GNUNET_asprintf(&str_d_total, "-1"); |
801 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_setup.rel_value_us) | 819 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_setup.rel_value_us) |
802 | { | 820 | { |
821 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us == ph.averaged_result[cur->peers - ph.N_peers_start].d_setup.rel_value_us) | ||
822 | ph.averaged_result[cur->peers - ph.N_peers_start].d_setup.rel_value_us = 0; | ||
823 | ph.averaged_result[cur->peers - ph.N_peers_start].d_setup.rel_value_us += cur->d_setup.rel_value_us; | ||
803 | fprintf (stderr, "Total time to setup %s %u peers %u addresses: %llu us\n", | 824 | fprintf (stderr, "Total time to setup %s %u peers %u addresses: %llu us\n", |
804 | (GNUNET_YES == cur->update) ? "updated" : "full", | 825 | (GNUNET_YES == cur->update) ? "updated" : "full", |
805 | cur->peers, cur->addresses, (unsigned long long )cur->d_setup.rel_value_us); | 826 | cur->peers, cur->addresses, (unsigned long long )cur->d_setup.rel_value_us); |
@@ -809,6 +830,9 @@ evaluate (int iteration) | |||
809 | GNUNET_asprintf(&str_d_setup, "-1"); | 830 | GNUNET_asprintf(&str_d_setup, "-1"); |
810 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_lp.rel_value_us) | 831 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_lp.rel_value_us) |
811 | { | 832 | { |
833 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us == ph.averaged_result[cur->peers - ph.N_peers_start].d_lp.rel_value_us) | ||
834 | ph.averaged_result[cur->peers - ph.N_peers_start].d_lp.rel_value_us = 0; | ||
835 | ph.averaged_result[cur->peers - ph.N_peers_start].d_lp.rel_value_us += cur->d_lp.rel_value_us; | ||
812 | fprintf (stderr, | 836 | fprintf (stderr, |
813 | "Total time to solve %s LP for %u peers %u addresses: %llu us\n", | 837 | "Total time to solve %s LP for %u peers %u addresses: %llu us\n", |
814 | (GNUNET_YES == cur->update) ? "updated" : "full", | 838 | (GNUNET_YES == cur->update) ? "updated" : "full", |
@@ -823,6 +847,9 @@ evaluate (int iteration) | |||
823 | GNUNET_asprintf (&str_d_lp, "-1"); | 847 | GNUNET_asprintf (&str_d_lp, "-1"); |
824 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_mlp.rel_value_us) | 848 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_mlp.rel_value_us) |
825 | { | 849 | { |
850 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us == ph.averaged_result[cur->peers - ph.N_peers_start].d_mlp.rel_value_us) | ||
851 | ph.averaged_result[cur->peers - ph.N_peers_start].d_mlp.rel_value_us = 0; | ||
852 | ph.averaged_result[cur->peers - ph.N_peers_start].d_mlp.rel_value_us += cur->d_mlp.rel_value_us; | ||
826 | fprintf (stderr, "Total time to solve %s MLP for %u peers %u addresses: %llu us\n", | 853 | fprintf (stderr, "Total time to solve %s MLP for %u peers %u addresses: %llu us\n", |
827 | (GNUNET_YES == cur->update) ? "updated" : "full", | 854 | (GNUNET_YES == cur->update) ? "updated" : "full", |
828 | cur->peers, cur->addresses, (unsigned long long )cur->d_mlp.rel_value_us); | 855 | cur->peers, cur->addresses, (unsigned long long )cur->d_mlp.rel_value_us); |
@@ -883,6 +910,41 @@ evaluate (int iteration) | |||
883 | 910 | ||
884 | 911 | ||
885 | static void | 912 | static void |
913 | evaluate_average (void) | ||
914 | { | ||
915 | int c; | ||
916 | for (c = 0; c <= ph.N_peers_end - ph.N_peers_start; c++) | ||
917 | { | ||
918 | struct Result *cur = &ph.averaged_result[c]; | ||
919 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_total.rel_value_us) | ||
920 | fprintf (stderr, | ||
921 | "Average total time to solve %s for %u peers %u addresses: %llu us\n", | ||
922 | (GNUNET_YES == cur->update) ? "updated" : "full", | ||
923 | cur->peers, cur->addresses, | ||
924 | (unsigned long long) cur->d_total.rel_value_us / ph.iterations); | ||
925 | |||
926 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_setup.rel_value_us) | ||
927 | fprintf (stderr, | ||
928 | "Average total time to setup for %u peers %u addresses: %llu us\n", | ||
929 | cur->peers, cur->addresses, | ||
930 | (unsigned long long) cur->d_setup.rel_value_us / ph.iterations); | ||
931 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_lp.rel_value_us) | ||
932 | fprintf (stderr, | ||
933 | "Average total time to solve lp %s for %u peers %u addresses: %llu us\n", | ||
934 | (GNUNET_YES == cur->update) ? "updated" : "full", | ||
935 | cur->peers, cur->addresses, | ||
936 | (unsigned long long) cur->d_lp.rel_value_us / ph.iterations); | ||
937 | if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us != cur->d_mlp.rel_value_us) | ||
938 | fprintf (stderr, | ||
939 | "Average total time to solve mlp %s for %u peers %u addresses: %llu us\n", | ||
940 | (GNUNET_YES == cur->update) ? "updated" : "full", | ||
941 | cur->peers, cur->addresses, | ||
942 | (unsigned long long) cur->d_mlp.rel_value_us / ph.iterations); | ||
943 | } | ||
944 | |||
945 | } | ||
946 | |||
947 | static void | ||
886 | perf_run (void) | 948 | perf_run (void) |
887 | { | 949 | { |
888 | struct ATS_Address *cur; | 950 | struct ATS_Address *cur; |
@@ -1086,6 +1148,14 @@ run (void *cls, char * const *args, const char *cfgfile, | |||
1086 | 1148 | ||
1087 | /* Create array of DLL to store results for iterations */ | 1149 | /* Create array of DLL to store results for iterations */ |
1088 | ph.iterations_results = GNUNET_malloc (sizeof (struct Iteration) * ph.iterations); | 1150 | ph.iterations_results = GNUNET_malloc (sizeof (struct Iteration) * ph.iterations); |
1151 | ph.averaged_result = GNUNET_malloc (sizeof (struct Result) * ((ph.N_peers_end + 1) - ph.N_peers_start)); | ||
1152 | for (c = 0; c <= ph.N_peers_end - ph.N_peers_start; c++) | ||
1153 | { | ||
1154 | ph.averaged_result[c].d_setup = GNUNET_TIME_UNIT_FOREVER_REL; | ||
1155 | ph.averaged_result[c].d_total = GNUNET_TIME_UNIT_FOREVER_REL; | ||
1156 | ph.averaged_result[c].d_lp = GNUNET_TIME_UNIT_FOREVER_REL; | ||
1157 | ph.averaged_result[c].d_mlp = GNUNET_TIME_UNIT_FOREVER_REL; | ||
1158 | } | ||
1089 | 1159 | ||
1090 | /* Load solver */ | 1160 | /* Load solver */ |
1091 | ph.env.cfg = solver_cfg; | 1161 | ph.env.cfg = solver_cfg; |
@@ -1128,11 +1198,14 @@ run (void *cls, char * const *args, const char *cfgfile, | |||
1128 | perf_run (); | 1198 | perf_run (); |
1129 | evaluate (ph.current_iteration); | 1199 | evaluate (ph.current_iteration); |
1130 | } | 1200 | } |
1201 | evaluate_average (); | ||
1131 | 1202 | ||
1132 | /* Unload solver*/ | 1203 | /* Unload solver*/ |
1133 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Unloading solver `%s'\n"), ph.ats_string); | 1204 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Unloading solver `%s'\n"), ph.ats_string); |
1134 | GNUNET_PLUGIN_unload (plugin, ph.solver); | 1205 | GNUNET_PLUGIN_unload (plugin, ph.solver); |
1135 | GNUNET_free (plugin); | 1206 | GNUNET_free (plugin); |
1207 | GNUNET_free (ph.iterations_results); | ||
1208 | GNUNET_free (ph.averaged_result); | ||
1136 | GNUNET_CONFIGURATION_destroy (solver_cfg); | 1209 | GNUNET_CONFIGURATION_destroy (solver_cfg); |
1137 | GNUNET_STATISTICS_destroy (ph.stat, GNUNET_NO); | 1210 | GNUNET_STATISTICS_destroy (ph.stat, GNUNET_NO); |
1138 | ph.solver = NULL; | 1211 | ph.solver = NULL; |