gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r14801 - gnunet/src/transport
Date: Thu, 31 Mar 2011 16:30:30 +0200

Author: wachs
Date: 2011-03-31 16:30:30 +0200 (Thu, 31 Mar 2011)
New Revision: 14801

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


Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c     2011-03-31 13:25:56 UTC 
(rev 14800)
+++ gnunet/src/transport/gnunet-service-transport.c     2011-03-31 14:30:30 UTC 
(rev 14801)
@@ -5574,6 +5574,14 @@
        int     t;
 };
 
+struct ATS_result
+{
+       int c_mechs;
+       int c_peers;
+       int solution;
+};
+
+
 #define DEBUG_ATS GNUNET_NO
 #define VERBOSE_ATS GNUNET_NO
 
@@ -5585,9 +5593,10 @@
  * @param R weight for relativity
  * @param v_b_min minimal bandwidth per peer
  * @param v_n_min minimum number of connections
+ * @param res result struct
  * @return GNUNET_SYSERR if glpk is not available, number of mechanisms used
  */
-static int ats_create_problem (int max_it, int max_dur , double D, double U, 
double R, int v_b_min, int v_n_min)
+static int ats_create_problem (int max_it, int max_dur , double D, double U, 
double R, int v_b_min, int v_n_min, struct ATS_result *res)
 {
 #if !HAVE_LIBGLPK
        if (DEBUG_ATS) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "no glpk 
installed\n");
@@ -5934,7 +5943,9 @@
        ia[array_index] = row_index;
        ja[array_index] = (2*c_mechs) + 2;
        ar[array_index] = -1;
-       if (VERBOSE_ATS) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: 
[%i,%i]=%f \n",array_index, ia[array_index], ja[array_index], ar[array_index]);
+#if VERBOSE_ATS
+       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "[index]=[%i]: [%i,%i]=%f 
\n",array_index, ia[array_index], ja[array_index], ar[array_index]);
+#endif
 
        array_index++;
        row_index ++;
@@ -6019,7 +6030,7 @@
        case GLP_EOBJLL :    /* objective lower limit reached */
        case GLP_EOBJUL :    /* objective upper limit reached */
        case GLP_EROOT  :    /* root LP optimum not provided */
-               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Invalid Input data\n");
+               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Invalid Input data: 
%i\n", result);
        break;
 
        break;
@@ -6027,7 +6038,7 @@
                        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Problem has been 
solved\n");
        break;
        }
-
+#if VERBOSE_ATS
        switch (solution) {
                case GLP_UNDEF:
                        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "MIP solution is 
undeļ¬ned\n");
@@ -6057,11 +6068,17 @@
        old = debug_solution;
        GNUNET_asprintf(&debug_solution, "%s z = %g; \n", debug_solution,  
glp_get_obj_val(prob));
        if (old!=NULL) GNUNET_free(old);
-       if (DEBUG_ATS) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s 
\n",debug_solution);
+       GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s \n",debug_solution);
+       GNUNET_free(debug_solution);
+#endif
 
+       res->c_mechs = c_mechs;
+       res->c_peers = c_peers;
+       res->solution = solution;
+
        /* clean up */
 
-       GNUNET_free(debug_solution);
+
        glp_delete_prob(prob);
 
        GNUNET_free (ja);
@@ -6082,17 +6099,26 @@
        struct GNUNET_TIME_Absolute start;
        struct GNUNET_TIME_Relative duration;
        int c_mechs = 0;
+       struct ATS_result result;
 
        if (glpk==GNUNET_YES)
        {
                start = GNUNET_TIME_absolute_get();
-               c_mechs = ats_create_problem(5000, 5000, 1.0, 1.0, 1.0, 1000, 
5);
-               if (c_mechs >= 0)
+               c_mechs = ats_create_problem(5000, 5000, 1.0, 1.0, 1.0, 1000, 
5, &result);
+               duration = 
GNUNET_TIME_absolute_get_difference(start,GNUNET_TIME_absolute_get());
+               if (c_mechs > 0)
                {
-               duration = 
GNUNET_TIME_absolute_get_difference(start,GNUNET_TIME_absolute_get());
-               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "MLP execution time in 
[ms] for %i mechanisms: %llu\n", c_mechs, duration.rel_value);
-               //GNUNET_STATISTICS_set (stats, "ATS execution time 100 peers", 
duration.rel_value, GNUNET_NO);
+                       if (DEBUG_ATS) {GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
"MLP execution time in [ms] for %i mechanisms: %llu\n", c_mechs, 
duration.rel_value);}
+                       GNUNET_STATISTICS_set (stats, "ATS duration", 
duration.rel_value, GNUNET_NO);
+                       GNUNET_STATISTICS_set (stats, "ATS mechanisms", 
result.c_mechs, GNUNET_NO);
+                       GNUNET_STATISTICS_set (stats, "ATS peers", 
result.c_peers, GNUNET_NO);
+                       GNUNET_STATISTICS_set (stats, "ATS solution", 
result.solution, GNUNET_NO);
+                       GNUNET_STATISTICS_set (stats, "ATS timestamp", 
start.abs_value, GNUNET_NO);
                }
+               else if (c_mechs == 0)
+               {
+                       if (DEBUG_ATS) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
"MLP not executed: no addresses\n");
+               }
                else glpk = GNUNET_NO;
        }
 }

Modified: gnunet/src/transport/test_transport_ats.c
===================================================================
--- gnunet/src/transport/test_transport_ats.c   2011-03-31 13:25:56 UTC (rev 
14800)
+++ gnunet/src/transport/test_transport_ats.c   2011-03-31 14:30:30 UTC (rev 
14801)
@@ -25,11 +25,12 @@
 #include "gnunet_testing_lib.h"
 #include "gnunet_scheduler_lib.h"
 
-#define VERBOSE GNUNET_YES
+#define VERBOSE GNUNET_NO
 
-#define NUM_PEERS 2
+#define NUM_PEERS 11
+#define MEASUREMENTS 5
 
-#define DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
+#define DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5)
 
 
@@ -39,13 +40,28 @@
 
 static int failed_peers;
 
+static int measurement_started;
+
 static struct GNUNET_TESTING_PeerGroup *pg;
 
-static  GNUNET_SCHEDULER_TaskIdentifier task;
+static  GNUNET_SCHEDULER_TaskIdentifier shutdown_task;
+static  GNUNET_SCHEDULER_TaskIdentifier stats_task;
 
 struct GNUNET_TESTING_Daemon * master_deamon;
 
+struct GNUNET_STATISTICS_Handle * stats;
 
+struct ATS_result
+{
+       uint64_t timestamp;
+       int mechs;
+       int peers;
+       int solution;
+};
+
+//static int index;
+static struct ATS_result results[MEASUREMENTS];
+
 /**
  * Check whether peers successfully shut down.
  */
@@ -71,26 +87,94 @@
 
 static void shutdown_peers()
 {
+       if (shutdown_task != GNUNET_SCHEDULER_NO_TASK)
+               GNUNET_SCHEDULER_cancel(shutdown_task);
+       if (stats_task != GNUNET_SCHEDULER_NO_TASK)
+               GNUNET_SCHEDULER_cancel(stats_task);
+
     GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
 }
 
+int stats_cb (void *cls,
+                          const char *subsystem,
+                          const char *name,
+                          uint64_t value,
+                          int is_persistent)
+{
+    if ((measurement_started == GNUNET_NO) && (0 == strcmp (name, "ATS 
peers")) && (value == NUM_PEERS-1))
+    {
+               measurement_started = GNUNET_YES;
+               GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                                       "All %llu peers connected\n", value);
+    }
+    if (measurement_started == GNUNET_YES)
+    {
+               if (0 == strcmp (name,"ATS timestamp"))
+               {
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                                               "ATS timestamp: %s %llu 
\n",name, value);
+               }
+               if (0 == strcmp (name,"ATS solution"))
+               {
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                                               "ATS solution: %s %llu 
\n",name, value);
+               }
+               if (0 == strcmp (name,"ATS peers"))
+               {
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                                               "ATS peers: %s %llu \n",name, 
value);
+               }
+               if (0 == strcmp (name,"ATS mechanisms"))
+               {
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                                               "ATS mechanisms: %s %llu 
\n",name, value);
+               }
+               if (0 == strcmp (name,"ATS duration"))
+               {
+                       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                                               "ATS duration: %s %llu 
\n",name, value);
+               }
+    }
+
+    return GNUNET_OK;
+}
+
+
 void
-delay_task (void *cls,
+stats_get_task (void *cls,
                          const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-       task = GNUNET_SCHEDULER_NO_TASK;
+       stats_task = GNUNET_SCHEDULER_NO_TASK;
        if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
            return;
 
+       GNUNET_STATISTICS_get (stats, "transport", "ATS timestamp", TIMEOUT, 
NULL, &stats_cb, NULL);
+       GNUNET_STATISTICS_get (stats, "transport", "ATS solution", TIMEOUT, 
NULL, &stats_cb, NULL);
+       GNUNET_assert (NULL != GNUNET_STATISTICS_get (stats, "transport","ATS 
duration", TIMEOUT, NULL, &stats_cb, NULL));
+       GNUNET_STATISTICS_get (stats, "transport", "ATS peers", TIMEOUT, NULL, 
&stats_cb, NULL);
+       GNUNET_STATISTICS_get (stats, "transport", "ATS mechanisms", TIMEOUT, 
NULL, &stats_cb, NULL);
+
+       stats_task = GNUNET_SCHEDULER_add_delayed(GNUNET_TIME_relative_multiply 
(GNUNET_TIME_UNIT_SECONDS, 1), &stats_get_task, NULL);
+}
+
+void
+delay (void *cls,
+                         const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+       shutdown_task = GNUNET_SCHEDULER_NO_TASK;
+       if ( (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
+           return;
+
 #if VERBOSE
        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Delay over\n");
 #endif
+       GNUNET_STATISTICS_destroy(stats, GNUNET_NO);
        shutdown_peers ();
 }
 
 static void connect_peers()
 {
-    task = GNUNET_SCHEDULER_add_delayed(DELAY, &delay_task, NULL);
+    shutdown_task = GNUNET_SCHEDULER_add_delayed(DELAY, &delay, NULL);
 
 }
 
@@ -104,9 +188,15 @@
                                                struct GNUNET_TESTING_Daemon 
*second_daemon,
                                                const char *emsg)
 {
-         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connected peer `%s' \n", 
GNUNET_i2s(first), GNUNET_i2s(second));
+         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connected peers `%s'<->`%s': 
`%s' \n", GNUNET_i2s(first), GNUNET_i2s(second), (emsg==NULL) ? "OK" : emsg);
 }
 
+void cont_cb (void *cls, int success)
+{
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "STATS cont_cb: %i\n", success);
+}
+
 static void
 daemon_start_cb (void *cls,
        const struct GNUNET_PeerIdentity *id,
@@ -124,7 +214,7 @@
           GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                       "Too many peers failed, ending test!\n");
           ok = 1;
-          GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
+       shutdown_peers ();
         }
       return;
     }
@@ -132,13 +222,17 @@
 
   if (master_deamon == NULL)
   {
-         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Master peer `%s'\n", 
GNUNET_i2s(id));
+         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Master peer `%s' '%s'\n", 
GNUNET_i2s(id), d->cfgfile);
+
          master_deamon = d;
+         stats = GNUNET_STATISTICS_create("transport", master_deamon->cfg);
+         GNUNET_assert (stats != NULL);
+         stats_task = GNUNET_SCHEDULER_add_now(&stats_get_task, NULL);
   }
   else
   {
-         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connecting peer `%s'\n", 
GNUNET_i2s(id));
-         GNUNET_TESTING_daemons_connect(master_deamon, d, TIMEOUT, 10, 
GNUNET_YES,&daemon_connect_cb, NULL);
+         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Connecting peer `%s'\n", 
GNUNET_i2s(id), GNUNET_i2s(&master_deamon->id));
+         GNUNET_TESTING_daemons_connect(d, master_deamon, TIMEOUT, 0, 
GNUNET_YES,&daemon_connect_cb, NULL);
   }
 
   if (peers_left == 0)
@@ -164,6 +258,7 @@
      const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   ok = 1;
+  measurement_started = GNUNET_NO;
 #if VERBOSE
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting %i peers.\n", NUM_PEERS);
 #endif
@@ -183,7 +278,7 @@
 {
   char *const argv[] = { "test-testing",
     "-c",
-    "test_testing_data.conf",
+    "test_transport_ats.conf",
 #if VERBOSE
     "-L", "DEBUG",
 #endif




reply via email to

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