Browse Source

bflsc nonce per work item stats

nfactor-troky
Kano 12 years ago
parent
commit
18e4edc776
  1. 22
      driver-bflsc.c

22
driver-bflsc.c

@ -127,6 +127,8 @@ struct bflsc_dev {
bool flushed; // are any flushed? bool flushed; // are any flushed?
}; };
#define QUE_MAX_RESULTS 8
struct bflsc_info { struct bflsc_info {
enum driver_version driver_version; enum driver_version driver_version;
pthread_rwlock_t stat_lock; pthread_rwlock_t stat_lock;
@ -151,6 +153,8 @@ struct bflsc_info {
int que_fld_min; int que_fld_min;
int que_fld_max; int que_fld_max;
int flush_size; int flush_size;
// count of given size, [+2] is for any > QUE_MAX_RESULTS
uint64_t result_size[QUE_MAX_RESULTS+2];
}; };
#define BFLSC_XLINKHDR '@' #define BFLSC_XLINKHDR '@'
@ -184,12 +188,12 @@ struct QueueJobStructure {
#define QUE_NONCECOUNT_V1 2 #define QUE_NONCECOUNT_V1 2
#define QUE_FLD_MIN_V1 3 #define QUE_FLD_MIN_V1 3
#define QUE_FLD_MAX_V1 11 #define QUE_FLD_MAX_V1 (QUE_MAX_RESULTS+QUE_FLD_MIN_V1)
#define QUE_CHIP_V2 2 #define QUE_CHIP_V2 2
#define QUE_NONCECOUNT_V2 3 #define QUE_NONCECOUNT_V2 3
#define QUE_FLD_MIN_V2 4 #define QUE_FLD_MIN_V2 4
#define QUE_FLD_MAX_V2 12 #define QUE_FLD_MAX_V2 (QUE_MAX_RESULTS+QUE_FLD_MIN_V2)
#define BFLSC_SIGNATURE 0xc1 #define BFLSC_SIGNATURE 0xc1
#define BFLSC_EOW 0xfe #define BFLSC_EOW 0xfe
@ -1551,7 +1555,7 @@ static void process_nonces(struct cgpu_info *bflsc, int dev, char *xlink, char *
char midstate[MIDSTATE_BYTES], blockdata[MERKLE_BYTES]; char midstate[MIDSTATE_BYTES], blockdata[MERKLE_BYTES];
struct work *work; struct work *work;
uint32_t nonce; uint32_t nonce;
int i, num; int i, num, x;
bool res; bool res;
char *tmp; char *tmp;
@ -1602,6 +1606,7 @@ static void process_nonces(struct cgpu_info *bflsc, int dev, char *xlink, char *
} }
res = false; res = false;
x = 0;
for (i = sc_info->que_fld_min; i < count; i++) { for (i = sc_info->que_fld_min; i < count; i++) {
if (strlen(fields[i]) != 8) { if (strlen(fields[i]) != 8) {
tmp = str_text(data); tmp = str_text(data);
@ -1619,12 +1624,16 @@ static void process_nonces(struct cgpu_info *bflsc, int dev, char *xlink, char *
wr_unlock(&(sc_info->stat_lock)); wr_unlock(&(sc_info->stat_lock));
(*nonces)++; (*nonces)++;
x++;
} }
} }
wr_lock(&(sc_info->stat_lock)); wr_lock(&(sc_info->stat_lock));
if (res) if (res)
sc_info->sc_devs[dev].result_id++; sc_info->sc_devs[dev].result_id++;
if (x > QUE_MAX_RESULTS)
x = QUE_MAX_RESULTS + 1;
(sc_info->result_size[x])++;
sc_info->sc_devs[dev].work_complete++; sc_info->sc_devs[dev].work_complete++;
sc_info->sc_devs[dev].hashes_unsent += FULLNONCE; sc_info->sc_devs[dev].hashes_unsent += FULLNONCE;
// If not flushed (stale) // If not flushed (stale)
@ -2217,6 +2226,7 @@ static struct api_data *bflsc_api_stats(struct cgpu_info *bflsc)
{ {
struct bflsc_info *sc_info = (struct bflsc_info *)(bflsc->device_data); struct bflsc_info *sc_info = (struct bflsc_info *)(bflsc->device_data);
struct api_data *root = NULL; struct api_data *root = NULL;
char buf[256];
int i; int i;
//if no x-link ... etc //if no x-link ... etc
@ -2239,6 +2249,12 @@ static struct api_data *bflsc_api_stats(struct cgpu_info *bflsc)
root = api_add_uint(root, "Scan Sleep", &(sc_info->scan_sleep_time), true); root = api_add_uint(root, "Scan Sleep", &(sc_info->scan_sleep_time), true);
root = api_add_uint(root, "Results Sleep", &(sc_info->results_sleep_time), true); root = api_add_uint(root, "Results Sleep", &(sc_info->results_sleep_time), true);
root = api_add_uint(root, "Work ms", &(sc_info->default_ms_work), true); root = api_add_uint(root, "Work ms", &(sc_info->default_ms_work), true);
buf[0] = '\0';
for (i = 0; i <= QUE_MAX_RESULTS + 1; i++)
tailsprintf(buf, sizeof(buf), "%s%"PRIu64, (i > 0) ? "/" : "", sc_info->result_size[i]);
root = api_add_string(root, "Result Size", buf, true);
rd_unlock(&(sc_info->stat_lock)); rd_unlock(&(sc_info->stat_lock));
i = (int)(sc_info->driver_version); i = (int)(sc_info->driver_version);

Loading…
Cancel
Save