Added ICX Xeon support model number.
[collectd.git] / src / turbostat.c
index ca87219..19a5111 100644 (file)
@@ -37,8 +37,8 @@
 
 #include "collectd.h"
 
-#include "common.h"
 #include "plugin.h"
+#include "utils/common/common.h"
 #include "utils_time.h"
 
 #include "msr-index.h"
 
 typedef enum affinity_policy_enum {
   policy_restore_affinity, /* restore cpu affinity to whatever it was before */
-  policy_allcpus_affinity, /* do not restore affinity, set to all cpus */
-  policy_invalid
+  policy_allcpus_affinity  /* do not restore affinity, set to all cpus */
 } affinity_policy_t;
 
-/* the default is to preserve cpu affinity */
-static affinity_policy_t affinity_policy = policy_restore_affinity;
+/* the default is to set cpu affinity to all cpus */
+static affinity_policy_t affinity_policy = policy_allcpus_affinity;
 
 /*
  * This tool uses the Model-Specific Registers (MSRs) present on Intel
@@ -988,6 +987,8 @@ static int __attribute__((warn_unused_result)) probe_cpu(void) {
     /* Ivy Bridge */
     case 0x3A: /* IVB */
     case 0x3E: /* IVB Xeon */
+    case 0x55: /* SKX,CLX Xeon */
+    case 0x6A: /* ICX Xeon */
       do_smi = true;
       do_core_cstate = (1 << 3) | (1 << 6) | (1 << 7);
       do_pkg_cstate = (1 << 2) | (1 << 3) | (1 << 6) | (1 << 7);
@@ -1043,6 +1044,8 @@ static int __attribute__((warn_unused_result)) probe_cpu(void) {
       break;
     case 0x2D: /* SNB Xeon */
     case 0x3E: /* IVB Xeon */
+    case 0x55: /* SKX,CLX Xeon */
+    case 0x6A: /* ICX Xeon */
       do_rapl = RAPL_PKG | RAPL_CORES | RAPL_DRAM;
       do_power_fields = TURBO_PLATFORM | PSTATES_PLATFORM;
       break;
@@ -1435,9 +1438,9 @@ static void free_all_buffers(void) {
   package_delta = NULL;
 }
 
-/**********************
- * Collectd functions *
- **********************/
+  /**********************
  * Collectd functions *
  **********************/
 
 #define DO_OR_GOTO_ERR(something)                                              \
   do {                                                                         \
@@ -1464,11 +1467,11 @@ err:
   return ret;
 }
 
-int save_affinity(void) {
+static int save_affinity(void) {
   if (affinity_policy == policy_restore_affinity) {
     /* Try to save the scheduling affinity, as it will be modified by
-    * get_counters.
-    */
+     * get_counters().
+     */
     if (sched_getaffinity(0, cpu_saved_affinity_setsize,
                           cpu_saved_affinity_set) != 0)
       return -1;
@@ -1477,7 +1480,7 @@ int save_affinity(void) {
   return 0;
 }
 
-void restore_affinity(void) {
+static void restore_affinity(void) {
   /* Let's restore the affinity to the value saved in save_affinity */
   if (affinity_policy == policy_restore_affinity)
     (void)sched_setaffinity(0, cpu_saved_affinity_setsize,
@@ -1508,7 +1511,8 @@ static int turbostat_read(void) {
   }
 
   if (save_affinity() != 0) {
-    ERROR("turbostat plugin: Unable to save the CPU affinity");
+    ERROR("turbostat plugin: Unable to save the CPU affinity. Please read the "
+          "docs about RestoreAffinityPolicy option.");
     return -1;
   }
 
@@ -1617,15 +1621,6 @@ err:
   return ret;
 }
 
-affinity_policy_t parse_affinity_policy(const char *value) {
-  if (strcasecmp("AffinityRestore", value) == 0)
-    return policy_restore_affinity;
-  else if (strcasecmp("AffinityAllCPUs", value) == 0)
-    return policy_allcpus_affinity;
-
-  return policy_invalid;
-}
-
 static int turbostat_config(const char *key, const char *value) {
   long unsigned int tmp_val;
   char *end;
@@ -1673,11 +1668,13 @@ static int turbostat_config(const char *key, const char *value) {
     }
     tcc_activation_temp = (unsigned int)tmp_val;
   } else if (strcasecmp("RestoreAffinityPolicy", key) == 0) {
-    affinity_policy = parse_affinity_policy(value);
-    if (affinity_policy == policy_invalid) {
-      /* set to default policy if requested policy is invalid */
+    if (strcasecmp("Restore", value) == 0)
       affinity_policy = policy_restore_affinity;
+    else if (strcasecmp("AllCPUs", value) == 0)
+      affinity_policy = policy_allcpus_affinity;
+    else {
       ERROR("turbostat plugin: Invalid RestoreAffinityPolicy '%s'", value);
+      return -1;
     }
   } else {
     ERROR("turbostat plugin: Invalid configuration option '%s'", key);