|
|
|
@ -2593,6 +2593,18 @@ out:
@@ -2593,6 +2593,18 @@ out:
|
|
|
|
|
return rc; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Specifies whether we can use this pool for work or not. */ |
|
|
|
|
static bool pool_unworkable(struct pool *pool) |
|
|
|
|
{ |
|
|
|
|
if (pool->idle) |
|
|
|
|
return true; |
|
|
|
|
if (pool->enabled != POOL_ENABLED) |
|
|
|
|
return true; |
|
|
|
|
if (pool->has_stratum && !pool->stratum_active) |
|
|
|
|
return true; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* In balanced mode, the amount of diff1 solutions per pool is monitored as a
|
|
|
|
|
* rolling average per 10 minutes and if pools start getting more, it biases |
|
|
|
|
* away from them to distribute work evenly. The share count is reset to the |
|
|
|
@ -2606,7 +2618,7 @@ static struct pool *select_balanced(struct pool *cp)
@@ -2606,7 +2618,7 @@ static struct pool *select_balanced(struct pool *cp)
|
|
|
|
|
for (i = 0; i < total_pools; i++) { |
|
|
|
|
struct pool *pool = pools[i]; |
|
|
|
|
|
|
|
|
|
if (pool->idle || pool->enabled != POOL_ENABLED) |
|
|
|
|
if (pool_unworkable(pool)) |
|
|
|
|
continue; |
|
|
|
|
if (pool->shares < lowest) { |
|
|
|
|
lowest = pool->shares; |
|
|
|
@ -2618,18 +2630,6 @@ static struct pool *select_balanced(struct pool *cp)
@@ -2618,18 +2630,6 @@ static struct pool *select_balanced(struct pool *cp)
|
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Specifies whether we can use this pool for work or not. */ |
|
|
|
|
static bool pool_unworkable(struct pool *pool) |
|
|
|
|
{ |
|
|
|
|
if (pool->idle) |
|
|
|
|
return true; |
|
|
|
|
if (pool->enabled != POOL_ENABLED) |
|
|
|
|
return true; |
|
|
|
|
if (pool->has_stratum && !pool->stratum_active) |
|
|
|
|
return true; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Select any active pool in a rotating fashion when loadbalance is chosen */ |
|
|
|
|
static inline struct pool *select_pool(bool lagging) |
|
|
|
|
{ |
|
|
|
|