[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);
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r28894 - gnunet/src/testbed,
gnunet <=