diff --git a/api.cpp b/api.cpp index 8a5f7ea..1209237 100644 --- a/api.cpp +++ b/api.cpp @@ -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 }, }; diff --git a/hashlog.cpp b/hashlog.cpp index aa14e1d..eb3ec37 100644 --- a/hashlog.cpp +++ b/hashlog.cpp @@ -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); diff --git a/miner.h b/miner.h index 40f11d7..3a0c626 100644 --- a/miner.h +++ b/miner.h @@ -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; diff --git a/stats.cpp b/stats.cpp index 5ae0135..6204006 100644 --- a/stats.cpp +++ b/stats.cpp @@ -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); +}