gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r28894 - gnunet/src/testbed


From: gnunet
Subject: [GNUnet-SVN] r28894 - gnunet/src/testbed
Date: Thu, 29 Aug 2013 07:07:24 +0200

Author: harsha
Date: 2013-08-29 07:07:23 +0200 (Thu, 29 Aug 2013)
New Revision: 28894

Modified:
   gnunet/src/testbed/testbed_api_operations.c
Log:
- average with failure operation time as overhead


Modified: gnunet/src/testbed/testbed_api_operations.c
===================================================================
--- gnunet/src/testbed/testbed_api_operations.c 2013-08-28 22:43:31 UTC (rev 
28893)
+++ gnunet/src/testbed/testbed_api_operations.c 2013-08-29 05:07:23 UTC (rev 
28894)
@@ -137,6 +137,11 @@
    */
   unsigned int max_active_bound;
 
+  /**
+   * Number of operations that have failed
+   */
+  unsigned int nfailed;
+
 };
 
 
@@ -816,6 +821,7 @@
   cleanup_tslots (queue);
   n = GNUNET_MIN (n ,fctx->max_active_bound);
   fctx->tslots_freeptr = GNUNET_malloc (n * sizeof (struct TimeSlot));
+  fctx->nfailed = 0;
   for (cnt = 0; cnt < n; cnt++)
   {
     tslot = &fctx->tslots_freeptr[cnt];
@@ -831,10 +837,9 @@
  * the feedback context.
  *
  * @param queue the queue
- * @param fail GNUNET_YES if the last operation failed; GNUNET_NO if not;
  */
 static void
-adapt_parallelism (struct OperationQueue *queue, int fail)
+adapt_parallelism (struct OperationQueue *queue)
 {
   struct GNUNET_TIME_Relative avg;
   struct FeedbackCtx *fctx;
@@ -853,6 +858,16 @@
     nvals += tslot->nvals;
   }
   GNUNET_assert (nvals >= queue->max_active);
+  GNUNET_assert (fctx->nfailed <= nvals);
+  nvals -= fctx->nfailed;
+  if (0 == nvals)
+  {
+    if (1 == queue->max_active)
+      adaptive_queue_set_max_active (queue, 1);
+    else
+      adaptive_queue_set_max_active (queue, queue->max_active / 2);
+    return;
+  }
   avg = GNUNET_TIME_relative_divide (avg, nvals);
   if (GNUNET_SYSERR == 
       GNUNET_TESTBED_SD_deviation_factor_ (fctx->sd,
@@ -863,17 +878,16 @@
     adaptive_queue_set_max_active (queue, queue->max_active); /* no change */
     return;
   }
-  if ((0 == GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 
queue->max_active)))
-    GNUNET_TESTBED_SD_add_data_ (fctx->sd, (unsigned int) avg.rel_value_us);
   if (sd < 0)
     sd = 0;
   GNUNET_assert (0 <= sd);
-  if ((0 == sd) && (! fail))
+  GNUNET_TESTBED_SD_add_data_ (fctx->sd, (unsigned int) avg.rel_value_us);
+  if (0 == sd)
   {
     adaptive_queue_set_max_active (queue, queue->max_active * 2);
     return;
   }
-  if ((1 == sd) && (! fail))
+  if (1 == sd)
   {
     adaptive_queue_set_max_active (queue, queue->max_active + 1);
     return;
@@ -883,7 +897,7 @@
     adaptive_queue_set_max_active (queue, 1);
     return;
   }
-  if (((sd < 2) && (fail)) || (2 == sd))
+  if (2 == sd)
   {
     adaptive_queue_set_max_active (queue, queue->max_active - 1);
     return;
@@ -912,16 +926,18 @@
   {
     queue = tslot->queue;
     fctx = queue->fctx;
-    tslot->tsum = GNUNET_TIME_relative_add (tslot->tsum, t);
     GNUNET_CONTAINER_DLL_remove (op->tslots_head, op->tslots_tail, tslot);
     tslot->op = NULL;    
     GNUNET_CONTAINER_DLL_insert_tail (fctx->alloc_head, fctx->alloc_tail,
-  tslot);
+                                      tslot);
+    if (op->failed)
+      fctx->nfailed++;
+    tslot->tsum = GNUNET_TIME_relative_add (tslot->tsum, t);
     if (0 != tslot->nvals++)
       continue;
     fctx->tslots_filled++;
     if (queue->max_active == fctx->tslots_filled)
-      adapt_parallelism (queue, op->failed);
+      adapt_parallelism (queue);
   }
 }
 




reply via email to

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