Browse Source

Don't consider a pool lagging if a request has only just been filed.

This should decrease the false positives for "pool not providing work fast enough".
nfactor-troky
Con Kolivas 13 years ago
parent
commit
5d6159f55a
  1. 16
      main.c

16
main.c

@ -4178,11 +4178,11 @@ static bool divide_work(struct timeval *now, struct work *work, uint32_t hash_di
static bool get_work(struct work *work, bool requested, struct thr_info *thr, static bool get_work(struct work *work, bool requested, struct thr_info *thr,
const int thr_id, uint32_t hash_div) const int thr_id, uint32_t hash_div)
{ {
bool newreq = false, ret = false;
struct timespec abstime = {}; struct timespec abstime = {};
struct timeval now; struct timeval now;
struct work *work_heap; struct work *work_heap;
struct pool *pool; struct pool *pool;
bool ret = false;
int failures = 0; int failures = 0;
/* Tell the watchdog thread this thread is waiting on getwork and /* Tell the watchdog thread this thread is waiting on getwork and
@ -4190,10 +4190,13 @@ static bool get_work(struct work *work, bool requested, struct thr_info *thr,
thread_reportout(thr); thread_reportout(thr);
retry: retry:
pool = current_pool(); pool = current_pool();
if (unlikely((!requested || requests_queued() < opt_queue) && !queue_request(thr, true))) { if (!requested || requests_queued() < opt_queue) {
if (unlikely(!queue_request(thr, true))) {
applog(LOG_WARNING, "Failed to queue_request in get_work"); applog(LOG_WARNING, "Failed to queue_request in get_work");
goto out; goto out;
} }
newreq = true;
}
if (can_roll(work) && should_roll(work)) { if (can_roll(work) && should_roll(work)) {
roll_work(work); roll_work(work);
@ -4201,17 +4204,14 @@ retry:
goto out; goto out;
} }
if (!requests_staged()) { if (requested && !newreq && !requests_staged() && requests_queued() >= mining_threads &&
if (requested && requests_queued() >= mining_threads &&
!pool_tset(pool, &pool->lagging)) { !pool_tset(pool, &pool->lagging)) {
applog(LOG_WARNING, "Pool %d not providing work fast enough", applog(LOG_WARNING, "Pool %d not providing work fast enough", pool->pool_no);
pool->pool_no);
pool->getfail_occasions++; pool->getfail_occasions++;
total_go++; total_go++;
} }
}
requested = false; newreq = requested = false;
gettimeofday(&now, NULL); gettimeofday(&now, NULL);
abstime.tv_sec = now.tv_sec + 60; abstime.tv_sec = now.tv_sec + 60;

Loading…
Cancel
Save