gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r14720 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r14720 - gnunet/src/transport
Date: Fri, 25 Mar 2011 10:48:05 +0100

Author: wachs
Date: 2011-03-25 10:48:05 +0100 (Fri, 25 Mar 2011)
New Revision: 14720

Modified:
   gnunet/src/transport/gnunet-service-transport.c
   gnunet/src/transport/test_transport_ats.c
   gnunet/src/transport/transport.h
Log:
ats changes


Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c     2011-03-25 09:29:44 UTC 
(rev 14719)
+++ gnunet/src/transport/gnunet-service-transport.c     2011-03-25 09:48:05 UTC 
(rev 14720)
@@ -48,6 +48,7 @@
 
 #define DEBUG_TRANSPORT_HELLO GNUNET_YES
 
+#define DEBUG_ATS GNUNET_NO
 #define VERBOSE_ATS GNUNET_NO
 
 /**
@@ -5557,7 +5558,6 @@
        double c_1;
 };
 
-
 #if HAVE_LIBGLPK
 static glp_prob *
 ats_create_problem (int peers,
@@ -5568,8 +5568,9 @@
                    const struct ATS_peer * pl, 
                    const struct ATS_transports * tl, 
                    int max_it, 
-                   int max_dur)
+                   int max_dur, int mlp)
 {
+
        int result = GLP_UNDEF;
        int c1, c2;
        glp_prob *lp;
@@ -5581,29 +5582,21 @@
        int start = 0;
        int cur_row = 0;
 
-       int ia[1+(rows*cols)], ja[1+(rows*cols)];
-       double ar[1+(rows*cols)];
-       double value;
+       //int ia[1+(rows*cols)];
+       //int ja[1+(rows*cols)];
+       //double ar[1+(rows*cols)];
 
-       /* Setting GLPK options */
-       glp_smcp * options = GNUNET_malloc( sizeof (glp_smcp));
-       glp_init_smcp(options);
+       int * ia = GNUNET_malloc (1+(rows*cols) * sizeof (int));
+       int * ja = GNUNET_malloc (1+(rows*cols) * sizeof (int));
+       double * ar = GNUNET_malloc(1+(rows*cols)* sizeof (double));
 
-       /* maximum iterations */
-       options->it_lim = max_it;
-       /* maximum durations */
-       options->tm_lim = max_dur;
-       /* output level */
-       if (VERBOSE_ATS)
-               options->msg_lev = GLP_MSG_ALL;
-       else
-               options->msg_lev = GLP_MSG_OFF;
+       double value;
 
        if (DEBUG_ATS) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Creating LP 
problem: %i peers, relativity r %3.2f, b_max %5.2f, b_min %5.2f, \n",peers, r, 
b_max, b_min);
+       if (DEBUG_ATS) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Current memory 
consumption  %i\n",(1+(rows*cols) * (2*sizeof(int) + sizeof(double))) / 
(1024*1024));
        lp = glp_create_prob();
        glp_set_prob_name(lp, "gnunet ats bandwidth distribution");
        glp_set_obj_dir(lp, GLP_MAX);
-
        /* Adding transports and objective function coefficients*/
        glp_add_cols(lp, cols);
        for (c1=1; c1<=cols; c1++)
@@ -5714,24 +5707,59 @@
        }
 
        glp_load_matrix(lp, rows * cols, ia, ja, ar);
-       result = glp_simplex(lp, options);
+
+       /* Solve the MLP problem */
+       if (mlp == GNUNET_YES)
+       {
+               glp_iocp opt;
+               glp_init_iocp(&opt);
+
+               /* Use LP presolver (if not, valid LP solution has to be 
provided)*/
+               opt.presolve =GLP_ON;
+               /* maximum duration */
+               opt.tm_lim = max_dur;
+               /* output level */
+               if (VERBOSE_ATS)
+                       opt.msg_lev = GLP_MSG_ALL;
+               else
+                       opt.msg_lev = GLP_MSG_OFF;
+               result = glp_intopt(lp, &opt);
+       }
+       /* Solve the LP problem */
+       {
+               glp_smcp opt ;
+               glp_init_smcp(&opt);
+
+               /* maximum iterations */
+               opt.it_lim = max_it;
+               /* maximum duration */
+               opt.tm_lim = max_dur;
+               /* output level */
+               if (VERBOSE_ATS)
+                       opt.msg_lev = GLP_MSG_ALL;
+               else
+                       opt.msg_lev = GLP_MSG_OFF;
+
+               result = glp_simplex(lp, &opt);
+       }
+
        if (DEBUG_ATS)
        {
                switch (result) {
                case GLP_ESTOP  :    /* search terminated by application */
-                       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Search terminated 
by application ");
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Search terminated 
by application ");
                case GLP_EITLIM :    /* iteration limit exceeded */
-                       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Iteration limit 
exceeded ");
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Iteration limit 
exceeded ");
                break;
                case GLP_ETMLIM :    /* time limit exceeded */
-                       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Time limit 
exceeded ");
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Time limit 
exceeded ");
                break;
                case GLP_ENOFEAS:    /* no primal/dual feasible solution */
                case GLP_ENOCVG :    /* no convergence */
                case GLP_ERANGE :        /* result out of range */
                case GLP_ENOPFS :    /* no primal feasible solution */
                case GLP_ENODFS :    /* no dual feasible solution */
-                       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "No feasible 
solution");
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "No feasible 
solution");
                break;
 
                case GLP_EBADB  :    /* invalid basis */
@@ -5745,7 +5773,7 @@
                case GLP_EMIPGAP:    /* relative mip gap tolerance reached */
                case GLP_EINSTAB:    /* numerical instability */
                case GLP_EDATA  :    /* invalid data */
-                       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Invalid Input 
data\n");
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Invalid Input 
data\n");
                break;
 
                break;
@@ -5764,11 +5792,15 @@
                if (old!=NULL) GNUNET_free(old);
        }
        GNUNET_asprintf(&debug_solution, "%s z = %g; \n", debug_solution,  
glp_get_obj_val(lp));
-       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%s \n",debug_solution);
+       if (DEBUG_ATS) GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%s 
\n",debug_solution);
        GNUNET_free(debug_solution);
 
        glp_delete_prob(lp);
-       GNUNET_free(options);
+
+       GNUNET_free(ar);
+       GNUNET_free(ia);
+       GNUNET_free(ja);
+
        return lp;
 }
 #else
@@ -5781,7 +5813,7 @@
                    const struct ATS_peer * pl, 
                    const struct ATS_transports * tl, 
                    int max_it, 
-                   int max_dur)
+                   int max_dur, int mlp)
 {
   return NULL;
 }
@@ -5799,18 +5831,28 @@
                return;
        }
 
-       int peers = 3;
+       struct GNUNET_TIME_Absolute start;
+       int test = 3;
+       int mlp = GNUNET_YES;
+
+       //for (test=1; test<75000; test++)
+       //{
+       int peers = test;
        int transports = 3;
 
-       double b_min   = 10;
-       double b_max   = 100.0;
+       double b_min   = 1;
+       double b_max   = 100000.0;
        double r           = 0.85;//1.0;
        double R           = 1.0;
 
-       int it = 50;
+       int it = ATS_MAX_ITERATIONS;
        int dur = 500;
-       //if (INT_MAX) ats.max_exec_duration.rel_value;
+       if (INT_MAX < ats->max_exec_duration.rel_value)
+               dur = INT_MAX;
+       else
+               dur = (int) ats->max_exec_duration.rel_value;
 
+
        struct ATS_transports * tl = GNUNET_malloc(transports * sizeof (struct 
ATS_peer));
 
        struct ATS_peer * pl = GNUNET_malloc(peers * sizeof (struct ATS_peer));
@@ -5820,32 +5862,35 @@
                pl[c].peer.hashPubKey.bits[0] = c+1;
                pl[c].f = 1 / (double) peers ;
                pl[c].t = 1;
-               //GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
"ats_calculate_bandwidth_distribution Peer[%i] : %s %p \n",c , 
GNUNET_i2s(&list[c].peer), &list[c].peer);
+               //GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
"ats_calculate_bandwidth_distribution Peer[%i] : %s %p \n",c , 
GNUNET_i2s(&pl[c].peer), &pl[c].peer);
                c++;
        }
        c = 0;
        while (c < transports)
        {
                tl[c].id = c;
-               tl[c].c_max = 100;
+               tl[c].c_max = 100000;
                tl[c].c_1 = 1;
                c++;
+               //GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
"ats_calculate_bandwidth_distribution Peer[%i] : %s %p \n",c , 
GNUNET_i2s(&pl[c].peer), &pl[c].peer);
        }
 
        // test //
 
-       pl[0].f = 0.33;
-       pl[2].f = 0.43;
-       pl[1].f = 0.33;
+       //pl[0].f = 0.33;
+       //pl[2].f = 0.43;
+       //pl[1].f = 0.33;
        // test //
+       start = GNUNET_TIME_absolute_get();
+       ats_create_problem(peers, transports, b_min, b_max, r, R, pl, tl, it, 
dur, mlp);
+       if (DEBUG_ATS)
+               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
"%s,%i,%llu,%i\n",(mlp)?"mlp":"lp", peers,
+                               
GNUNET_TIME_absolute_get_difference(start,GNUNET_TIME_absolute_get()).rel_value,
 (1+(peers*transports) * (2*sizeof(int) + sizeof(double))));
 
-       ats_create_problem(peers, transports, b_min, b_max, r, R, pl, tl, it, 
dur);
-
        GNUNET_free (pl);
        GNUNET_free (tl);
-
+       //}
        ats->last = GNUNET_TIME_absolute_get();
-
 }
 
 
@@ -5901,6 +5946,7 @@
        ats->min_delta = ATS_MIN_INTERVAL;
        ats->exec_intervall = ATS_EXEC_INTERVAL;
        ats->max_exec_duration = ATS_MAX_EXEC_DURATION;
+       ats->max_iterations = ATS_MAX_ITERATIONS;
 
        ats->ats_task = GNUNET_SCHEDULER_NO_TASK;
 /*

Modified: gnunet/src/transport/test_transport_ats.c
===================================================================
--- gnunet/src/transport/test_transport_ats.c   2011-03-25 09:29:44 UTC (rev 
14719)
+++ gnunet/src/transport/test_transport_ats.c   2011-03-25 09:48:05 UTC (rev 
14720)
@@ -136,7 +136,7 @@
 end_badly ()
 {
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Disconnecting from transports!\n");
-  GNUNET_break (0);
+  //GNUNET_break (0);
   GNUNET_TRANSPORT_disconnect (p1.th);
   //GNUNET_TRANSPORT_disconnect (p2.th);
   ok = 1;

Modified: gnunet/src/transport/transport.h
===================================================================
--- gnunet/src/transport/transport.h    2011-03-25 09:29:44 UTC (rev 14719)
+++ gnunet/src/transport/transport.h    2011-03-25 09:48:05 UTC (rev 14720)
@@ -33,7 +33,8 @@
 /* Minimum time between to calculations*/
 #define ATS_MIN_INTERVAL  
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 250)
 #define ATS_EXEC_INTERVAL 
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 1)
-#define ATS_MAX_EXEC_DURATION 
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 500)
+#define ATS_MAX_EXEC_DURATION 
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 500)
+#define ATS_MAX_ITERATIONS INT_MAX
 
 struct ATS_info
 {
@@ -54,6 +55,10 @@
         * Maximum execution time per calculation
         */
        struct GNUNET_TIME_Relative max_exec_duration;
+       /**
+        * Maximum number of LP iterations per calculation
+        */
+       int max_iterations;
 
        GNUNET_SCHEDULER_TaskIdentifier ats_task;
 };




reply via email to

[Prev in Thread] Current Thread [Next in Thread]