X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fturbostat.c;h=19a511152bf29a5780f41b64ffee408c650505b8;hp=ca872197a92e54ab7be23294c5d3f1a098558807;hb=efc819016c70acf46427b2c94414f5365dc171e2;hpb=2c4b161f5183d4bc442e57e0bc7df2e58ccaa3af diff --git a/src/turbostat.c b/src/turbostat.c index ca872197..19a51115 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -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" @@ -51,12 +51,11 @@ 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);