gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r20992 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r20992 - gnunet/src/ats
Date: Tue, 17 Apr 2012 13:19:14 +0200

Author: wachs
Date: 2012-04-17 13:19:14 +0200 (Tue, 17 Apr 2012)
New Revision: 20992

Modified:
   gnunet/src/ats/perf_ats_mlp.c
Log:
- changes


Modified: gnunet/src/ats/perf_ats_mlp.c
===================================================================
--- gnunet/src/ats/perf_ats_mlp.c       2012-04-17 10:36:04 UTC (rev 20991)
+++ gnunet/src/ats/perf_ats_mlp.c       2012-04-17 11:19:14 UTC (rev 20992)
@@ -41,6 +41,9 @@
 static unsigned int peers;
 static unsigned int addresses;
 
+struct PeerContext *p;
+struct ATS_Address *a;
+
 static int ret;
 
 struct GNUNET_STATISTICS_Handle * stats;
@@ -49,6 +52,12 @@
 
 struct GAS_MLP_Handle *mlp;
 
+struct GNUNET_STATISTICS_Handle * stats;
+
+struct GNUNET_OS_Process *stats_proc;
+
+GNUNET_SCHEDULER_TaskIdentifier shutdown_task;
+
 struct PeerContext
 {
   struct GNUNET_PeerIdentity id;
@@ -70,6 +79,50 @@
   void *session;
 };
 
+void
+do_shutdown (void *cls,
+             const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  unsigned int ca;
+  for (ca=0; ca < (peers * addresses); ca++)
+  {
+    GNUNET_free (a[ca].plugin);
+    GNUNET_free (a[ca].ats);
+  }
+  GNUNET_CONTAINER_multihashmap_destroy(amap);
+  GNUNET_free (a);
+  GNUNET_free (p);
+  GNUNET_STATISTICS_destroy(stats,GNUNET_NO);
+
+  if (NULL != stats_proc)
+  {
+    if (0 != GNUNET_OS_process_kill (stats_proc, SIGTERM))
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill");
+    if (GNUNET_OS_process_wait (stats_proc) != GNUNET_OK)
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid");
+    GNUNET_OS_process_close (stats_proc);
+    stats_proc = NULL;
+  }
+  ret = 0;
+}
+
+int stat_it (void *cls, const char *subsystem,
+                                           const char *name, uint64_t value,
+                                           int is_persistent)
+{
+  static int calls;
+  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s : %llu\n", name, value);
+  calls ++;
+
+  if (2 == calls)
+  {
+    if (GNUNET_SCHEDULER_NO_TASK != shutdown_task)
+      GNUNET_SCHEDULER_cancel(shutdown_task);
+    shutdown_task = GNUNET_SCHEDULER_add_now(&do_shutdown, NULL);
+  }
+  return GNUNET_OK;
+}
+
 static void
 check (void *cls, char *const *args, const char *cfgfile,
        const struct GNUNET_CONFIGURATION_Handle *cfg)
@@ -83,19 +136,33 @@
   unsigned int c2 = 0;
   unsigned int ca = 0;
 
+  stats_proc = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, 
"gnunet-service-statistics",
+        "gnunet-service-statistics", NULL);
+
+  if (NULL == stats_proc)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to start statistics service 
\n");
+    ret = 1;
+    return;
+  }
+
+  shutdown_task = GNUNET_SCHEDULER_add_delayed(GNUNET_TIME_UNIT_HOURS, 
&do_shutdown, NULL);
+
   if (peers == 0)
     peers = DEF_PEERS;
   if (addresses == 0)
     addresses = DEF_ADDRESSES_PER_PEER;
 
+  p = GNUNET_malloc (peers * sizeof (struct ATS_Peer));
+  a = GNUNET_malloc (peers * addresses * sizeof (struct ATS_Address));
+
+  stats = GNUNET_STATISTICS_create("ats", cfg);
+
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Setting up %u peers with %u addresses 
per peer\n", peers, addresses);
 
-  struct PeerContext p[peers];
-  struct ATS_Address a[addresses * peers];
-
   amap = GNUNET_CONTAINER_multihashmap_create(addresses * peers);
 
-  mlp = GAS_mlp_init (cfg, NULL, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS);
+  mlp = GAS_mlp_init (cfg, stats, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS);
   mlp->auto_solve = GNUNET_NO;
   for (c=0; c < peers; c++)
   {
@@ -115,8 +182,6 @@
       a[ca].plugin = strdup("test");
       a[ca].atsp_network_type = GNUNET_ATS_NET_LOOPBACK;
 
-      //a[ca].addr = GNUNET_HELLO_address_allocate(&a[ca].peer, a[ca].plugin, 
NULL, 0);
-      //a[ca].addr_len = GNUNET_HELLO_address_get_size(a[ca].addr);
       a[ca].ats = GNUNET_malloc (2 * sizeof (struct GNUNET_ATS_Information));
       a[ca].ats[0].type = GNUNET_ATS_QUALITY_NET_DELAY;
       a[ca].ats[0].value = 20;
@@ -129,28 +194,23 @@
       ca++;
     }
   }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Problem contains %u peers and %u 
adresses\n", mlp->c_p, mlp->addr_in_problem);
+  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Problem contains %u peers and %u 
adresses\n", mlp->c_p, mlp->addr_in_problem);
 
+  GNUNET_assert (peers == mlp->c_p);
+  GNUNET_assert (peers * addresses == mlp->addr_in_problem);
+
   /* Solving the problem */
   if (GNUNET_OK == GAS_mlp_solve_problem(mlp))
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Problem solved successfully \n");
   else
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Problem solved failed \n");
 
-  GAS_mlp_done (mlp);
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Execution duration %llu\n", 
mlp->max_exec_duration);
 
+  GAS_mlp_done (mlp);
 
-  for (ca=0; ca < (peers * addresses); ca++)
-  {
-    GNUNET_free (a[ca].plugin);
-    GNUNET_free (a[ca].ats);
-   // GNUNET_free ((void *) a[c2].addr);
-  }
-  GNUNET_CONTAINER_multihashmap_destroy(amap);
-
-  ret = 0;
+  GNUNET_STATISTICS_get (stats, "ats", "# LP execution time (ms)", 
GNUNET_TIME_UNIT_MINUTES, NULL, &stat_it, NULL);
+  GNUNET_STATISTICS_get (stats, "ats", "# MLP execution time (ms)", 
GNUNET_TIME_UNIT_MINUTES, NULL, &stat_it, NULL);
   return;
 }
 
@@ -169,6 +229,7 @@
     GNUNET_GETOPT_OPTION_END
   };
 
+
   GNUNET_PROGRAM_run (argc, argv,
                       "perf_ats_mlp", "nohelp", options,
                       &check, NULL);




reply via email to

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