Skip to content

Commit

Permalink
pool switch: add thr_id param to handle a future barrier
Browse files Browse the repository at this point in the history
Switching to a pool with a different algo will require a barrier
to free ressources, like what was made in the global benchmark.

add also the algo in pool structure...
  • Loading branch information
tpruvot committed Oct 24, 2015
1 parent 957d919 commit e12d666
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 18 deletions.
2 changes: 2 additions & 0 deletions algos.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ enum sha_algos {
ALGO_COUNT
};

extern volatile enum sha_algos opt_algo;

static const char *algo_names[] = {
"blakecoin",
"blake",
Expand Down
6 changes: 3 additions & 3 deletions api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -409,13 +409,13 @@ static char *remote_switchpool(char *params)
return buffer;
if (!params || strlen(params) == 0) {
// rotate pool test
ret = pool_switch_next();
ret = pool_switch_next(-1);
} else {
int n = atoi(params);
if (n == cur_pooln)
ret = true;
else if (n < num_pools)
ret = pool_switch(n);
ret = pool_switch(-1, n);
}
sprintf(buffer, "%s|", ret ? "ok" : "fail");
return buffer;
Expand All @@ -433,7 +433,7 @@ static char *remote_seturl(char *params)
return buffer;
if (!params || strlen(params) == 0) {
// rotate pool test
ret = pool_switch_next();
ret = pool_switch_next(-1);
} else {
ret = pool_switch_url(params);
}
Expand Down
1 change: 0 additions & 1 deletion bench.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ static pthread_barrier_t algo_barr;
static pthread_mutex_t bench_lock = PTHREAD_MUTEX_INITIALIZER;

extern double thr_hashrates[MAX_GPUS];
extern volatile enum sha_algos opt_algo;

void bench_init(int threads)
{
Expand Down
10 changes: 5 additions & 5 deletions ccminer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1181,7 +1181,7 @@ static void *workio_thread(void *userdata)
if (!ok && num_pools > 1 && opt_pool_failover) {
if (opt_debug_threads)
applog(LOG_DEBUG, "%s died, failover", __func__);
ok = pool_switch_next();
ok = pool_switch_next(-1);
tq_push(wc->thr->q, NULL); // get_work() will return false
}

Expand Down Expand Up @@ -1633,7 +1633,7 @@ static void *miner_thread(void *userdata)
// conditional pool switch
if (num_pools > 1 && conditional_pool_rotate) {
if (!pool_is_switching)
pool_switch_next();
pool_switch_next(thr_id);
else if (time(NULL) - firstwork_time > 35) {
if (!opt_quiet)
applog(LOG_WARNING, "Pool switching timed out...");
Expand Down Expand Up @@ -1670,7 +1670,7 @@ static void *miner_thread(void *userdata)
if (!pool_is_switching) {
if (!opt_quiet)
applog(LOG_INFO, "Pool mining timeout of %ds reached, rotate...", opt_time_limit);
pool_switch_next();
pool_switch_next(thr_id);
} else if (passed > 35) {
// ensure we dont stay locked if pool_is_switching is not reset...
applog(LOG_WARNING, "Pool switch to %d timed out...", cur_pooln);
Expand Down Expand Up @@ -2233,7 +2233,7 @@ static void *stratum_thread(void *userdata)
if (opt_retries >= 0 && ++failures > opt_retries) {
if (num_pools > 1 && opt_pool_failover) {
applog(LOG_WARNING, "Stratum connect timeout, failover...");
pool_switch_next();
pool_switch_next(-1);
} else {
applog(LOG_ERR, "...terminating workio thread");
//tq_push(thr_info[work_thr_id].q, NULL);
Expand Down Expand Up @@ -3079,7 +3079,7 @@ int main(int argc, char *argv[])
if (opt_debug)
pool_dump_infos();
cur_pooln = pool_get_first_valid(0);
pool_switch(cur_pooln);
pool_switch(-1, cur_pooln);

flags = !opt_benchmark && strncmp(rpc_url, "https:", 6)
? (CURL_GLOBAL_ALL & ~CURL_GLOBAL_SSL)
Expand Down
2 changes: 1 addition & 1 deletion cuda.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ uint32_t cuda_default_throughput(int thr_id, uint32_t defcount)
//int dev_id = device_map[thr_id % MAX_GPUS];
uint32_t throughput = gpus_intensity[thr_id] ? gpus_intensity[thr_id] : defcount;
if (gpu_threads > 1 && throughput == defcount) throughput /= (gpu_threads-1);
api_set_throughput(thr_id, throughput);
if (api_thr_id != -1) api_set_throughput(thr_id, throughput);
//gpulog(LOG_INFO, thr_id, "throughput %u", throughput);
return throughput;
}
Expand Down
5 changes: 3 additions & 2 deletions miner.h
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,7 @@ struct pool_infos {
#define POOL_ST_DISABLED 4
#define POOL_ST_REMOVED 8
uint16_t status;
int algo;
char name[64];
// credentials
char url[256];
Expand Down Expand Up @@ -691,8 +692,8 @@ void pool_init_defaults(void);
void pool_set_creds(int pooln);
void pool_set_attr(int pooln, const char* key, char* arg);
bool pool_switch_url(char *params);
bool pool_switch(int pooln);
bool pool_switch_next(void);
bool pool_switch(int thr_id, int pooln);
bool pool_switch_next(int thr_id);
int pool_get_first_valid(int startfrom);
bool parse_pool_array(json_t *obj);
void pool_dump_infos(void);
Expand Down
19 changes: 13 additions & 6 deletions pools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#include "miner.h"
#include "compat.h"
#include "algos.h"

// to move in miner.h
extern bool allow_gbt;
Expand Down Expand Up @@ -50,6 +51,7 @@ struct opt_config_array {
{ CFG_POOL, "user", NULL },
{ CFG_POOL, "pass", NULL },
{ CFG_POOL, "userpass", NULL },
{ CFG_POOL, "algo", NULL },
{ CFG_POOL, "name", "pool-name" },
{ CFG_POOL, "scantime", "pool-scantime" },
{ CFG_POOL, "max-diff", "pool-max-diff" },
Expand All @@ -74,7 +76,8 @@ void pool_set_creds(int pooln)
p->id = pooln;
p->status |= POOL_ST_DEFINED;
// init pool options as "unset"
// until cmdline is not fully parsed...
// until cmdline is fully parsed...
p->algo = -1;
p->max_diff = -1.;
p->max_rate = -1.;
p->scantime = -1;
Expand Down Expand Up @@ -102,6 +105,7 @@ void pool_init_defaults()
struct pool_infos *p;
for (int i=0; i<num_pools; i++) {
p = &pools[i];
if (p->algo == -1) p->algo = (int) opt_algo;
if (p->max_diff == -1.) p->max_diff = opt_max_diff;
if (p->max_rate == -1.) p->max_rate = opt_max_rate;
if (p->scantime == -1) p->scantime = opt_scantime;
Expand All @@ -113,7 +117,10 @@ void pool_init_defaults()
void pool_set_attr(int pooln, const char* key, char* arg)
{
struct pool_infos *p = &pools[pooln];

if (!strcasecmp(key, "algo")) {
p->algo = algo_to_int(arg);
return;
}
if (!strcasecmp(key, "name")) {
snprintf(p->name, sizeof(p->name), "%s", arg);
return;
Expand Down Expand Up @@ -144,7 +151,7 @@ void pool_set_attr(int pooln, const char* key, char* arg)
}

// pool switching code
bool pool_switch(int pooln)
bool pool_switch(int thr_id, int pooln)
{
int prevn = cur_pooln;
struct pool_infos *prev = &pools[cur_pooln];
Expand Down Expand Up @@ -255,11 +262,11 @@ int pool_get_first_valid(int startfrom)
}

// switch to next available pool
bool pool_switch_next()
bool pool_switch_next(int thr_id)
{
if (num_pools > 1) {
int pooln = pool_get_first_valid(cur_pooln+1);
return pool_switch(pooln);
return pool_switch(thr_id, pooln);
} else {
// no switch possible
if (!opt_quiet)
Expand All @@ -279,7 +286,7 @@ bool pool_switch_url(char *params)
cur_pooln = prevn;
if (nextn == prevn)
return false;
return pool_switch(nextn);
return pool_switch(-1, nextn);
}

// Parse pools array in json config
Expand Down

0 comments on commit e12d666

Please sign in to comment.