gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r21646 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r21646 - gnunet/src/util
Date: Wed, 30 May 2012 16:47:45 +0200

Author: wachs
Date: 2012-05-30 16:47:45 +0200 (Wed, 30 May 2012)
New Revision: 21646

Added:
   gnunet/src/util/speedup.c
   gnunet/src/util/test_speedup.c
   gnunet/src/util/test_speedup_data.conf
Modified:
   gnunet/src/util/Makefile.am
   gnunet/src/util/program.c
   gnunet/src/util/service.c
   gnunet/src/util/util.conf
Log:
speedup mechanism to manipulate gnunet time


Modified: gnunet/src/util/Makefile.am
===================================================================
--- gnunet/src/util/Makefile.am 2012-05-30 14:34:51 UTC (rev 21645)
+++ gnunet/src/util/Makefile.am 2012-05-30 14:47:45 UTC (rev 21646)
@@ -99,7 +99,8 @@
   service.c \
   signal.c \
   strings.c \
-  time.c
+  time.c \
+  speedup.c
 
 
 libgnunetutil_la_LIBADD = \
@@ -203,6 +204,7 @@
  test_service \
  test_strings \
  test_time \
+ test_speedup \
  $(BENCHMARKS) \
  test_os_start_process \
  test_common_logging_runtime_loglevels
@@ -444,6 +446,11 @@
 test_time_LDADD = \
  $(top_builddir)/src/util/libgnunetutil.la  
 
+test_speedup_SOURCES = \
+ test_speedup.c
+test_speedup_LDADD = \
+ $(top_builddir)/src/util/libgnunetutil.la  
+
 perf_crypto_hash_SOURCES = \
  perf_crypto_hash.c
 perf_crypto_hash_LDADD = \
@@ -455,4 +462,5 @@
   test_program_data.conf \
   test_pseudonym_data.conf \
   test_resolver_api_data.conf \
-  test_service_data.conf
+  test_service_data.conf \
+  test_speedup_data.conf

Modified: gnunet/src/util/program.c
===================================================================
--- gnunet/src/util/program.c   2012-05-30 14:34:51 UTC (rev 21645)
+++ gnunet/src/util/program.c   2012-05-30 14:47:45 UTC (rev 21646)
@@ -72,7 +72,12 @@
 
 };
 
+int
+GNUNET_SPEEDUP_start_ (const struct GNUNET_CONFIGURATION_Handle *cfg);
 
+int
+GNUNET_SPEEDUP_stop_ (void);
+
 /**
  * Initial task called by the scheduler for each
  * program.  Runs the program-specific main task.
@@ -81,6 +86,7 @@
 program_main (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct CommandContext *cc = cls;
+  GNUNET_SPEEDUP_start_(cc->cfg);
 
   GNUNET_RESOLVER_connect (cc->cfg);
   cc->task (cc->task_cls, cc->args, cc->cfgfile, cc->cfg);
@@ -260,6 +266,7 @@
           cc.task (cc.task_cls, cc.args, cc.cfgfile, cc.cfg);
   }
   /* clean up */
+  GNUNET_SPEEDUP_stop_ ();
   GNUNET_CONFIGURATION_destroy (cfg);
   GNUNET_free_non_null (cc.cfgfile);
   GNUNET_free_non_null (loglev);

Modified: gnunet/src/util/service.c
===================================================================
--- gnunet/src/util/service.c   2012-05-30 14:34:51 UTC (rev 21645)
+++ gnunet/src/util/service.c   2012-05-30 14:47:45 UTC (rev 21646)
@@ -78,6 +78,13 @@
 };
 
 
+int
+GNUNET_SPEEDUP_start_ (const struct GNUNET_CONFIGURATION_Handle *cfg);
+
+int
+GNUNET_SPEEDUP_stop_ (void);
+
+
 /**
  * Parse a network specification. The argument specifies
  * a list of networks. The format is
@@ -1771,7 +1778,7 @@
   /* actually run service */
   err = 0;
   GNUNET_SCHEDULER_run (&service_task, &sctx);
-
+  GNUNET_SPEEDUP_start_ (cfg);
   /* shutdown */
   if ((1 == do_daemonize) && (NULL != sctx.server))
     pid_file_delete (&sctx);
@@ -1785,6 +1792,7 @@
     GNUNET_break (0 == CLOSE (sctx.ready_confirm_fd));
   }
 
+  GNUNET_SPEEDUP_stop_ ();
   GNUNET_CONFIGURATION_destroy (cfg);
   i = 0;
   if (NULL != sctx.addrs)

Added: gnunet/src/util/speedup.c
===================================================================
--- gnunet/src/util/speedup.c                           (rev 0)
+++ gnunet/src/util/speedup.c   2012-05-30 14:47:45 UTC (rev 21646)
@@ -0,0 +1,94 @@
+/*
+     This file is part of GNUnet.
+     (C) 2001, 2002, 2006, 2009 Christian Grothoff (and other contributing 
authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file util/speedup.c
+ * @author Matthias Wachs
+ * @brief functions to speedup peer execution by manipulation system time
+ */
+#include "platform.h"
+#include "gnunet_time_lib.h"
+#include "gnunet_scheduler_lib.h"
+
+#define LOG(kind,...) GNUNET_log_from (kind, "util", __VA_ARGS__)
+
+static long long current_offset;
+static struct GNUNET_TIME_Relative interval;
+static struct GNUNET_TIME_Relative delta;
+
+static GNUNET_SCHEDULER_TaskIdentifier speedup_task;
+
+static void
+do_speedup (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+  speedup_task = GNUNET_SCHEDULER_NO_TASK;
+
+  if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
+    return;
+
+  current_offset += delta.rel_value;
+  GNUNET_TIME_set_offset (current_offset);
+
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Speed up execution time by %llu ms\n", 
delta.rel_value);
+
+  speedup_task = GNUNET_SCHEDULER_add_delayed (interval, &do_speedup, NULL);
+}
+
+
+int
+GNUNET_SPEEDUP_start_ (const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time (cfg, "testing", 
"SPEEDUP_INTERVAL", &interval))
+    return GNUNET_SYSERR;
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_time (cfg, "testing", 
"SPEEDUP_DELTA", &delta))
+    return GNUNET_SYSERR;
+
+  if ((interval.rel_value == 0) || (delta.rel_value == 0))
+  {
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+      "Speed up disabled\n");
+    return GNUNET_OK;
+  }
+
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+    "Speed up execution time %llu ms every %llu ms\n",
+    delta.rel_value, interval.rel_value);
+
+  speedup_task = GNUNET_SCHEDULER_add_now_with_lifeness (GNUNET_NO, 
&do_speedup, NULL);
+  return GNUNET_OK;
+}
+
+void
+GNUNET_SPEEDUP_stop_ ( )
+{
+  if (GNUNET_SCHEDULER_NO_TASK != speedup_task)
+  {
+    GNUNET_SCHEDULER_cancel (speedup_task);
+    speedup_task = GNUNET_SCHEDULER_NO_TASK;
+
+  }
+
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+      "Stopped execution speed up\n");
+}
+
+
+
+/* end of speedup.c */

Added: gnunet/src/util/test_speedup.c
===================================================================
--- gnunet/src/util/test_speedup.c                              (rev 0)
+++ gnunet/src/util/test_speedup.c      2012-05-30 14:47:45 UTC (rev 21646)
@@ -0,0 +1,101 @@
+/*
+     This file is part of GNUnet.
+     (C) 2001, 2002, 2003, 2004, 2006, 2009 Christian Grothoff (and other 
contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 3, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+/**
+ * @file util/test_speedup.c
+ * @brief testcase for speedup.c
+ */
+#include "platform.h"
+#include "gnunet_common.h"
+#include "gnunet_program_lib.h"
+#include "gnunet_time_lib.h"
+#include "gnunet_strings_lib.h"
+
+
+#define VERBOSE GNUNET_NO
+
+static struct GNUNET_TIME_Absolute start;
+static struct GNUNET_TIME_Absolute end;
+static int cycles;
+
+static void
+run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+
+  cycles ++;
+  printf ("..%u", cycles);
+  fflush(stdout);
+  if (cycles <= 5)
+    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &run, NULL);
+  else
+  {
+    end = GNUNET_TIME_absolute_get();
+    printf ("\n");
+    fflush(stdout);
+  }
+}
+
+void check (void *cls, char *const *args,
+                                     const char *cfgfile,
+                                     const struct GNUNET_CONFIGURATION_Handle *
+                                     cfg)
+{
+  printf ("0");
+  fflush(stdout);
+  GNUNET_SCHEDULER_add_now(&run, NULL);
+}
+
+
+int
+main (int argc, char *argv[])
+{
+  time_t start_real;
+  time_t end_real;
+  struct GNUNET_TIME_Relative delta;
+
+  static char *const argvn[] = { "test-speedup",
+    "-c",
+    "test_speedup_data.conf",
+#if VERBOSE
+    "-L", "DEBUG",
+#endif
+    NULL
+  };
+  start_real = time (NULL);
+  start = GNUNET_TIME_absolute_get();
+  static struct GNUNET_GETOPT_CommandLineOption options[] = {
+    GNUNET_GETOPT_OPTION_END
+  };
+
+  GNUNET_PROGRAM_run ((sizeof (argvn) / sizeof (char *)) - 1, argvn, 
"test-speedup",
+                      "nohelp", options, &check, NULL);
+
+  end_real = time (NULL);
+  delta = GNUNET_TIME_absolute_get_difference(start, end);
+
+  GNUNET_log  (GNUNET_ERROR_TYPE_DEBUG, "Execution time in GNUnet time: %llu 
ms\n", delta.rel_value);
+  GNUNET_log  (GNUNET_ERROR_TYPE_DEBUG, "Execution time in system time: %llu 
ms\n", (end_real - start_real) * 1000);
+
+  if (delta.rel_value >  ((end_real - start_real) * 1500))
+    return 0;
+  else
+    return 1;
+}
+
+/* end of test_speedup.c */

Added: gnunet/src/util/test_speedup_data.conf
===================================================================
--- gnunet/src/util/test_speedup_data.conf                              (rev 0)
+++ gnunet/src/util/test_speedup_data.conf      2012-05-30 14:47:45 UTC (rev 
21646)
@@ -0,0 +1,3 @@
+[testing]
+SPEEDUP_INTERVAL = 1 ms
+SPEEDUP_DELTA = 1 ms

Modified: gnunet/src/util/util.conf
===================================================================
--- gnunet/src/util/util.conf   2012-05-30 14:34:51 UTC (rev 21645)
+++ gnunet/src/util/util.conf   2012-05-30 14:47:45 UTC (rev 21646)
@@ -14,3 +14,5 @@
 
 [TESTING]
 WEAKRANDOM = NO
+SPEEDUP_INTERVAL = 0 ms
+SPEEDUP_DELTA = 0 ms




reply via email to

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