19#define PROCSTATFILE "/proc/stat"
22#ifndef PROCMEMINFOFILE
23#define PROCMEMINFOFILE "/proc/meminfo"
26#ifndef PROCNETSTATFILE
27#define PROCNETSTATFILE "/proc/net/dev"
30#define String_startsWith(s, match) (strstr((s), (match)) == (s))
53#include <sensors/sensors.h>
97#define EVID_MONITOR 63
103 {
"${HOSTNAME}_msysmon", {
187 TEMPERATURE = 1 << 0,
188 COMPUTE_MODE = 1 << 1,
189 POWER_USAGE = 1 << 2,
190 MEMORY_INFO = 1 << 3,
193 UTILIZATION_INFO = 1 << 6
201 nvmlComputeMode_t compute_mode;
203 nvmlEventSet_t event_set;
205 nvmlUtilization_t util;
208 unsigned temperature;
211 unsigned power_usage;
214 nvmlClockType_t clock[NVML_CLOCK_COUNT], max_clock[NVML_CLOCK_COUNT];
219 char name[NVML_DEVICE_NAME_BUFFER_SIZE];
220 char serial[NVML_DEVICE_SERIAL_BUFFER_SIZE];
221 char uuid[NVML_DEVICE_UUID_BUFFER_SIZE];
224 unsigned feature_support;
226unsigned nGPUs=HAVE_NVIDIA;
227std::vector<GPU*> GPUs;
232const char* nvml_error_code_string(nvmlReturn_t ret)
236 return "The operation was successful";
237 case NVML_ERROR_UNINITIALIZED:
238 return "was not first initialized with nvmlInit()";
239 case NVML_ERROR_INVALID_ARGUMENT:
240 return "A supplied argument is invalid";
241 case NVML_ERROR_NOT_SUPPORTED:
242 return "The requested operation is not available on target device";
243 case NVML_ERROR_NO_PERMISSION:
244 return "The current user does not have permission for operation";
245 case NVML_ERROR_ALREADY_INITIALIZED:
246 return"Deprecated: Multiple initializations are now allowed through ref counting";
247 case NVML_ERROR_NOT_FOUND:
248 return "A query to find an object was unsuccessful";
249 case NVML_ERROR_INSUFFICIENT_SIZE:
250 return "An input argument is not large enough";
251 case NVML_ERROR_INSUFFICIENT_POWER:
252 return "A device’s external power cables are not properly attached";
253 case NVML_ERROR_DRIVER_NOT_LOADED:
254 return "NVIDIA driver is not loaded";
255 case NVML_ERROR_TIMEOUT:
256 return "User provided timeout passed";
257 case NVML_ERROR_IRQ_ISSUE:
258 return "NVIDIA Kernel detected an interrupt issue with a GPU";
259 case NVML_ERROR_LIBRARY_NOT_FOUND:
260 return "NVML Shared Library couldn’t be found or loaded";
261 case NVML_ERROR_FUNCTION_NOT_FOUND:
262 return"Local version of NVML doesn’t implement this function";
263 case NVML_ERROR_CORRUPTED_INFOROM:
264 return "infoROM is corrupted";
265 case NVML_ERROR_GPU_IS_LOST:
266 return "The GPU has fallen off the bus or has otherwise become inaccessible.";
267 case NVML_ERROR_RESET_REQUIRED:
268 return "The GPU requires a reset before it can be used again";
269 case NVML_ERROR_OPERATING_SYSTEM:
270 return "The GPU control device has been blocked by the operating system/cgroups.";
271 case NVML_ERROR_LIB_RM_VERSION_MISMATCH:
272 return "RM detects a driver/library version mismatch.";
273 case NVML_ERROR_IN_USE:
274 return "An operation cannot be performed because the GPU is currently in use.";
275 case NVML_ERROR_MEMORY:
276 return "Insufficient memory.";
277 case NVML_ERROR_NO_DATA:
279 case NVML_ERROR_VGPU_ECC_NOT_SUPPORTED:
280 return "The requested vgpu operation is not available on target device, becasue ECC is enabled.";
281 case NVML_ERROR_UNKNOWN:
282 return "An internal driver error occurred";
285 return "Unknown error";
293static inline int nvml_try(nvmlReturn_t ret,
const char* fn)
297 if(ret != NVML_SUCCESS && ret != NVML_ERROR_TIMEOUT) {
298 fprintf(stderr,
"%s: %s: %s\n", fn, nvml_error_code_string(ret),
299 nvmlErrorString(ret));
306#define NVML_TRY(code) nvml_try(code, #code)
312 "#00AAFF",
"#FF9000",
"#FF00A0",
"#00C030",
313 "#A0C0D0",
"#D0A060",
"#C04010",
"#807060",
314 "#F0C000",
"#2090A0",
"#D040D0",
"#90B000",
315 "#B0B040",
"#B0B0FF",
"#FFA0A0",
"#A0FFA0"};
318#ifdef HAVE_LM_SENSORS
325 const std::string SensorName;
326 const std::string FeatureName;
327 const sensors_chip_name* cn;
330 MySensor(
const std::string _SensorName,
const std::string _name,
const sensors_chip_name* _cn,
int _number):
331 SensorName(_SensorName), FeatureName(_name), cn(_cn), number(_number)
337 sensors_get_value(this->cn,this->number,&
value);
340 std::string GetFullName(
size_t limit)
342 std::string fullname = SensorName +
"(" + FeatureName +
")";
343 if (fullname.size()> limit)
344 return fullname.substr(0,limit-1);
349 std::vector<MySensor*> Temperatures;
350 std::vector<MySensor*> Fans;
356 status = sensors_init(NULL);
359 printf(
"Issue with sensors\n");
363 while (
const sensors_chip_name* cn = sensors_get_detected_chips(0, &nr))
366 while (
const sensors_feature * cf = sensors_get_features(cn,&fnr))
370 while (
const sensors_subfeature * scf = sensors_get_all_subfeatures(cn , cf, &sfnr))
374 if (scf->type == SENSORS_SUBFEATURE_TEMP_INPUT )
376 Temperatures.push_back(
378 sensors_get_label(cn,cf),
384 if (scf->type == SENSORS_SUBFEATURE_FAN_INPUT )
388 sensors_get_label(cn,cf),
399 void BuildHostTemperaturePlot()
404 int NVARS=Temperatures.size();
409 sprintf(path,
"/History/Display/msysmon/%s-Temperature/Variables",
equipment[0].
info.frontend_host);
411 char vars[size*NVARS];
412 memset(vars, 0, size*NVARS);
413 for (
int i=0;
i<NVARS;
i++)
425 sprintf(path,
"/History/Display/msysmon/%s-Temperature/Label",
equipment[0].
info.frontend_host);
427 char vars[size*NVARS];
428 memset(vars, 0, size*NVARS);
429 for (
int i=0;
i<NVARS;
i++)
430 sprintf(vars+size*
i,Temperatures.at(
i)->GetFullName(size).c_str(),
i+1);
439 sprintf(path,
"/History/Display/msysmon/%s-Temperature/Colour",
equipment[0].
info.frontend_host);
441 char vars[size*NVARS];
442 memset(vars, 0, size*NVARS);
443 for (
int i=0;
i<NVARS;
i++)
444 sprintf(vars+size*
i,
"%s",(
colours[
i%16]).c_str());
452 sprintf(path,
"/History/Display/msysmon/%s-Temperature/Timescale",
equipment[0].
info.frontend_host);
454 double *m=
new double();
456 sprintf(path,
"/History/Display/msysmon/%s-Temperature/Minimum",
equipment[0].
info.frontend_host);
459 sprintf(path,
"/History/Display/msysmon/%s-Temperature/Maximum",
equipment[0].
info.frontend_host);
464 char* ReadAndLogSensors(
char* pevent)
472 if (Temperatures.size())
475 for ( MySensor* s: Temperatures)
485 for ( MySensor* s: Fans)
497LM_Sensors* sensors = NULL;
541 int return_max_length =
CINT(3);
543 cm_msg(
MINFO,
"rpc_callback",
"--------> rpc_callback: index %d, max_length %d, cmd [%s], args [%s]",
index, return_max_length, cmd, args);
550 time_t now = time(NULL);
551 sprintf(tmp,
"{ \"current_time\" : [ %d, \"%s\"] }", (
int)now,
ctime(&now));
553 mstrlcpy(return_buf, tmp, return_max_length);
575 sprintf(path,
"/History/Display/msysmon/%s/Variables",
equipment[0].
info.frontend_host);
577 char vars[size*NVARS];
578 memset(vars, 0, size*NVARS);
592 sprintf(path,
"/History/Display/msysmon/%s/Label",
equipment[0].
info.frontend_host);
594 char vars[size*NVARS];
595 memset(vars, 0, size*NVARS);
596 sprintf(vars+size*0,
"NICE CPU Load (%%)");
597 sprintf(vars+size*1,
"USER CPU Load (%%)");
598 sprintf(vars+size*2,
"SYSTEM CPU Load (%%)");
599 sprintf(vars+size*3,
"Memory Usage (%%)");
600 sprintf(vars+size*4,
"Swap Usage (%%)");
609 sprintf(path,
"/History/Display/msysmon/%s/Colour",
equipment[0].
info.frontend_host);
611 char vars[size*NVARS];
612 memset(vars, 0, size*NVARS);
613 for (
int i=0;
i<NVARS;
i++)
614 sprintf(vars+size*
i,
"%s",(
colours[
i%16]).c_str());
622 sprintf(path,
"/History/Display/msysmon/%s/Timescale",
equipment[0].
info.frontend_host);
624 double *m=
new double();
626 sprintf(path,
"/History/Display/msysmon/%s/Minimum",
equipment[0].
info.frontend_host);
629 sprintf(path,
"/History/Display/msysmon/%s/Maximum",
equipment[0].
info.frontend_host);
644 sprintf(path,
"/History/Display/msysmon/%s-CPU/Variables",
equipment[0].
info.frontend_host);
646 char vars[size*NVARS];
647 memset(vars, 0, size*NVARS);
648#ifdef CLASSIC_CPU_VARS
653 int t=
'0'+(icpu%100)/10;
681 sprintf(path,
"/History/Display/msysmon/%s-CPU/Label",
equipment[0].
info.frontend_host);
683 char vars[size*NVARS];
684 memset(vars, 0, size*NVARS);
686 sprintf(vars+size*
i,
"CPU%d Load (%%)",
i+1);
695 sprintf(path,
"/History/Display/msysmon/%s-CPU/Colour",
equipment[0].
info.frontend_host);
697 char vars[size*NVARS];
698 memset(vars, 0, size*NVARS);
699 for (
int i=0;
i<NVARS;
i++)
700 sprintf(vars+size*
i,
"%s",(
colours[
i%16]).c_str());
707 sprintf(path,
"/History/Display/msysmon/%s-CPU/Timescale",
equipment[0].
info.frontend_host);
709 double *m=
new double();
711 sprintf(path,
"/History/Display/msysmon/%s-CPU/Minimum",
equipment[0].
info.frontend_host);
714 sprintf(path,
"/History/Display/msysmon/%s-CPU/Maximum",
equipment[0].
info.frontend_host);
729 sprintf(path,
"/History/Display/msysmon/%s-net/Variables",
equipment[0].
info.frontend_host);
731 char vars[size*NVARS];
732 memset(vars, 0, size*NVARS);
745 sprintf(path,
"/History/Display/msysmon/%s-net/Label",
equipment[0].
info.frontend_host);
747 char vars[size*NVARS];
748 memset(vars, 0, size*NVARS);
750 sprintf(vars+size*
i,
"%s Received (Mbps)",
NetReceive.at(
i)->face.c_str());
761 sprintf(path,
"/History/Display/msysmon/%s-net/Colour",
equipment[0].
info.frontend_host);
763 char vars[size*NVARS];
764 memset(vars, 0, size*NVARS);
765 for (
int i=0;
i<NVARS;
i++)
766 sprintf(vars+size*
i,
"%s",(
colours[
i%16]).c_str());
773 sprintf(path,
"/History/Display/msysmon/%s-net/Timescale",
equipment[0].
info.frontend_host);
775 double *m=
new double();
777 sprintf(path,
"/History/Display/msysmon/%s-net/Minimum",
equipment[0].
info.frontend_host);
780 sprintf(path,
"/History/Display/msysmon/%s-net/Maximum",
equipment[0].
info.frontend_host);
787void BuildHostGPUPlot()
795 int NVARS=5*HAVE_NVIDIA;
801 sprintf(path,
"/History/Display/msysmon/%s-GPU/Variables",
equipment[0].
info.frontend_host);
803 char vars[size*NVARS];
804 memset(vars, 0, size*NVARS);
805 for (
int i=0;
i<HAVE_NVIDIA;
i++)
821 sprintf(path,
"/History/Display/msysmon/%s-GPU/Label",
equipment[0].
info.frontend_host);
823 char vars[size*NVARS];
824 memset(vars, 0, size*NVARS);
825 for (
int i=0;
i<HAVE_NVIDIA;
i++)
827 sprintf(vars+size*0+
i*size*5,
"GPU %d Temperature (C)",
i);
828 sprintf(vars+size*1+
i*size*5,
"GPU %d FAN (%%)",
i);
829 sprintf(vars+size*2+
i*size*5,
"GPU %d Power (W)",
i);
830 sprintf(vars+size*3+
i*size*5,
"GPU %d Utilisation (%%)",
i);
831 sprintf(vars+size*4+
i*size*5,
"GPU %d Memory Usage (%%)",
i);
841 sprintf(path,
"/History/Display/msysmon/%s-GPU/Colour",
equipment[0].
info.frontend_host);
843 char vars[size*NVARS];
844 memset(vars, 0, size*NVARS);
845 for (
int i=0;
i<NVARS;
i++)
846 for (
int j=0;
j<HAVE_NVIDIA;
j++)
847 sprintf(vars+size*
i+
j*size*5,
"%s",(
colours[
i%16]).c_str());
855 sprintf(path,
"/History/Display/msysmon/%s-GPU/Timescale",
equipment[0].
info.frontend_host);
857 double *m=
new double();
859 sprintf(path,
"/History/Display/msysmon/%s-GPU/Minimum",
equipment[0].
info.frontend_host);
862 sprintf(path,
"/History/Display/msysmon/%s-GPU/Maximum",
equipment[0].
info.frontend_host);
871 printf(
"frontend_init!\n");
882 const char*s = fgets(buffer, 255,
file);
900 if (!fgets(buffer, 255,
file))
break;
901 for (
int i=0;
i<255;
i++)
903 if (!buffer[
i])
break;
907 r->
face=std::string(buffer,&buffer[
i]);
911 t->
face=std::string(buffer,&buffer[
i]);
932#ifdef HAVE_LM_SENSORS
934 sensors=
new LM_Sensors();
935 sensors->BuildHostTemperaturePlot();
1015 printf(
"interrupt_configure!\n");
1041 unsigned long long int ioWait, irq, softIrq, steal, guest, guestnice;
1042 unsigned long long int systemalltime, idlealltime, totaltime, virtalltime;
1043 ioWait = irq = softIrq = steal = guest = guestnice = 0;
1047 const char*s = fgets(buffer, 255,
file);
1051 sscanf(buffer,
"cpu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu", &
usertime, &
nicetime, &
systemtime, &
idletime, &ioWait, &irq, &softIrq, &steal, &guest, &guestnice);
1053 sscanf(buffer,
"cpu%4d %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu %16llu", &cpuid, &
usertime, &
nicetime, &
systemtime, &
idletime, &ioWait, &irq, &softIrq, &steal, &guest, &guestnice);
1054 assert(cpuid ==
i - 1);
1063 virtalltime = guest + guestnice;
1064 totaltime =
usertime +
nicetime + systemalltime + idlealltime + steal + virtalltime;
1094#include <sys/time.h>
1105 const int title_lines=2;
1108 char InterfaceName[20];
1109 unsigned long int rbytes, rpackets, rerrs, rdrop, rfifo, rframe, rcompressed, rmulticast;
1110 unsigned long int sbytes, spackets, serrs, sdrop, sfifo, sframe, scompressed, smulticast;
1114 const char*s = fgets(buffer, 255,
file);
1120 sscanf(buffer,
"%[^:]: %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu",InterfaceName, &rbytes, &rpackets, &rerrs, &rdrop, &rfifo, &rframe, &rcompressed, &rmulticast,&sbytes, &spackets, &serrs, &sdrop, &sfifo, &sframe, &scompressed, &smulticast);
1122 printf(
"--------------------Parsing line %d from " PROCNETSTATFILE "---------------------\n",
i);
1123 printf(
"Intput: %s\n",buffer);
1124 printf(
"Output: %s: %16lu %16lu %16lu %16lu %16lu %16lu %16lu %16lu %16lu %16lu %16lu %16lu %16lu %16lu %16lu %16lu\n\n",InterfaceName, rbytes, rpackets, rerrs, rdrop, rfifo, rframe, rcompressed, rmulticast,sbytes, spackets, serrs, sdrop, sfifo, sframe, scompressed, smulticast);
1125 printf(
"-------------------------------------------------------------------------------\n");
1139 RData->
bytes =rbytes;
1144 RData->
frame =rframe;
1158 SData->
bytes =sbytes;
1163 SData->
frame =sframe;
1174static void get_device_features(GPU*
dev)
1176 if(nvmlDeviceGetTemperature(
dev->handle, NVML_TEMPERATURE_GPU,
1177 &
dev->temperature) == NVML_SUCCESS) {
1178 dev->feature_support |= TEMPERATURE;
1181 if(nvmlDeviceGetMemoryInfo(
dev->handle, &
dev->memory) == NVML_SUCCESS) {
1182 dev->feature_support |= MEMORY_INFO;
1185 if(nvmlDeviceGetPowerUsage(
dev->handle, &
dev->power_usage) == NVML_SUCCESS) {
1186 dev->feature_support |= POWER_USAGE;
1189 if(nvmlDeviceGetFanSpeed(
dev->handle, &
dev->fan) == NVML_SUCCESS) {
1190 dev->feature_support |= FAN_INFO;
1193 if(nvmlDeviceGetUtilizationRates(
dev->handle, &
dev->util) == NVML_SUCCESS) {
1194 dev->feature_support |= UTILIZATION_INFO;
1200 printf(
"Initialising NVIDIA monitoring\n");
1202 if(NVML_TRY(nvmlInit()))
1204 NVML_TRY(nvmlDeviceGetCount(&nGPUs));
1206 for(
unsigned i = 0;
i < nGPUs; ++
i) {
1208 GPUs.push_back(
dev);
1212 NVML_TRY(nvmlDeviceGetHandleByIndex(
i, &
dev->handle));
1214 NVML_TRY(nvmlDeviceGetName(
dev->handle,
dev->name,
sizeof(
dev->name)));
1215 NVML_TRY(nvmlDeviceGetSerial(
dev->handle,
dev->serial,
sizeof(
dev->serial)));
1216 NVML_TRY(nvmlDeviceGetUUID(
dev->handle,
dev->uuid,
sizeof(
dev->uuid)));
1218 NVML_TRY(nvmlDeviceGetPciInfo(
dev->handle, &
dev->pci));
1219 NVML_TRY(nvmlDeviceGetMemoryInfo(
dev->handle, &
dev->memory));
1221 unsigned long long event_types;
1222 NVML_TRY(nvmlEventSetCreate(&
dev->event_set));
1223 if(0 == NVML_TRY(nvmlDeviceGetSupportedEventTypes(
dev->handle, &event_types))) {
1224 NVML_TRY(nvmlDeviceRegisterEvents(
dev->handle, event_types,
dev->event_set));
1226 dev->event_set = NULL;
1229 get_device_features(
dev);
1239 for(
i = 0;
i < nGPUs; ++
i) {
1242 if(
dev->feature_support & MEMORY_INFO) {
1243 NVML_TRY(nvmlDeviceGetMemoryInfo(
dev->handle, &
dev->memory));
1246 if(
dev->feature_support & TEMPERATURE) {
1247 NVML_TRY(nvmlDeviceGetTemperature(
dev->handle, NVML_TEMPERATURE_GPU,
1248 &
dev->temperature));
1251 if(
dev->feature_support & POWER_USAGE) {
1252 NVML_TRY(nvmlDeviceGetPowerUsage(
dev->handle, &
dev->power_usage));
1255 if(
dev->feature_support & UTILIZATION_INFO) {
1256 NVML_TRY(nvmlDeviceGetUtilizationRates(
dev->handle, &
dev->util));
1259 if(
dev->feature_support & FAN_INFO) {
1260 NVML_TRY(nvmlDeviceGetFanSpeed(
dev->handle, &
dev->fan));
1263 if(
dev->event_set != NULL) {
1264 nvmlEventData_t
data;
1266 NVML_TRY(nvmlEventSetWait(
dev->event_set, &
data, 1));
1285#ifdef CLASSIC_CPU_VARS
1286 double CPULoadTotal[4];
1287 for (
int j=0;
j<4;
j++)
1297 CPULoad[3]=CPULoad[0]+CPULoad[1]+CPULoad[2];
1299 for (
int j=0;
j<4;
j++)
1301 CPULoadTotal[
j]+=CPULoad[
j];
1307 char name[5]=
"LOAD";
1312 int t=
'0'+(
i%100)/10;
1315 snprintf(
name,5,
"CPU%c",u);
1317 snprintf(
name,5,
"CP%c%c",t,u);
1319 snprintf(
name,5,
"C%c%c%c",h,t,u);
1325 for (
int k=0;
k<4;
k++)
1345 CPUA[
i] = CPUN[
i]+CPUU[
i]+CPUS[
i];
1378 double TotalLoad[4]={0};
1381 TotalLoad[0]+=CPUN[
k];
1382 TotalLoad[1]+=CPUU[
k];
1383 TotalLoad[2]+=CPUS[
k];
1384 TotalLoad[3]+=CPUA[
k];
1387 for (
int k=0;
k<4;
k++)
1397#ifdef HAVE_LM_SENSORS
1398 pevent = sensors->ReadAndLogSensors(pevent);
1402 double DataTransmit;
1405 char name[5]=
"NETR";
1410 double Rdt=RData->
tv.tv_sec + (RData->
tv.tv_usec * 1
e-6);
1411 DataRecieve=(double)(RData->
bytesPeriod)*8./1024./1024. / Rdt;
1418 sprintf(
name,
"NETT");
1423 double Sdt=SData->
tv.tv_sec + (SData->
tv.tv_usec * 1
e-6);
1424 DataTransmit=(double)(SData->
bytesPeriod)*8./1024./1024. / Sdt;
1431 unsigned long long int totalMem;
1432 unsigned long long int usedMem;
1433 unsigned long long int freeMem;
1434 unsigned long long int sharedMem;
1435 unsigned long long int buffersMem;
1436 unsigned long long int cachedMem;
1437 unsigned long long int totalSwap;
1438 unsigned long long int usedSwap;
1439 unsigned long long int freeSwap;
1445 while (fgets(buffer, 128,
file)) {
1446 switch (buffer[0]) {
1449 sscanf(buffer,
"MemTotal: %32llu kB", &totalMem);
1451 sscanf(buffer,
"MemFree: %32llu kB", &freeMem);
1453 sscanf(buffer,
"MemShared: %32llu kB", &sharedMem);
1457 sscanf(buffer,
"Buffers: %32llu kB", &buffersMem);
1461 sscanf(buffer,
"Cached: %32llu kB", &cachedMem);
1465 sscanf(buffer,
"SwapTotal: %32llu kB", &totalSwap);
1467 sscanf(buffer,
"SwapFree: %32llu kB", &freeSwap);
1474 usedMem = totalMem - cachedMem- freeMem;
1475 usedSwap = totalSwap - freeSwap;
1476 double mem_percent=100.*(double)usedMem/(
double)totalMem;
1477 double swap_percent=100;
1479 swap_percent=100*(double)usedSwap/(
double)totalSwap;
1481 printf(
"-----------------------------\n");
1482 printf(
"MemUsed: %lld kB (%lld GB) (%.2f%%)\n",usedMem,usedMem/1024/1024,mem_percent);
1483 printf(
"SwapUsed: %lld kB (%lld GB) (%.2f%%)\n",usedSwap,usedSwap/1024/1024,swap_percent);
1484 printf(
"-----------------------------\n");
1504 for (
unsigned i=0;
i<nGPUs;
i++)
1506 *t=GPUs[
i]->temperature;
1513 for (
unsigned i=0;
i<nGPUs;
i++)
1522 for (
unsigned i=0;
i<nGPUs;
i++)
1524 *t=GPUs[
i]->power_usage/1000;
1531 for (
unsigned i=0;
i<nGPUs;
i++)
1533 *t=GPUs[
i]->util.gpu;
1540 for (
unsigned i=0;
i<nGPUs;
i++)
1542 *m=100.*(double)GPUs[
i]->memory.used/(
double)GPUs[
i]->memory.total;
INT bk_close(void *event, void *pdata)
void bk_init32(void *event)
void bk_create(void *event, const char *name, WORD type, void **pdata)
INT bk_size(const void *event)
INT cm_register_function(INT id, INT(*func)(INT, void **))
#define CMD_INTERRUPT_ATTACH
#define CMD_INTERRUPT_DISABLE
#define CMD_INTERRUPT_ENABLE
#define CMD_INTERRUPT_DETACH
INT ss_sleep(INT millisec)
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
INT db_set_value(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, const void *data, INT data_size, INT num_values, DWORD type)
#define equipment(name, id, type, source, readon, period, readout, cd, driver)
int gettimeofday(struct timeval *tp, void *tzp)
INT rpc_callback(INT index, void *prpc_param[])
const char * frontend_file_name
INT frontend_exit()
Frontend exit.
INT frontend_init()
Frontend initialization.
std::vector< CPUData * > cpus
int read_system_load(char *pevent, int off)
INT interrupt_configure(INT cmd, INT source, PTYPE adr)
std::vector< NetStat * > NetReceive
unsigned long long int nicetime
BOOL equipment_common_overwrite
INT poll_event(INT source, INT count, BOOL test)
unsigned long long int idletime
#define String_startsWith(s, match)
const char * frontend_name
int networkInterfaceCount
void BuildHostHistoryPlot()
INT begin_of_run(INT run_number, char *error)
Begin of Run.
INT frontend_loop()
Frontend loop.
std::vector< NetStat * > NetTransmit
INT end_of_run(INT run_number, char *error)
End of Run.
unsigned long long int systemtime
unsigned long long int usertime
unsigned long long int ioWaitPeriod
unsigned long long int ioWaitTime
unsigned long long int softIrqTime
unsigned long long int userPeriod
unsigned long long int totalPeriod
unsigned long long int stealPeriod
unsigned long long int guestPeriod
unsigned long long int systemAllTime
unsigned long long int irqPeriod
unsigned long long int systemPeriod
unsigned long long int nicePeriod
unsigned long long int irqTime
unsigned long long int systemAllPeriod
unsigned long long int idleAllPeriod
unsigned long long int stealTime
unsigned long long int niceTime
unsigned long long int idleTime
unsigned long long int userTime
unsigned long long int guestTime
unsigned long long int systemTime
unsigned long long int totalTime
unsigned long long int idlePeriod
unsigned long long int softIrqPeriod
unsigned long long int idleAllTime
unsigned long int multicast
unsigned long int framePeriod
unsigned long int compressed
unsigned long int packetsPeriod
unsigned long int dropPeriod
unsigned long int errsPeriod
unsigned long int multicastPeriod
unsigned long int packets
unsigned long int compressedPeriod
unsigned long int fifoPeriod
unsigned long int bytesPeriod