Code

Merge branch 'pr/2056'
authorFlorian Forster <octo@collectd.org>
Mon, 28 Nov 2016 08:03:12 +0000 (09:03 +0100)
committerFlorian Forster <octo@collectd.org>
Mon, 28 Nov 2016 08:03:12 +0000 (09:03 +0100)
src/collectd.conf.pod
src/turbostat.c

index f1134ab4bb3c1c1efaac03fb37c3b5a85262b0bc..27c4e16ec3cd52bc329869b23e5901c92ea6330e 100644 (file)
@@ -7518,7 +7518,7 @@ couple metrics: number of records, and database size on disk.
 
 =item B<Host> I<Hostname/IP>
 
-The hostname or ip which identifies the server.
+The hostname or IP which identifies the server.
 Default: B<127.0.0.1>
 
 =item B<Port> I<Service/Port>
@@ -7532,61 +7532,60 @@ Default: B<1978>
 =head2 Plugin C<turbostat>
 
 The I<Turbostat plugin> reads CPU frequency and C-state residency on modern
-Intel processors by using the new Model Specific Registers.
+Intel processors by using I<Model Specific Registers>.
 
 =over 4
 
 =item B<CoreCstates> I<Bitmask(Integer)>
 
-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<Example:>
+
+  All states (3, 6 and 7):
+  (1<<3) + (1<<6) + (1<<7) = 392
 
 =item B<PackageCstates> I<Bitmask(Integer)>
 
-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<SystemManagementInterrupt> I<true>|I<false>
+B<Example:>
 
-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<DigitalTemperatureSensor> I<true>|I<false>
+=item B<SystemManagementInterrupt> I<true>|I<false>
 
-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<DigitalTemperatureSensor> I<true>|I<false>
 
-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<TCCActivationTemp> I<Temperature>
 
-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<MSR_IA32_TEMPERATURE_TARGET>
+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<MSR_IA32_TEMPERATURE_TARGET>.
 
 =item B<RunningAveragePowerLimit> I<Bitmask(Integer)>
 
-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:
+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
 
@@ -7600,6 +7599,14 @@ by this plugin are:
 
 =back
 
+=item B<LogicalCoreNames> I<true>|I<false>
+
+Boolean enabling the use of logical core numbering for per core statistics.
+When enabled, C<cpuE<lt>nE<gt>> is used as plugin instance, where I<n> is a
+sequential number assigned by the kernel. Otherwise, C<coreE<lt>nE<gt>> is used
+where I<n> is the n-th core of the socket, causing name conflicts when there is
+more than one socket.
+
 =back
 
 =head2 Plugin C<unixsock>
index 31321490309d7a63c0fb449e0944e3b1b835042c..c242b6eeb67db6e30ee2a4a97d306b3fdd8107c5 100644 (file)
  */
 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 = IS_TRUE(value);
        } else if (strcasecmp("RunningAveragePowerLimit", key) == 0) {
                tmp_val = strtoul(value, &end, 0);
                if (*end != '\0' || tmp_val > UINT_MAX) {