api: add meminfo query to debug mem storages

This commit is contained in:
Tanguy Pruvot 2014-11-17 16:17:53 +01:00
parent 6a9b8a5ab2
commit 047e79a9fc
4 changed files with 54 additions and 15 deletions

22
api.cpp
View File

@ -225,6 +225,25 @@ static char *gethistory(char *params)
return buffer;
}
/**
* Some debug infos about memory usage
*/
static char *getmeminfo(char *params)
{
uint64_t smem, hmem, totmem;
uint32_t srec, hrec;
stats_getmeminfo(&smem, &srec);
hashlog_getmeminfo(&hmem, &hrec);
totmem = smem + hmem;
*buffer = '\0';
sprintf(buffer, "STATS=%u;HASHLOG=%u;MEM=%llu|",
srec, hrec, totmem);
return buffer;
}
static char *gethelp(char *params);
struct CMDS {
const char *name;
@ -232,7 +251,8 @@ struct CMDS {
} cmds[] = {
{ "summary", getsummary },
{ "threads", getthreads },
{ "histo", gethistory },
{ "histo", gethistory },
{ "meminfo", getmeminfo },
/* keep it the last */
{ "help", gethelp },
};

View File

@ -43,7 +43,7 @@ static uint64_t hextouint(char* jobid)
/**
* @return time of a job/nonce submission (or last nonce if nonce is 0)
*/
extern "C" uint32_t hashlog_already_submittted(char* jobid, uint32_t nonce)
uint32_t hashlog_already_submittted(char* jobid, uint32_t nonce)
{
uint32_t ret = 0;
uint64_t njobid = hextouint(jobid);
@ -61,7 +61,7 @@ extern "C" uint32_t hashlog_already_submittted(char* jobid, uint32_t nonce)
/**
* Store submitted nonces of a job
*/
extern "C" void hashlog_remember_submit(struct work* work, uint32_t nonce)
void hashlog_remember_submit(struct work* work, uint32_t nonce)
{
uint64_t njobid = hextouint(work->job_id);
uint64_t key = (njobid << 32) + nonce;
@ -78,7 +78,7 @@ extern "C" void hashlog_remember_submit(struct work* work, uint32_t nonce)
/**
* Update job scanned range
*/
extern "C" void hashlog_remember_scan_range(struct work* work)
void hashlog_remember_scan_range(struct work* work)
{
uint64_t njobid = hextouint(work->job_id);
uint64_t key = (njobid << 32);
@ -120,7 +120,7 @@ extern "C" void hashlog_remember_scan_range(struct work* work)
* Returns the range of a job
* @return uint64_t to|from
*/
extern "C" uint64_t hashlog_get_scan_range(char* jobid)
uint64_t hashlog_get_scan_range(char* jobid)
{
uint64_t ret = 0;
uint64_t njobid = hextouint(jobid);
@ -149,7 +149,7 @@ extern "C" uint64_t hashlog_get_scan_range(char* jobid)
* Search last submitted nonce for a job
* @return max nonce
*/
extern "C" uint32_t hashlog_get_last_sent(char* jobid)
uint32_t hashlog_get_last_sent(char* jobid)
{
uint32_t nonce = 0;
uint64_t njobid = hextouint(jobid);
@ -167,7 +167,7 @@ extern "C" uint32_t hashlog_get_last_sent(char* jobid)
/**
* Remove entries of a job...
*/
extern "C" void hashlog_purge_job(char* jobid)
void hashlog_purge_job(char* jobid)
{
int deleted = 0;
uint64_t njobid = hextouint(jobid);
@ -189,7 +189,7 @@ extern "C" void hashlog_purge_job(char* jobid)
/**
* Remove old entries to reduce memory usage
*/
extern "C" void hashlog_purge_old(void)
void hashlog_purge_old(void)
{
int deleted = 0;
uint32_t now = (uint32_t) time(NULL);
@ -210,15 +210,24 @@ extern "C" void hashlog_purge_old(void)
/**
* Reset the submitted nonces cache
*/
extern "C" void hashlog_purge_all(void)
void hashlog_purge_all(void)
{
tlastshares.clear();
}
/**
* API meminfo
*/
void hashlog_getmeminfo(uint64_t *mem, uint32_t *records)
{
(*records) = tlastshares.size();
(*mem) = (*records) * sizeof(hashlog_data);
}
/**
* Used to debug ranges...
*/
extern "C" void hashlog_dump_job(char* jobid)
void hashlog_dump_job(char* jobid)
{
if (opt_debug) {
uint64_t njobid = hextouint(jobid);

View File

@ -556,12 +556,14 @@ void hashlog_purge_old(void);
void hashlog_purge_job(char* jobid);
void hashlog_purge_all(void);
void hashlog_dump_job(char* jobid);
void hashlog_getmeminfo(uint64_t *mem, uint32_t *records);
void stats_remember_speed(int thr_id, uint32_t hashcount, double hashrate, uint8_t found);
double stats_get_speed(int thr_id, double def_speed);
int stats_get_history(int thr_id, struct stats_data *data, int max_records);
void stats_purge_old(void);
void stats_purge_all(void);
void stats_getmeminfo(uint64_t *mem, uint32_t *records);
struct thread_q;

View File

@ -25,7 +25,7 @@ extern int device_map[8];
/**
* Store speed per thread (todo: compute vardiff ?)
*/
extern "C" void stats_remember_speed(int thr_id, uint32_t hashcount, double hashrate, uint8_t found)
void stats_remember_speed(int thr_id, uint32_t hashcount, double hashrate, uint8_t found)
{
uint64_t gpu = device_map[thr_id];
uint64_t key = (gpu << 56) + (uid++ % UINT_MAX);
@ -59,7 +59,7 @@ extern "C" void stats_remember_speed(int thr_id, uint32_t hashcount, double hash
* Get the computed average speed
* @param thr_id int (-1 for all threads)
*/
extern "C" double stats_get_speed(int thr_id, double def_speed)
double stats_get_speed(int thr_id, double def_speed)
{
uint64_t gpu = device_map[thr_id];
uint64_t keypfx = (gpu << 56);
@ -91,7 +91,7 @@ extern "C" double stats_get_speed(int thr_id, double def_speed)
return speed;
}
extern "C" int stats_get_history(int thr_id, struct stats_data *data, int max_records)
int stats_get_history(int thr_id, struct stats_data *data, int max_records)
{
uint64_t gpu = device_map[thr_id];
uint64_t keypfx = (gpu << 56);
@ -114,7 +114,7 @@ extern "C" int stats_get_history(int thr_id, struct stats_data *data, int max_re
/**
* Remove old entries to reduce memory usage
*/
extern "C" void stats_purge_old(void)
void stats_purge_old(void)
{
int deleted = 0;
uint32_t now = (uint32_t) time(NULL);
@ -135,8 +135,16 @@ extern "C" void stats_purge_old(void)
/**
* Reset the cache
*/
extern "C" void stats_purge_all(void)
void stats_purge_all(void)
{
tlastscans.clear();
}
/**
* API meminfo
*/
void stats_getmeminfo(uint64_t *mem, uint32_t *records)
{
(*records) = tlastscans.size();
(*mem) = (*records) * sizeof(stats_data);
}