From 5bc124ead42d442c6cce2f72204c9ac058ef0d9e Mon Sep 17 00:00:00 2001 From: brockcj Date: Fri, 25 Nov 2016 21:32:54 -0600 Subject: [PATCH] Add config boolean for logical CPU naming for turbostat plugin --- src/collectd.conf.pod | 7 +++++++ src/turbostat.c | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index dcf6c36d..26da4a1f 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -7512,6 +7512,13 @@ should only be used if the automated detection fails or if you want to disable some collections. The different bits of this bitmask accepted by this plugin are: +=item B I|I + +Boolean enabling the use of logical core numbering for per core +statistics. This mirrors the in-kernel per core numbering. On +multi-socket systems, the original per-cpu numbering behavior +stomps on values on subsequent sockets. + =over 4 =item 0 ('1'): Package diff --git a/src/turbostat.c b/src/turbostat.c index 31321490..735ee100 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -65,6 +65,11 @@ static _Bool aperf_mperf_unstable; /* + * If set, use kernel logical core numbering for all "per core" metrics. + */ +static _Bool config_lcn; + +/* * Bitmask of the list of core C states supported by the processor. * Currently supported C-states (by this plugin): 3, 6, 7 */ @@ -225,6 +230,7 @@ static const char *config_keys[] = "PackageThermalManagement", "TCCActivationTemp", "RunningAveragePowerLimit", + "LogicalCoreNames", }; static const int config_keys_num = STATIC_ARRAY_SIZE (config_keys); @@ -551,6 +557,9 @@ submit_counters(struct thread_data *t, struct core_data *c, struct pkg_data *p) interval_float = CDTIME_T_TO_DOUBLE(time_delta); + DEBUG("turbostat plugin: submit stats for cpu: %d, core: %d, pkg: %d", + t->cpu_id, c->core_id, p->package_id); + ssnprintf(name, sizeof(name), "cpu%02d", t->cpu_id); if (!aperf_mperf_unstable) @@ -574,7 +583,10 @@ submit_counters(struct thread_data *t, struct core_data *c, struct pkg_data *p) if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE)) goto done; - ssnprintf(name, sizeof(name), "core%02d", c->core_id); + /* If not using logical core numbering, set core id */ + if (!config_lcn) { + ssnprintf(name, sizeof(name), "core%02d", c->core_id); + } if (do_core_cstate & (1 << 3)) turbostat_submit(name, "percent", "c3", 100.0 * c->c3/t->tsc); @@ -1566,6 +1578,8 @@ turbostat_config(const char *key, const char *value) } else if (strcasecmp("PackageThermalManagement", key) == 0) { config_ptm = IS_TRUE(value); apply_config_ptm = 1; + } else if (strcasecmp("LogicalCoreNames", key) == 0) { + config_lcn = 1; } else if (strcasecmp("RunningAveragePowerLimit", key) == 0) { tmp_val = strtoul(value, &end, 0); if (*end != '\0' || tmp_val > UINT_MAX) { -- 2.11.0