mirror of
https://github.com/GOSTSec/ccminer
synced 2025-09-04 10:12:05 +00:00
api: add device uuid (nvml), and OS in hwinfo
move nvdriver to sys infos (unique on system) prepare pool query
This commit is contained in:
parent
dc5d1b112d
commit
3e8457d76c
43
api.cpp
43
api.cpp
@ -207,6 +207,16 @@ static char *getsummary(char *params)
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns current pool infos
|
||||||
|
*/
|
||||||
|
static char *getpoolnfo(char *params)
|
||||||
|
{
|
||||||
|
char *p = buffer;
|
||||||
|
*p = '\0';
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void gpuhwinfos(int gpu_id)
|
static void gpuhwinfos(int gpu_id)
|
||||||
@ -233,7 +243,6 @@ static void gpuhwinfos(int gpu_id)
|
|||||||
cgpu->gpu_fan = gpu_fanpercent(cgpu);
|
cgpu->gpu_fan = gpu_fanpercent(cgpu);
|
||||||
cgpu->gpu_pstate = gpu_pstate(cgpu);
|
cgpu->gpu_pstate = gpu_pstate(cgpu);
|
||||||
gpu_info(cgpu);
|
gpu_info(cgpu);
|
||||||
gpu_nvids(cgpu);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gpu_clocks(cgpu);
|
gpu_clocks(cgpu);
|
||||||
@ -246,19 +255,28 @@ static void gpuhwinfos(int gpu_id)
|
|||||||
|
|
||||||
snprintf(buf, sizeof(buf), "GPU=%d;BUS=%hd;CARD=%s;MEM=%lu;"
|
snprintf(buf, sizeof(buf), "GPU=%d;BUS=%hd;CARD=%s;MEM=%lu;"
|
||||||
"TEMP=%.1f;FAN=%d;FREQ=%d;MEMFREQ=%d;PST=%s;"
|
"TEMP=%.1f;FAN=%d;FREQ=%d;MEMFREQ=%d;PST=%s;"
|
||||||
"VID=%hx;PID=%hx;NVML=%d;NVAPI=%d;DRIVER=%s;BIOS=%s|",
|
"VID=%hx;PID=%hx;NVML=%d;NVAPI=%d;SN=%s;BIOS=%s|",
|
||||||
gpu_id, cgpu->gpu_bus, card, cgpu->gpu_mem,
|
gpu_id, cgpu->gpu_bus, card, cgpu->gpu_mem,
|
||||||
cgpu->gpu_temp, cgpu->gpu_fan, cgpu->gpu_clock, cgpu->gpu_memclock,
|
cgpu->gpu_temp, cgpu->gpu_fan, cgpu->gpu_clock, cgpu->gpu_memclock,
|
||||||
pstate, cgpu->gpu_vid, cgpu->gpu_pid, cgpu->nvml_id, cgpu->nvapi_id,
|
pstate, cgpu->gpu_vid, cgpu->gpu_pid, cgpu->nvml_id, cgpu->nvapi_id,
|
||||||
driver_version, cgpu->gpu_desc);
|
cgpu->gpu_sn, cgpu->gpu_desc);
|
||||||
|
|
||||||
strcat(buffer, buf);
|
strcat(buffer, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* os_name()
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
return "windows";
|
||||||
|
#else
|
||||||
|
return "linux";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CPU Infos
|
* System and CPU Infos
|
||||||
*/
|
*/
|
||||||
static void cpuhwinfos()
|
static void syshwinfos()
|
||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
@ -266,8 +284,8 @@ static void cpuhwinfos()
|
|||||||
uint32_t clock = cpu_clock(0);
|
uint32_t clock = cpu_clock(0);
|
||||||
|
|
||||||
memset(buf, 0, sizeof(buf));
|
memset(buf, 0, sizeof(buf));
|
||||||
snprintf(buf, sizeof(buf), "CPUS=%d;TEMP=%.1f;FREQ=%d|",
|
snprintf(buf, sizeof(buf), "OS=%s;NVDRIVER=%s;CPUS=%d;CPUTEMP=%.1f;CPUFREQ=%d|",
|
||||||
num_cpus, temp, clock);
|
os_name(), driver_version, num_cpus, temp, clock);
|
||||||
strcat(buffer, buf);
|
strcat(buffer, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,10 +297,12 @@ static char *gethwinfos(char *params)
|
|||||||
*buffer = '\0';
|
*buffer = '\0';
|
||||||
for (int i = 0; i < cuda_num_devices(); i++)
|
for (int i = 0; i < cuda_num_devices(); i++)
|
||||||
gpuhwinfos(i);
|
gpuhwinfos(i);
|
||||||
cpuhwinfos();
|
syshwinfos();
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the last 50 scans stats
|
* Returns the last 50 scans stats
|
||||||
* optional param thread id (default all)
|
* optional param thread id (default all)
|
||||||
@ -342,6 +362,8 @@ static char *getmeminfo(char *params)
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
static char *gethelp(char *params);
|
static char *gethelp(char *params);
|
||||||
struct CMDS {
|
struct CMDS {
|
||||||
const char *name;
|
const char *name;
|
||||||
@ -349,10 +371,11 @@ struct CMDS {
|
|||||||
} cmds[] = {
|
} cmds[] = {
|
||||||
{ "summary", getsummary },
|
{ "summary", getsummary },
|
||||||
{ "threads", getthreads },
|
{ "threads", getthreads },
|
||||||
|
{ "pool", getpoolnfo },
|
||||||
{ "histo", gethistory },
|
{ "histo", gethistory },
|
||||||
{ "scanlog", getscanlog },
|
|
||||||
{ "meminfo", getmeminfo },
|
|
||||||
{ "hwinfo", gethwinfos },
|
{ "hwinfo", gethwinfos },
|
||||||
|
{ "meminfo", getmeminfo },
|
||||||
|
{ "scanlog", getscanlog },
|
||||||
/* keep it the last */
|
/* keep it the last */
|
||||||
{ "help", gethelp },
|
{ "help", gethelp },
|
||||||
};
|
};
|
||||||
|
1
miner.h
1
miner.h
@ -391,6 +391,7 @@ struct cgpu_info {
|
|||||||
int8_t nvml_id;
|
int8_t nvml_id;
|
||||||
int8_t nvapi_id;
|
int8_t nvapi_id;
|
||||||
|
|
||||||
|
char gpu_sn[64];
|
||||||
char gpu_desc[64];
|
char gpu_desc[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
95
nvml.cpp
95
nvml.cpp
@ -137,6 +137,8 @@ wrap_nvml_handle * wrap_nvml_create()
|
|||||||
wrap_dlsym(nvmlh->nvml_dll, "nvmlDeviceGetFanSpeed");
|
wrap_dlsym(nvmlh->nvml_dll, "nvmlDeviceGetFanSpeed");
|
||||||
nvmlh->nvmlDeviceGetPerformanceState = (wrap_nvmlReturn_t (*)(wrap_nvmlDevice_t, int *))
|
nvmlh->nvmlDeviceGetPerformanceState = (wrap_nvmlReturn_t (*)(wrap_nvmlDevice_t, int *))
|
||||||
wrap_dlsym(nvmlh->nvml_dll, "nvmlDeviceGetPowerUsage");
|
wrap_dlsym(nvmlh->nvml_dll, "nvmlDeviceGetPowerUsage");
|
||||||
|
nvmlh->nvmlDeviceGetSerial = (wrap_nvmlReturn_t (*)(wrap_nvmlDevice_t, char *, unsigned int))
|
||||||
|
wrap_dlsym(nvmlh->nvml_dll, "nvmlDeviceGetSerial");
|
||||||
nvmlh->nvmlDeviceGetUUID = (wrap_nvmlReturn_t (*)(wrap_nvmlDevice_t, char *, unsigned int))
|
nvmlh->nvmlDeviceGetUUID = (wrap_nvmlReturn_t (*)(wrap_nvmlDevice_t, char *, unsigned int))
|
||||||
wrap_dlsym(nvmlh->nvml_dll, "nvmlDeviceGetUUID");
|
wrap_dlsym(nvmlh->nvml_dll, "nvmlDeviceGetUUID");
|
||||||
nvmlh->nvmlDeviceGetVbiosVersion = (wrap_nvmlReturn_t (*)(wrap_nvmlDevice_t, char *, unsigned int))
|
nvmlh->nvmlDeviceGetVbiosVersion = (wrap_nvmlReturn_t (*)(wrap_nvmlDevice_t, char *, unsigned int))
|
||||||
@ -332,33 +334,48 @@ int wrap_nvml_get_busid(wrap_nvml_handle *nvmlh, int cudaindex, int *busid)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wrap_nvml_get_desc(wrap_nvml_handle *nvmlh, int cudaindex, char *desc, int maxlen)
|
int wrap_nvml_get_serial(wrap_nvml_handle *nvmlh, int cudaindex, char *sn, int maxlen)
|
||||||
|
{
|
||||||
|
uint32_t subids = 0;
|
||||||
|
char uuid[NVML_DEVICE_UUID_BUFFER_SIZE];
|
||||||
|
int gpuindex = nvmlh->cuda_nvml_device_id[cudaindex];
|
||||||
|
wrap_nvmlReturn_t res;
|
||||||
|
if (gpuindex < 0 || gpuindex >= nvmlh->nvml_gpucount)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
res = nvmlh->nvmlDeviceGetSerial(nvmlh->devs[gpuindex], sn, maxlen);
|
||||||
|
if (res == WRAPNVML_SUCCESS) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// nvmlDeviceGetUUID: GPU-f2bd642c-369f-5a14-e0b4-0d22dfe9a1fc
|
||||||
|
// use a part of uuid to generate an unique serial
|
||||||
|
// todo: check if there is vendor id is inside
|
||||||
|
memset(uuid, 0, sizeof(uuid));
|
||||||
|
res = nvmlh->nvmlDeviceGetUUID(nvmlh->devs[gpuindex], uuid, sizeof(uuid)-1);
|
||||||
|
if (res != WRAPNVML_SUCCESS) {
|
||||||
|
if (opt_debug)
|
||||||
|
applog(LOG_DEBUG, "nvmlDeviceGetUUID: %s", nvmlh->nvmlErrorString(res));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
strncpy(sn, &uuid[4], min((int) strlen(uuid), maxlen));
|
||||||
|
sn[maxlen-1] = '\0';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wrap_nvml_get_bios(wrap_nvml_handle *nvmlh, int cudaindex, char *desc, int maxlen)
|
||||||
{
|
{
|
||||||
uint32_t subids = 0;
|
uint32_t subids = 0;
|
||||||
int gpuindex = nvmlh->cuda_nvml_device_id[cudaindex];
|
int gpuindex = nvmlh->cuda_nvml_device_id[cudaindex];
|
||||||
if (gpuindex < 0 || gpuindex >= nvmlh->nvml_gpucount)
|
if (gpuindex < 0 || gpuindex >= nvmlh->nvml_gpucount)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
#if 0
|
|
||||||
// todo: check if there is vendor id is inside
|
|
||||||
// nvmlDeviceGetUUID: GPU-f2bd642c-369f-5a14-e0b4-0d22dfe9a1fc
|
|
||||||
wrap_nvmlReturn_t res = nvmlh->nvmlDeviceGetUUID(nvmlh->devs[gpuindex], desc, maxlen);
|
|
||||||
if (res != WRAPNVML_SUCCESS) {
|
|
||||||
if (opt_debug)
|
|
||||||
applog(LOG_DEBUG, "nvmlDeviceGetUUID: %s", nvmlh->nvmlErrorString(res));
|
|
||||||
} else {
|
|
||||||
applog(LOG_DEBUG, "nvml Device UUID: %s", desc);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
wrap_nvmlReturn_t res = nvmlh->nvmlDeviceGetVbiosVersion(nvmlh->devs[gpuindex], desc, maxlen);
|
wrap_nvmlReturn_t res = nvmlh->nvmlDeviceGetVbiosVersion(nvmlh->devs[gpuindex], desc, maxlen);
|
||||||
if (res != WRAPNVML_SUCCESS) {
|
if (res != WRAPNVML_SUCCESS) {
|
||||||
if (opt_debug)
|
if (opt_debug)
|
||||||
applog(LOG_DEBUG, "nvmlDeviceGetVbiosVersion: %s", nvmlh->nvmlErrorString(res));
|
applog(LOG_DEBUG, "nvmlDeviceGetVbiosVersion: %s", nvmlh->nvmlErrorString(res));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
applog(LOG_DEBUG, "nvmlDeviceGetVbiosVersion: %s", desc);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -523,7 +540,31 @@ int nvapi_getinfo(unsigned int devNum, uint16_t *vid, uint16_t *pid)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nvapi_getdesc(unsigned int devNum, char *desc, unsigned int maxlen)
|
int nvapi_getserial(unsigned int devNum, char *serial, unsigned int maxlen)
|
||||||
|
{
|
||||||
|
// NvAPI_Status ret;
|
||||||
|
if (devNum >= nvapi_dev_cnt)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
sprintf(serial, "");
|
||||||
|
|
||||||
|
if (maxlen < 64) // Short String
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
ret = NvAPI_GPU_Get..(phys[devNum], serial);
|
||||||
|
if (ret != NVAPI_OK) {
|
||||||
|
NvAPI_ShortString string;
|
||||||
|
NvAPI_GetErrorMessage(ret, string);
|
||||||
|
if (opt_debug)
|
||||||
|
applog(LOG_DEBUG, "NVAPI ...: %s", string);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int nvapi_getbios(unsigned int devNum, char *desc, unsigned int maxlen)
|
||||||
{
|
{
|
||||||
NvAPI_Status ret;
|
NvAPI_Status ret;
|
||||||
if (devNum >= nvapi_dev_cnt)
|
if (devNum >= nvapi_dev_cnt)
|
||||||
@ -704,19 +745,6 @@ unsigned int gpu_power(struct cgpu_info *gpu)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int gpu_info(struct cgpu_info *gpu)
|
int gpu_info(struct cgpu_info *gpu)
|
||||||
{
|
|
||||||
if (hnvml) {
|
|
||||||
wrap_nvml_get_info(hnvml, gpu->gpu_id, &gpu->gpu_vid, &gpu->gpu_pid);
|
|
||||||
wrap_nvml_get_desc(hnvml, gpu->gpu_id, gpu->gpu_desc, sizeof(gpu->gpu_desc));
|
|
||||||
}
|
|
||||||
#ifdef WIN32
|
|
||||||
nvapi_getinfo(nvapi_dev_map[gpu->gpu_id], &gpu->gpu_vid, &gpu->gpu_pid);
|
|
||||||
nvapi_getdesc(nvapi_dev_map[gpu->gpu_id], gpu->gpu_desc, sizeof(gpu->gpu_desc));
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int gpu_nvids(struct cgpu_info *gpu)
|
|
||||||
{
|
{
|
||||||
int id = gpu->gpu_id;
|
int id = gpu->gpu_id;
|
||||||
|
|
||||||
@ -726,10 +754,17 @@ int gpu_nvids(struct cgpu_info *gpu)
|
|||||||
if (id < 0)
|
if (id < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (hnvml && id < hnvml->nvml_gpucount)
|
if (hnvml) {
|
||||||
gpu->nvml_id = (int8_t) hnvml->cuda_nvml_device_id[id];
|
gpu->nvml_id = (int8_t) hnvml->cuda_nvml_device_id[id];
|
||||||
|
wrap_nvml_get_info(hnvml, id, &gpu->gpu_vid, &gpu->gpu_pid);
|
||||||
|
wrap_nvml_get_serial(hnvml, id, gpu->gpu_sn, sizeof(gpu->gpu_sn));
|
||||||
|
wrap_nvml_get_bios(hnvml, id, gpu->gpu_desc, sizeof(gpu->gpu_desc));
|
||||||
|
}
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
gpu->nvapi_id = (int8_t) nvapi_dev_map[id];
|
gpu->nvapi_id = (int8_t) nvapi_dev_map[id];
|
||||||
|
nvapi_getinfo(nvapi_dev_map[id], &gpu->gpu_vid, &gpu->gpu_pid);
|
||||||
|
nvapi_getserial(nvapi_dev_map[id], gpu->gpu_sn, sizeof(gpu->gpu_sn));
|
||||||
|
nvapi_getbios(nvapi_dev_map[id], gpu->gpu_desc, sizeof(gpu->gpu_desc));
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
7
nvml.h
7
nvml.h
@ -45,6 +45,10 @@ NVML_CLOCK_SM = 1,
|
|||||||
NVML_CLOCK_MEM = 2
|
NVML_CLOCK_MEM = 2
|
||||||
} wrap_nvmlClockType_t;
|
} wrap_nvmlClockType_t;
|
||||||
|
|
||||||
|
#define NVML_DEVICE_SERIAL_BUFFER_SIZE 30
|
||||||
|
#define NVML_DEVICE_UUID_BUFFER_SIZE 80
|
||||||
|
#define NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE 32
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle to hold the function pointers for the entry points we need,
|
* Handle to hold the function pointers for the entry points we need,
|
||||||
* and the shared library itself.
|
* and the shared library itself.
|
||||||
@ -71,6 +75,7 @@ typedef struct {
|
|||||||
wrap_nvmlReturn_t (*nvmlDeviceGetFanSpeed)(wrap_nvmlDevice_t, unsigned int *);
|
wrap_nvmlReturn_t (*nvmlDeviceGetFanSpeed)(wrap_nvmlDevice_t, unsigned int *);
|
||||||
wrap_nvmlReturn_t (*nvmlDeviceGetPerformanceState)(wrap_nvmlDevice_t, int *); /* enum */
|
wrap_nvmlReturn_t (*nvmlDeviceGetPerformanceState)(wrap_nvmlDevice_t, int *); /* enum */
|
||||||
wrap_nvmlReturn_t (*nvmlDeviceGetPowerUsage)(wrap_nvmlDevice_t, unsigned int *);
|
wrap_nvmlReturn_t (*nvmlDeviceGetPowerUsage)(wrap_nvmlDevice_t, unsigned int *);
|
||||||
|
wrap_nvmlReturn_t (*nvmlDeviceGetSerial)(wrap_nvmlDevice_t, char *serial, unsigned int len);
|
||||||
wrap_nvmlReturn_t (*nvmlDeviceGetUUID)(wrap_nvmlDevice_t, char *uuid, unsigned int len);
|
wrap_nvmlReturn_t (*nvmlDeviceGetUUID)(wrap_nvmlDevice_t, char *uuid, unsigned int len);
|
||||||
wrap_nvmlReturn_t (*nvmlDeviceGetVbiosVersion)(wrap_nvmlDevice_t, char *version, unsigned int len);
|
wrap_nvmlReturn_t (*nvmlDeviceGetVbiosVersion)(wrap_nvmlDevice_t, char *version, unsigned int len);
|
||||||
wrap_nvmlReturn_t (*nvmlSystemGetDriverVersion)(char *version, unsigned int len);
|
wrap_nvmlReturn_t (*nvmlSystemGetDriverVersion)(char *version, unsigned int len);
|
||||||
@ -143,7 +148,7 @@ unsigned int gpu_usage(struct cgpu_info *gpu);
|
|||||||
int gpu_pstate(struct cgpu_info *gpu);
|
int gpu_pstate(struct cgpu_info *gpu);
|
||||||
int gpu_busid(struct cgpu_info *gpu);
|
int gpu_busid(struct cgpu_info *gpu);
|
||||||
|
|
||||||
int gpu_nvids(struct cgpu_info *gpu);
|
/* pid/vid, sn and bios rev */
|
||||||
int gpu_info(struct cgpu_info *gpu);
|
int gpu_info(struct cgpu_info *gpu);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user