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];
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;
+ int res;
- int c;
- prob = glp_create_prob();
- glp_read_lp(prob, NULL, file);
+ 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);
+ solve_lp(GNUNET_YES);
- for (c=0; c<executions;c++)
- {
- start = GNUNET_TIME_absolute_get();
- solve_lp(GNUNET_NO);
- end = GNUNET_TIME_absolute_get();
+ 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;
+ 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]);
- }
+ 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);
+ 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;
+ int res;
- int c;
- prob = glp_create_prob();
- glp_read_lp(prob, NULL, file);
+ 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();
+ 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;
+ 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]);
- }
+ 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);
+ 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;
+ int res;
- 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();
+ 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;
+ 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]);
- }
+ 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);
+ 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);
+ int c;
+ int res;
- 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();
+ 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;
+ }
- exec_time[c] = GNUNET_TIME_absolute_get_difference(start, end).rel_value;
+ solve_lp(GNUNET_YES);
- mlp_with_opt_avg += exec_time[c];
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "MLP /w optimization iterations %i: %llu \n", c, exec_time[c]);
- }
+ 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);
+ 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",
#if VERBOSE
"DEBUG",
"INFO",
#endif
NULL);
-
-#if !HAVE_LIBGLPK
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "GLPK not installed, exiting testcase\n");
- return 0;
-#else
-#if 0
-#endif
int nullfd = OPEN ("/dev/null", O_RDWR | O_APPEND);
if (nullfd < 0)
return GNUNET_SYSERR;
- /* set stdin/stdout to /dev/null */
- //stdi
- if (/*(dup2 (nullfd, 0) < 0) || */(dup2 (nullfd, 1) < 0))
+ if (dup2 (nullfd, 1) < 0)
{
GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "dup2");
(void) CLOSE (nullfd);
bench_mlp_no_optimization (file, executions);
bench_mlp_with_optimization (file, executions, 0);
+ if (ret != 0)
+ return ret;
+
// -> 400 addresses
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ 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_ERROR,
+ 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_ERROR,
+ 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_ERROR,
+ 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");
-
-#endif
(void) CLOSE (nullfd);
return ret;
}
-/* end of per_transport_ats.c*/
+/* end of perf_transport_ats.c*/