From 5bc124ead42d442c6cce2f72204c9ac058ef0d9e Mon Sep 17 00:00:00 2001 From: brockcj Date: Fri, 25 Nov 2016 21:32:54 -0600 Subject: [PATCH 1/3] 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 dcf6c36d54..26da4a1fcf 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 3132149030..735ee100cf 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -64,6 +64,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) { From 247e0a2c3e1b323684b5deec0311393dbdc2d00e Mon Sep 17 00:00:00 2001 From: Brock Johnson Date: Sun, 27 Nov 2016 20:20:02 -0600 Subject: [PATCH 2/3] Updated to actually honor the boolean and clarified documentation per request --- src/collectd.conf.pod | 7 ++++--- src/turbostat.c | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 26da4a1fcf..21458e03a1 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -7515,9 +7515,10 @@ 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. +statistics. When enabled, cpu is used as plugin instance, where n +is a sequential number assigned by the kernel. Otherwise, core is +used where n is the n-th core of the socket, causing name conflicts +when there is more than one socket. =over 4 diff --git a/src/turbostat.c b/src/turbostat.c index 735ee100cf..c242b6eeb6 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -1579,7 +1579,7 @@ turbostat_config(const char *key, const char *value) config_ptm = IS_TRUE(value); apply_config_ptm = 1; } else if (strcasecmp("LogicalCoreNames", key) == 0) { - config_lcn = 1; + config_lcn = IS_TRUE(value); } else if (strcasecmp("RunningAveragePowerLimit", key) == 0) { tmp_val = strtoul(value, &end, 0); if (*end != '\0' || tmp_val > UINT_MAX) { From 3d15f72fedc7091e89744926c6fe87a2980e1f5a Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 28 Nov 2016 08:58:29 +0100 Subject: [PATCH 3/3] collectd.conf(5): Improve documentation of the turbostat plugin. --- src/collectd.conf.pod | 73 +++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 21458e03a1..ffcddd2c4b 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -7442,7 +7442,7 @@ couple metrics: number of records, and database size on disk. =item B I -The hostname or ip which identifies the server. +The hostname or IP which identifies the server. Default: B<127.0.0.1> =item B I @@ -7456,69 +7456,60 @@ Default: B<1978> =head2 Plugin C The I reads CPU frequency and C-state residency on modern -Intel processors by using the new Model Specific Registers. +Intel processors by using I. =over 4 =item B I -Bitmask of the list of core C states supported by the processor. +Bit mask of the list of core C-states supported by the processor. This option should only be used if the automated detection fails. -Default value extracted from the cpu model and family. +Default value extracted from the CPU model and family. Currently supported C-states (by this plugin): 3, 6, 7 -Example: (1<<3)+(1<<6)+(1<<7) = 392 for all states +B + + All states (3, 6 and 7): + (1<<3) + (1<<6) + (1<<7) = 392 =item B I -Bitmask of the list of pacages C states supported by the processor. -This option should only be used if the automated detection fails. -Default value extracted from the cpu model and family. +Bit mask of the list of packages C-states supported by the processor. This +option should only be used if the automated detection fails. Default value +extracted from the CPU model and family. Currently supported C-states (by this plugin): 2, 3, 6, 7, 8, 9, 10 -Example: (1<<2)+(1<<3)+(1<<6)+(1<<7) = 396 for states 2, 3, 6 and 7 - -=item B I|I +B -Boolean enabling the collection of the I/O System-Management Interrupt -counter'. This option should only be used if the automated detection -fails or if you want to disable this feature. + States 2, 3, 6 and 7: + (1<<2) + (1<<3) + (1<<6) + (1<<7) = 396 -=item B I|I +=item B I|I -Boolean enabling the collection of the temperature of each core. -This option should only be used if the automated detectionfails or -if you want to disable this feature. +Boolean enabling the collection of the I/O System-Management Interrupt counter. +This option should only be used if the automated detection fails or if you want +to disable this feature. =item B I|I -Boolean enabling the collection of the temperature of each package. -This option should only be used if the automated detectionfails or -if you want to disable this feature. +Boolean enabling the collection of the temperature of each core. This option +should only be used if the automated detection fails or if you want to disable +this feature. =item B I -Thermal Control Circuit Activation Temperature of the installed -CPU. This temperature is used when collecting the temperature of -cores or packages. This option should only be used if the automated -detection fails. Default value extracted from B +I of the installed CPU. This +temperature is used when collecting the temperature of cores or packages. This +option should only be used if the automated detection fails. Default value +extracted from B. =item B I -Bitmask of the list of elements to be thermally monitored. This option -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. When enabled, cpu is used as plugin instance, where n -is a sequential number assigned by the kernel. Otherwise, core is -used where n is the n-th core of the socket, causing name conflicts -when there is more than one socket. +Bit mask of the list of elements to be thermally monitored. This option should +only be used if the automated detection fails or if you want to disable some +collections. The different bits of this bit mask accepted by this plugin are: =over 4 @@ -7532,6 +7523,14 @@ when there is more than one socket. =back +=item B I|I + +Boolean enabling the use of logical core numbering for per core statistics. +When enabled, CnE> is used as plugin instance, where I is a +sequential number assigned by the kernel. Otherwise, CnE> is used +where I is the n-th core of the socket, causing name conflicts when there is +more than one socket. + =back =head2 Plugin C