X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fmic.c;h=570da51bcfd56c20296effdd64e570e3ff9eb6b9;hb=db35efb33e81d0a013e09a8a6ffa362ad5962f7c;hp=a2d4dc3317b6872e9b7398abfd9b64984a086e4d;hpb=7eb8ea317234ad9c43c8915a2d0d40f4382462fd;p=collectd.git diff --git a/src/mic.c b/src/mic.c index a2d4dc33..570da51b 100644 --- a/src/mic.c +++ b/src/mic.c @@ -28,6 +28,7 @@ #include #include #include +#include #define MAX_MICS 32 #define MAX_CORES 256 @@ -45,21 +46,25 @@ static char const * const therm_names[] = { static const char *config_keys[] = { - "ShowTotalCPU", - "ShowPerCPU", - "ShowTemps", + "ShowCPU", + "ShowCPUCores", "ShowMemory", - "TempSensor", - "IgnoreTempSelected", + "ShowTemperatures", + "Temperature", + "IgnoreSelectedTemperature", + "ShowPower", + "Power", + "IgnoreSelectedPower" }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); -static _Bool show_total_cpu = 1; -static _Bool show_per_cpu = 1; -static _Bool show_temps = 1; +static _Bool show_cpu = 1; +static _Bool show_cpu_cores = 1; static _Bool show_memory = 1; +static _Bool show_temps = 1; static ignorelist_t *temp_ignore = NULL; - +static _Bool show_power = 1; +static ignorelist_t *power_ignore = NULL; static int mic_init (void) { @@ -76,7 +81,7 @@ static int mic_init (void) MicGetErrorString(ret)); } DEBUG("mic plugin: found: %"PRIu32" MIC(s)",mic_count); - + if (mic_count<0 || mic_count>=MAX_MICS) { ERROR("mic plugin: No Intel MICs in system"); return (1); @@ -90,18 +95,20 @@ static int mic_init (void) static int mic_config (const char *key, const char *value) { if (temp_ignore == NULL) temp_ignore = ignorelist_create(1); - if (temp_ignore == NULL) + if (power_ignore == NULL) + power_ignore = ignorelist_create(1); + if (temp_ignore == NULL || power_ignore == NULL) return (1); - if (strcasecmp("ShowTotalCPU",key) == 0) + if (strcasecmp("ShowCPU",key) == 0) { - show_total_cpu = IS_TRUE(value); + show_cpu = IS_TRUE(value); } - else if (strcasecmp("ShowPerCPU",key) == 0) + else if (strcasecmp("ShowCPUCores",key) == 0) { - show_per_cpu = IS_TRUE(value); + show_cpu_cores = IS_TRUE(value); } - else if (strcasecmp("ShowTemps",key) == 0) + else if (strcasecmp("ShowTemperatures",key) == 0) { show_temps = IS_TRUE(value); } @@ -109,17 +116,32 @@ static int mic_config (const char *key, const char *value) { { show_memory = IS_TRUE(value); } - else if (strcasecmp("TempSensor",key) == 0) + else if (strcasecmp("ShowPower",key) == 0) + { + show_power = IS_TRUE(value); + } + else if (strcasecmp("Temperature",key) == 0) { ignorelist_add(temp_ignore,value); } - else if (strcasecmp("IgnoreTempSelected",key) == 0) + else if (strcasecmp("IgnoreSelectedTemperature",key) == 0) { int invert = 1; if (IS_TRUE(value)) invert = 0; ignorelist_set_invert(temp_ignore,invert); } + else if (strcasecmp("Power",key) == 0) + { + ignorelist_add(power_ignore,value); + } + else if (strcasecmp("IgnoreSelectedPower",key) == 0) + { + int invert = 1; + if (IS_TRUE(value)) + invert = 0; + ignorelist_set_invert(power_ignore,invert); + } else { return (-1); @@ -132,7 +154,7 @@ static void mic_submit_memory_use(int micnumber, const char *type_instance, U32 value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - /* MicAccessAPI reports KB's of memory, adjust for this */ + /* MicAccessAPI reports KB's of memory, adjust for this */ DEBUG("mic plugin: Memory Value Report; %u %lf",val,((gauge_t)val)*1024.0); values[0].gauge = ((gauge_t)val)*1024.0; @@ -146,14 +168,14 @@ static void mic_submit_memory_use(int micnumber, const char *type_instance, U32 strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); plugin_dispatch_values (&vl); -} +} /* Gather memory Utilization */ static int mic_read_memory(int mic) { U32 ret; U32 mem_total,mem_free,mem_bufs; - + ret = MicGetMemoryUtilization(mic_handle,&mem_total,&mem_free,&mem_bufs); if (ret != MIC_ACCESS_API_SUCCESS) { ERROR("mic plugin: Problem getting Memory Utilization: %s", @@ -185,14 +207,14 @@ static void mic_submit_temp(int micnumber, const char *type, gauge_t val) strncpy (vl.type_instance, type, sizeof (vl.type_instance)); plugin_dispatch_values (&vl); -} +} /* Gather Temperature Information */ static int mic_read_temps(int mic) { size_t num_therms = STATIC_ARRAY_SIZE(therm_ids); size_t j; - + for (j = 0; j < num_therms; j++) { U32 status; U32 temp_buffer; @@ -237,7 +259,7 @@ static void mic_submit_cpu(int micnumber, const char *type_instance, strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); plugin_dispatch_values (&vl); -} +} /*Gather CPU Utilization Information */ static int mic_read_cpu(int mic) @@ -256,14 +278,14 @@ static int mic_read_cpu(int mic) return(-1); } - if (show_total_cpu) { + if (show_cpu) { mic_submit_cpu(mic, "user", -1, core_util.sum.user); mic_submit_cpu(mic, "sys", -1, core_util.sum.sys); mic_submit_cpu(mic, "nice", -1, core_util.sum.nice); mic_submit_cpu(mic, "idle", -1, core_util.sum.idle); } - if (show_per_cpu) { + if (show_cpu_cores) { int j; for (j = 0; j < core_util.core; j++) { mic_submit_cpu(mic, "user", j, core_jiffs[j].user); @@ -275,6 +297,63 @@ static int mic_read_cpu(int mic) return (0); } +static void mic_submit_power(int micnumber, const char *type, const char *type_instance, gauge_t val) +{ + value_t values[1]; + value_list_t vl = VALUE_LIST_INIT; + + values[0].gauge = val; + + vl.values=values; + vl.values_len=1; + + strncpy (vl.host, hostname_g, sizeof (vl.host)); + strncpy (vl.plugin, "mic", sizeof (vl.plugin)); + ssnprintf (vl.plugin_instance, sizeof (vl.plugin_instance), "%i", micnumber); + strncpy (vl.type, type, sizeof (vl.type)); + strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); + + plugin_dispatch_values (&vl); +} + +/* Gather Power Information */ +static int mic_read_power(int mic) +{ + U32 ret; + MicPwrUsage power_use; + + ret = MicGetPowerUsage(mic_handle,&power_use); + if (ret != MIC_ACCESS_API_SUCCESS) { + ERROR("mic plugin: Problem getting Power Usage: %s", + MicGetErrorString(ret)); + return (1); + } + + /* power is in uWatts, current in mA, voltage in uVolts.. convert to + * base unit */ + #define SUB_POWER(name) do { if (ignorelist_match(power_ignore,#name)==0) \ + mic_submit_power(mic,"power",#name,(gauge_t)power_use.name.prr*0.000001); \ + } while(0) + #define SUB_VOLTS(name) do { if (ignorelist_match(power_ignore,#name)==0) {\ + mic_submit_power(mic,"power",#name,(gauge_t)(power_use.name.pwr*0.000001)); \ + mic_submit_power(mic,"current",#name,(gauge_t)(power_use.name.cur*0.001)); \ + mic_submit_power(mic,"voltage",#name,(gauge_t)(power_use.name.volt*0.000001)); \ + }} while(0) + + SUB_POWER(total0); + SUB_POWER(total1); + SUB_POWER(inst); + SUB_POWER(imax); + SUB_POWER(pcie); + SUB_POWER(c2x3); + SUB_POWER(c2x4); + SUB_VOLTS(vccp); + SUB_VOLTS(vddg); + SUB_VOLTS(vddq); + + return (0); +} + static int mic_read (void) { int i; @@ -296,9 +375,12 @@ static int mic_read (void) if (error == 0 && show_temps) error = mic_read_temps(i); - if (error == 0 && (show_total_cpu || show_per_cpu)) + if (error == 0 && (show_cpu || show_cpu_cores)) error = mic_read_cpu(i); + if (error == 0 && (show_power)) + error = mic_read_power(i); + ret = MicCloseAdapter(mic_handle); if (ret != MIC_ACCESS_API_SUCCESS) { ERROR("mic plugin: Problem closing MicAdapter: %s", @@ -316,7 +398,9 @@ static int mic_read (void) static int mic_shutdown (void) { if (mic_handle) - MicCloseAPI(&mic_handle); + MicCloseAPI(&mic_handle); + mic_handle = NULL; + return (0); }