diff options
| author | Paul Jakma <paul@quagga.net> | 2010-01-11 13:55:01 +0000 | 
|---|---|---|
| committer | Paul Jakma <paul@quagga.net> | 2010-12-08 16:53:09 +0000 | 
| commit | 3322055b392f20f4b97122a8034e479719e4b86d (patch) | |
| tree | eacb5bc1e5b5864241e0864b5f78e233e7b828c0 /lib | |
| parent | e276eb82820eb92d221f183496e28da4ffe0fe68 (diff) | |
lib: Make workqueue more conservative about ramping up
* workqueue.c: (work_queue_run) Err more on the side of keeping granularity
  down, by being more conservative about increasing it.
  Also, fix mispelling.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/workqueue.c | 17 | 
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/workqueue.c b/lib/workqueue.c index 7c811edd..52b5f41c 100644 --- a/lib/workqueue.c +++ b/lib/workqueue.c @@ -341,7 +341,7 @@ work_queue_run (struct thread *thread)  stats: -#define WQ_HYSTERIS_FACTOR 2 +#define WQ_HYSTERESIS_FACTOR 4    /* we yielded, check whether granularity should be reduced */    if (yielded && (cycles < wq->cycles.granularity)) @@ -349,17 +349,18 @@ stats:        wq->cycles.granularity = ((cycles > 0) ? cycles                                                : WORK_QUEUE_MIN_GRANULARITY);      } -   -  if (cycles >= (wq->cycles.granularity)) +  /* otherwise, should granularity increase? */ +  else if (cycles >= (wq->cycles.granularity))      {        if (cycles > wq->cycles.best)          wq->cycles.best = cycles; -      /* along with yielded check, provides hysteris for granularity */ -      if (cycles > (wq->cycles.granularity * WQ_HYSTERIS_FACTOR * 2)) -        wq->cycles.granularity *= WQ_HYSTERIS_FACTOR; /* quick ramp-up */ -      else if (cycles > (wq->cycles.granularity * WQ_HYSTERIS_FACTOR)) -        wq->cycles.granularity += WQ_HYSTERIS_FACTOR; +      /* along with yielded check, provides hysteresis for granularity */ +      if (cycles > (wq->cycles.granularity * WQ_HYSTERESIS_FACTOR +                                           * WQ_HYSTERESIS_FACTOR)) +        wq->cycles.granularity *= WQ_HYSTERESIS_FACTOR; /* quick ramp-up */ +      else if (cycles > (wq->cycles.granularity * WQ_HYSTERESIS_FACTOR)) +        wq->cycles.granularity += WQ_HYSTERESIS_FACTOR;      }  #undef WQ_HYSTERIS_FACTOR  | 
