aboutsummaryrefslogtreecommitdiff
path: root/src/ats/perf_ats_solver.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2014-01-27 15:07:27 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2014-01-27 15:07:27 +0000
commit2e7e731865654bde25f222151b70b5b96df67d52 (patch)
tree61bd064e31d814cd809f34f924ea19f77d9dac22 /src/ats/perf_ats_solver.c
parentaba203f8b2d14db50d69b0f81f7d33e948f56308 (diff)
downloadgnunet-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.c79
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
706static void 714static 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
885static void 912static void
913evaluate_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
947static void
886perf_run (void) 948perf_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;