stuff
[oweals/gnunet.git] / src / transport / perf_transport_ats.c
index 1f168b6612057bfc25dd95c9cb0ddae31adbebe0..3f8950a8a173569b1184010b75e4f697fc8c84a9 100644 (file)
      Boston, MA 02111-1307, USA.
 */
 /**
- * @file testing/per_transport_ats.c
+ * @file transport/perf_transport_ats.c
  * @brief testcase for ats functionality
  */
 #include "platform.h"
 #include "gnunet_time_lib.h"
 #include "gauger.h"
-#if HAVE_LIBGLPK
 #include <glpk.h>
-#endif
 
 #define VERBOSE GNUNET_NO
 
 #define EXECS 5
 
+static int ret = 0;
 
-#if HAVE_LIBGLPK
 static int executions = EXECS;
 static uint64_t exec_time[EXECS];
 
@@ -47,221 +45,293 @@ static glp_prob * prob;
 static struct GNUNET_TIME_Absolute start;
 static struct GNUNET_TIME_Absolute end;
 
-
-void solve_mlp(int presolve)
+static void 
+solve_mlp(int presolve)
 {
-       int result, solution;
+  int result, solution;
+  glp_iocp opt_mlp;
 
-       glp_iocp opt_mlp;
-       glp_init_iocp(&opt_mlp);
-       opt_mlp.msg_lev = GLP_MSG_OFF;
-       opt_mlp.presolve = GLP_OFF;
+  glp_init_iocp(&opt_mlp);
+  opt_mlp.msg_lev = GLP_MSG_OFF;
+  opt_mlp.presolve = GLP_OFF;
 
-       result = glp_intopt (prob, &opt_mlp);
-       solution =  glp_mip_status (prob);
-       GNUNET_assert ((solution == 5) && (result==0));
+  result = glp_intopt (prob, &opt_mlp);
+  solution =  glp_mip_status (prob);
+  GNUNET_assert ((solution == 5) && (result==0));
 }
 
-void solve_lp(int presolve)
+static void
+solve_lp(int presolve)
 {
-       int result, solution;
+  int result;
+  int solution;
 
-       glp_smcp opt_lp;
-       glp_init_smcp(&opt_lp);
+  glp_smcp opt_lp;
+  glp_init_smcp(&opt_lp);
 
-       opt_lp.msg_lev = GLP_MSG_OFF;
-       if (presolve==GNUNET_YES) opt_lp.presolve = GLP_ON;
-       else opt_lp.presolve = GLP_OFF;
+  opt_lp.msg_lev = GLP_MSG_OFF;
+  if (presolve==GNUNET_YES) opt_lp.presolve = GLP_ON;
+  else opt_lp.presolve = GLP_OFF;
 
-       result = glp_simplex(prob, &opt_lp);
-       solution =  glp_get_status (prob);
-       GNUNET_assert ((solution == 5) && (result==0));
+  result = glp_simplex(prob, &opt_lp);
+  solution =  glp_get_status (prob);
+  GNUNET_assert ((solution == 5) && (result==0));
 }
 
+#if 0
 /* Modify quality constraint */
-void modify_qm(int start, int length, int values_to_change)
+static void 
+modify_qm(int start, int length, int values_to_change)
 {
-       //int * ind = GNUNET_malloc (length * sizeof (int));
-       //double *val = GNUNET_malloc (length * sizeof (double));
-       int ind[1000];
-       double val[1000];
-
-       int res = 0;
-       int c = start, c2=1;
-       while (c<=(start+values_to_change))
-       {
-               res = glp_get_mat_row(prob, c, ind, val);
-
-               printf("%i %i \n", c, res);
-               for (c2=0; c2<res; c2++)
-               {
-                       printf("%i = %f \n", ind[c2], val[c2]);
-               }
-
-               c++;
-       }
-       //glp_set_mat_row(prob, start, length, ind, val);
+  //int * ind = GNUNET_malloc (length * sizeof (int));
+  //double *val = GNUNET_malloc (length * sizeof (double));
+  int ind[1000];
+  double val[1000];
+
+  int res = 0;
+  int c = start, c2=1;
+  while (c<=(start+values_to_change))
+  {
+    res = glp_get_mat_row(prob, c, ind, val);
+
+    printf("%i %i \n", c, res);
+    for (c2=0; c2<res; c2++)
+    {
+            printf("%i = %f \n", ind[c2], val[c2]);
+    }
+    c++;
+  }
+  //glp_set_mat_row(prob, start, length, ind, val);
 }
+#endif
 
 
 
-void bench_simplex_optimization(char * file, int executions)
+static void 
+bench_simplex_optimization(char * file, int executions)
 {
-
-       int c;
-       prob = glp_create_prob();
-       glp_read_lp(prob, NULL, file);
-
-       solve_lp(GNUNET_YES);
-
-       for (c=0; c<executions;c++)
-       {
-               start = GNUNET_TIME_absolute_get();
-               solve_lp(GNUNET_NO);
-               end = GNUNET_TIME_absolute_get();
-
-               exec_time[c] = GNUNET_TIME_absolute_get_difference(start, end).rel_value;
-
-               sim_with_opt_avg += exec_time[c];
-               GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Simplex /w optimization iterations %i: %llu \n",  c, exec_time[c]);
-       }
-
-       glp_delete_prob(prob);
+  int c;
+  int res;
+
+  prob = glp_create_prob();
+  res = glp_read_lp(prob, NULL, file);
+  if (res != 0)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+        "Problem file `%s' not found\n",  file);
+    ret = 1;
+    return;
+  }
+
+  solve_lp(GNUNET_YES);
+
+  for (c=0; c<executions;c++)
+  {
+    start = GNUNET_TIME_absolute_get();
+    solve_lp(GNUNET_NO);
+    end = GNUNET_TIME_absolute_get();
+
+    exec_time[c] = GNUNET_TIME_absolute_get_difference(start, end).rel_value;
+
+    sim_with_opt_avg += exec_time[c];
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+        "Simplex /w optimization iterations %i: %llu \n",  c, exec_time[c]);
+  }
+
+  glp_delete_prob(prob);
 }
 
 
-void bench_simplex_no_optimization(char * file, int executions)
+static void
+bench_simplex_no_optimization(char * file, int executions)
 {
-
-       int c;
-       prob = glp_create_prob();
-       glp_read_lp(prob, NULL, file);
-
-       for (c=0; c<executions;c++)
-       {
-               start = GNUNET_TIME_absolute_get();
-               solve_lp(GNUNET_YES);
-               end = GNUNET_TIME_absolute_get();
-
-               exec_time[c] = GNUNET_TIME_absolute_get_difference(start, end).rel_value;
-
-               sim_no_opt_avg += exec_time[c];
-               GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Simplex iterations %i: %llu \n",  c, exec_time[c]);
-       }
-
-       glp_delete_prob(prob);
+  int c;
+  int res;
+
+  prob = glp_create_prob();
+  res = glp_read_lp(prob, NULL, file);
+  if (res != 0)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+        "Problem file `%s' not found\n",  file);
+    ret = 1;
+    return;
+  }
+
+  for (c=0; c<executions;c++)
+  {
+    start = GNUNET_TIME_absolute_get();
+    solve_lp(GNUNET_YES);
+    end = GNUNET_TIME_absolute_get();
+
+    exec_time[c] = GNUNET_TIME_absolute_get_difference(start, end).rel_value;
+
+    sim_no_opt_avg += exec_time[c];
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+        "Simplex iterations %i: %llu \n",
+        c, exec_time[c]);
+  }
+
+  glp_delete_prob(prob);
 }
 
-void bench_mlp_no_optimization(char * file, int executions)
+static void
+bench_mlp_no_optimization(char * file, int executions)
 {
-
-       int c;
-       prob = glp_create_prob();
-       glp_read_lp(prob, NULL, file);
-
-       for (c=0; c<executions;c++)
-       {
-               start = GNUNET_TIME_absolute_get();
-               solve_lp(GNUNET_YES);
-               solve_mlp (GNUNET_NO);
-               end = GNUNET_TIME_absolute_get();
-
-               exec_time[c] = GNUNET_TIME_absolute_get_difference(start, end).rel_value;
-
-               mlp_no_opt_avg += exec_time[c];
-               GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "MLP iterations no optimization %i: %llu \n",  c, exec_time[c]);
-       }
-
-       glp_delete_prob(prob);
+  int c;
+  int res;
+
+  prob = glp_create_prob();
+  res = glp_read_lp(prob, NULL, file);
+  if (res != 0)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+        "Problem file `%s' not found\n",  file);
+    ret = 1;
+    return;
+  }
+  for (c=0; c<executions;c++)
+  {
+      start = GNUNET_TIME_absolute_get();
+      solve_lp(GNUNET_YES);
+      solve_mlp (GNUNET_NO);
+      end = GNUNET_TIME_absolute_get();
+
+      exec_time[c] = GNUNET_TIME_absolute_get_difference(start, end).rel_value;
+
+      mlp_no_opt_avg += exec_time[c];
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+          "MLP iterations no optimization %i: %llu \n",
+          c, exec_time[c]);
+  }
+
+  glp_delete_prob(prob);
 }
 
 
-void bench_mlp_with_optimization(char * file, int executions, int changes)
+static void 
+bench_mlp_with_optimization(char * file, int executions, int changes)
 {
-       int c;
-       prob = glp_create_prob();
-       glp_read_lp(prob, NULL, file);
-
-       solve_lp(GNUNET_YES);
-
-       for (c=0; c<executions;c++)
-       {
-               start = GNUNET_TIME_absolute_get();
-               //modify_qm(906, 0, 0);
-               solve_lp(GNUNET_NO);
-               solve_mlp (GNUNET_NO);
-               end = GNUNET_TIME_absolute_get();
-
-               exec_time[c] = GNUNET_TIME_absolute_get_difference(start, end).rel_value;
-
-               mlp_with_opt_avg += exec_time[c];
-               GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "MLP /w optimization iterations %i: %llu \n",  c, exec_time[c]);
-       }
-
-       glp_delete_prob(prob);
+  int c;
+  int res;
+
+  prob = glp_create_prob();
+  res = glp_read_lp(prob, NULL, file);
+  if (res != 0)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+        "Problem file `%s' not found\n",  file);
+    ret = 1;
+    return;
+  }
+
+  solve_lp(GNUNET_YES);
+
+  for (c=0; c<executions;c++)
+  {
+    start = GNUNET_TIME_absolute_get();
+    //modify_qm(906, 0, 0);
+    solve_lp(GNUNET_NO);
+    solve_mlp (GNUNET_NO);
+    end = GNUNET_TIME_absolute_get();
+
+    exec_time[c] = GNUNET_TIME_absolute_get_difference(start, end).rel_value;
+
+    mlp_with_opt_avg += exec_time[c];
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+        "MLP /w optimization iterations %i: %llu \n",
+        c, exec_time[c]);
+  }
+
+  glp_delete_prob(prob);
 }
 
 #if 0
 void modify_cr (int start, int length, int count)
 {
-       //int * ind = GNUNET_malloc (length * sizeof (int));
-       //double *val = GNUNET_malloc (length * sizeof (double));
-       int ind[500];
-       double val[500];
-       int res = 0;
-       int c = start, c2=1;
-       while (c<=(start+count))
-       {
-               res = glp_get_mat_row(prob, c, ind, val);
-
-               printf("row index: %i non-zero elements: %i \n", c, res);
-               for (c2=1; c2<=res; c2++)
-               {
-                       printf("%i = %f ", ind[c2], val[c2]);
-               }
-               c++;
-               printf ("\n----\n");
-       }
-       //glp_set_mat_row(prob, start, length, ind, val);
+  //int * ind = GNUNET_malloc (length * sizeof (int));
+  //double *val = GNUNET_malloc (length * sizeof (double));
+  int ind[500];
+  double val[500];
+  int res = 0;
+  int c = start, c2=1;
+  while (c<=(start+count))
+  {
+    res = glp_get_mat_row(prob, c, ind, val);
+
+    printf("row index: %i non-zero elements: %i \n", c, res);
+    for (c2=1; c2<=res; c2++)
+    {
+            printf("%i = %f ", ind[c2], val[c2]);
+    }
+    c++;
+    printf ("\n----\n");
+  }
+  //glp_set_mat_row(prob, start, length, ind, val);
 }
 #endif
-#endif
+
 
 int main (int argc, char *argv[])
 {
-       int ret = 0;
-       GNUNET_log_setup ("perf-transport-ats",
+
+  GNUNET_log_setup ("perf-transport-ats",
 #if VERBOSE
                     "DEBUG",
 #else
                     "INFO",
 #endif
                     NULL);
+  int nullfd = OPEN ("/dev/null", O_RDWR | O_APPEND);
+  if (nullfd < 0)
+    return GNUNET_SYSERR;
+  if (dup2 (nullfd, 1) < 0)
+  {
+    GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "dup2");
+    (void) CLOSE (nullfd);
+    return GNUNET_SYSERR;
+  }
 
-#if !HAVE_LIBGLPK
-       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "GLPK not installed, exiting testcase\n");
-       return 0;
-#else
 
   char * file = "ats_mlp_p100_m400.problem";
- // char * file = "mlps/ats_mlp_p500_m2000.problem";
+
   bench_simplex_no_optimization (file, executions);
   bench_simplex_optimization (file, executions);
   bench_mlp_no_optimization (file, executions);
   bench_mlp_with_optimization (file, executions, 0);
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Simplex no optimization average: %llu\n", sim_no_opt_avg  / EXECS);
-  // -> 400 addresses
-  GAUGER ("TRANSPORT","GLPK simplex  no optimization", (sim_no_opt_avg  / EXECS) / 400, "ms/address");
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Simplex, no optimization, average per peer: %llu\n", (sim_with_opt_avg / EXECS) / 400);
-  GAUGER ("TRANSPORT","GLPK simplex, 100 peers 400 addresses with optimization", (sim_with_opt_avg  / EXECS) / 400, "ms/address");
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "MLP no optimization average: %llu\n", (mlp_no_opt_avg  / EXECS) / 400);
-  GAUGER ("TRANSPORT","GLPK MLP 100 peers 400 addresses no optimization", (mlp_no_opt_avg  / EXECS) / 400, "ms/address");
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "MLP optimization average: %llu\n", (mlp_with_opt_avg/ EXECS) / 400);
-  GAUGER ("TRANSPORT","GLPK MLP 100 peers 400 addresses with optimization", (mlp_with_opt_avg  / EXECS) / 400, "ms/address");
+  if (ret != 0)
+    return ret;
 
-#endif
+  // -> 400 addresses
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+      "Simplex, no optimization, average per address: %f\n",
+      ((double) sim_no_opt_avg / EXECS) / 400);
+  GAUGER ("TRANSPORT","GLPK simplex  no optimization",
+      ((double) sim_no_opt_avg  / EXECS) / 400, "ms/address");
+
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+      "Simplex, with optimization, average per address: %f\n",
+      ((double) sim_with_opt_avg / EXECS) / 400);
+  GAUGER ("TRANSPORT",
+      "GLPK simplex, 100 peers 400 addresses with optimization",
+      ((double) sim_with_opt_avg  / EXECS) / 400, "ms/address");
+
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+      "MLP no optimization average per address: %f\n",
+      ((double) mlp_no_opt_avg  / EXECS) / 400);
+  GAUGER ("TRANSPORT","GLPK MLP 100 peers 400 addresses no optimization",
+      ((double) mlp_no_opt_avg  / EXECS) / 400, "ms/address");
+
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+      "MLP optimization average per address: %f\n",
+      ((double) mlp_with_opt_avg/ EXECS) / 400);
+  GAUGER ("TRANSPORT",
+      "GLPK MLP 100 peers 400 addresses with optimization",
+      ((double) mlp_with_opt_avg  / EXECS) / 400, "ms/address");
+  (void) CLOSE (nullfd);
   return ret;
 }
 
-/* end of per_transport_ats.c*/
+/* end of perf_transport_ats.c*/
+