All of lore.kernel.org
 help / color / mirror / Atom feed
From: Len Brown <lenb@kernel.org>
To: linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Len Brown <len.brown@intel.com>
Subject: [PATCH 42/49] tools/power turbostat: print more turbo-limit information
Date: Sat,  6 Oct 2012 22:43:12 -0400	[thread overview]
Message-ID: <6574a5d5053cd3b8e7c088900b80a9ff51895450.1349554106.git.len.brown@intel.com> (raw)
In-Reply-To: <1349577799-566-1-git-send-email-lenb@kernel.org>
In-Reply-To: <a950c135e5b2be6ef7518d54d98a7901db1b377a.1349554105.git.len.brown@intel.com>

From: Len Brown <len.brown@intel.com>

The "turbo-limit" is the maximum opportunistic processor
speed, assuming no electrical or thermal constraints.
For a given processor, the turbo-limit varies, depending
on the number of active cores.  Generally, there is more
opportunity when fewer cores are active.

Under the "-v" verbose option, turbostat would
print the turbo-limits for the four cases
of 1 to 4 cores active.

Expand that capability to cover the cases of turbo
opportunities with up to 16 cores active.

Note that not all hardware platforms supply this information,
and that sometimes a valid limit may be specified for
a core which is not actually present.

Signed-off-by: Len Brown <len.brown@intel.com>
---
 tools/power/x86/turbostat/turbostat.c | 95 ++++++++++++++++++++++++++++++++++-
 1 file changed, 93 insertions(+), 2 deletions(-)

diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index 3c9dc54..5db4add 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -37,6 +37,7 @@
 
 #define MSR_NEHALEM_PLATFORM_INFO	0xCE
 #define MSR_NEHALEM_TURBO_RATIO_LIMIT	0x1AD
+#define MSR_IVT_TURBO_RATIO_LIMIT	0x1AE
 #define MSR_APERF	0xE8
 #define MSR_MPERF	0xE7
 #define MSR_PKG_C2_RESIDENCY	0x60D	/* SNB only */
@@ -61,6 +62,7 @@ unsigned int genuine_intel;
 unsigned int has_invariant_tsc;
 unsigned int do_nehalem_platform_info;
 unsigned int do_nehalem_turbo_ratio_limit;
+unsigned int do_ivt_turbo_ratio_limit;
 unsigned int extra_msr_offset;
 double bclk;
 unsigned int show_pkg;
@@ -676,6 +678,9 @@ void print_verbose_header(void)
 
 	get_msr(0, MSR_NEHALEM_PLATFORM_INFO, &msr);
 
+	if (verbose > 1)
+		fprintf(stderr, "MSR_NEHALEM_PLATFORM_INFO: 0x%llx\n", msr);
+
 	ratio = (msr >> 40) & 0xFF;
 	fprintf(stderr, "%d * %.0f = %.0f MHz max efficiency\n",
 		ratio, bclk, ratio * bclk);
@@ -684,14 +689,84 @@ void print_verbose_header(void)
 	fprintf(stderr, "%d * %.0f = %.0f MHz TSC frequency\n",
 		ratio, bclk, ratio * bclk);
 
+	if (!do_ivt_turbo_ratio_limit)
+		goto print_nhm_turbo_ratio_limits;
+
+	get_msr(0, MSR_IVT_TURBO_RATIO_LIMIT, &msr);
+
 	if (verbose > 1)
-		fprintf(stderr, "MSR_NEHALEM_PLATFORM_INFO: 0x%llx\n", msr);
+		fprintf(stderr, "MSR_IVT_TURBO_RATIO_LIMIT: 0x%llx\n", msr);
+
+	ratio = (msr >> 56) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 16 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 48) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 15 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 40) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 14 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 32) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 13 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 24) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 12 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 16) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 11 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 8) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 10 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 0) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 9 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+print_nhm_turbo_ratio_limits:
 
 	if (!do_nehalem_turbo_ratio_limit)
 		return;
 
 	get_msr(0, MSR_NEHALEM_TURBO_RATIO_LIMIT, &msr);
 
+	if (verbose > 1)
+		fprintf(stderr, "MSR_NEHALEM_TURBO_RATIO_LIMIT: 0x%llx\n", msr);
+
+	ratio = (msr >> 56) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 8 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 48) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 7 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 40) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 6 active cores\n",
+			ratio, bclk, ratio * bclk);
+
+	ratio = (msr >> 32) & 0xFF;
+	if (ratio)
+		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 5 active cores\n",
+			ratio, bclk, ratio * bclk);
+
 	ratio = (msr >> 24) & 0xFF;
 	if (ratio)
 		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 4 active cores\n",
@@ -711,7 +786,6 @@ void print_verbose_header(void)
 	if (ratio)
 		fprintf(stderr, "%d * %.0f = %.0f MHz max turbo 1 active cores\n",
 			ratio, bclk, ratio * bclk);
-
 }
 
 void free_all_buffers(void)
@@ -1045,6 +1119,22 @@ int has_nehalem_turbo_ratio_limit(unsigned int family, unsigned int model)
 		return 0;
 	}
 }
+int has_ivt_turbo_ratio_limit(unsigned int family, unsigned int model)
+{
+	if (!genuine_intel)
+		return 0;
+
+	if (family != 6)
+		return 0;
+
+	switch (model) {
+	case 0x3E:	/* IVB Xeon */
+		return 1;
+	default:
+		return 0;
+	}
+}
+
 
 int is_snb(unsigned int family, unsigned int model)
 {
@@ -1144,6 +1234,7 @@ void check_cpuid()
 	bclk = discover_bclk(family, model);
 
 	do_nehalem_turbo_ratio_limit = has_nehalem_turbo_ratio_limit(family, model);
+	do_ivt_turbo_ratio_limit = has_ivt_turbo_ratio_limit(family, model);
 }
 
 
-- 
1.8.0.rc0.18.gf84667d

  parent reply	other threads:[~2012-10-07  2:43 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-06 20:09 ACPI & PM queue for 3.7-merge Len Brown
2012-10-06 20:09 ` [PATCH 01/49] ACPI: delelte more BFS/GTS related definition and code Len Brown
2012-10-06 20:09   ` [PATCH 02/49] ACPICA: Enable Scope change to root during module-level code execution Len Brown
2012-10-06 20:09   ` [PATCH 03/49] ACPICA: Split ACPICA initialization functions to new file, utxfinit.c Len Brown
2012-10-06 20:09   ` [PATCH 04/49] ACPICA: Comment update: Fix some typos in actble.h Len Brown
2012-10-06 20:09   ` [PATCH 05/49] ACPICA: Add Windows8/Server2012 string for _OSI method Len Brown
2012-10-06 20:09   ` [PATCH 06/49] ACPICA: GPE Support: Update debug info for GPE tracing Len Brown
2012-10-06 20:09   ` [PATCH 07/49] ACPICA: Debug output: Update output for Processor object Len Brown
2012-10-06 20:09   ` [PATCH 08/49] ACPICA: GPE support: Remove extraneous parameter from low-level function Len Brown
2012-10-06 20:09   ` [PATCH 09/49] ACPICA: Headers: Add support for CSRT and DBG2 ACPI tables Len Brown
2012-10-06 20:09   ` [PATCH 10/49] ACPICA: Add support for complex _PLD buffers Len Brown
2012-10-06 20:09   ` [PATCH 11/49] ACPICA: Add struct header support for _FDE, _GRT, _GTM, and _SRT names Len Brown
2012-10-06 20:09   ` [PATCH 12/49] ACPICA: Update version to 20120816 Len Brown
2012-10-06 20:09   ` [PATCH 13/49] ACPI: Use ACPICA native way to decode the PLD buffer Len Brown
2012-10-06 20:09   ` [PATCH 14/49] usb-acpi: Comply with the ACPI API change Len Brown
2012-10-06 20:09   ` [PATCH 15/49] ACPICA: Headers: Add new ACPI 5 HEST notify type values Len Brown
2012-10-06 20:09   ` [PATCH 16/49] ACPICA: Table Manager: Merge duplicate code (root table) Len Brown
2012-10-06 20:09   ` [PATCH 17/49] ACPICA: Update version to 20120913 Len Brown
2012-10-06 20:09   ` [PATCH 18/49] ACPI: Allow ACPI binding with USB-3.0 hub Len Brown
2012-10-06 20:09   ` [PATCH 19/49] ACPI: introduce module_acpi_driver() helper macro Len Brown
2012-10-06 20:09   ` [PATCH 20/49] ACPI/button: convert to module_acpi_driver() Len Brown
2012-10-06 20:09   ` [PATCH 21/49] ACPI/fan: " Len Brown
2012-10-06 20:09   ` [PATCH 22/49] ACPI/hed: " Len Brown
2012-10-06 20:09   ` [PATCH 23/49] ACPI/sbshc: " Len Brown
2012-10-06 20:09   ` [PATCH 24/49] i2c-scmi: " Len Brown
2012-10-06 20:09   ` [PATCH 25/49] Input: atlas_btns - " Len Brown
2012-10-06 20:09   ` [PATCH 26/49] hp_accel: " Len Brown
2012-10-06 20:09   ` [PATCH 27/49] ideapad: " Len Brown
2012-10-06 20:09   ` [PATCH 28/49] topstar-laptop: " Len Brown
2012-10-06 20:09   ` [PATCH 29/49] toshiba_bluetooth: " Len Brown
2012-10-06 20:09   ` [PATCH 30/49] xo15-ebook: " Len Brown
2012-10-06 20:09   ` [PATCH 31/49] tools/power/acpi/acpidump: version 20051111 Len Brown
2012-10-06 20:09   ` [PATCH 32/49] tools/power/acpi/acpidump: version 20060606 Len Brown
2012-10-06 20:09   ` [PATCH 33/49] tools/power/acpi/acpidump: version 20070714 Len Brown
2012-10-06 20:09   ` [PATCH 34/49] tools/power/acpi/acpidump: version 20071116 Len Brown
2012-10-06 20:09   ` [PATCH 35/49] tools/power/acpi/acpidump: version 20101221 - find dynamic tables in sysfs Len Brown
2012-10-06 20:09   ` [PATCH 36/49] tools/power/acpi/acpidump: create acpidump(8), local make install targets Len Brown
2012-10-06 20:09   ` [PATCH 37/49] ACPI: run _OSC after ACPI_FULL_INITIALIZATION Len Brown
2012-10-06 20:09   ` [PATCH 38/49] tools/power/acpi/acpidump: version 20101221 - find dynamic tables in sysfs Len Brown
2012-10-06 20:10   ` [PATCH 39/49] tools/power/acpi/acpidump: create acpidump(8), local make install targets Len Brown
2012-10-06 20:10   ` [PATCH 40/49] tools/power turbostat: run on IVB Xeon Len Brown
2012-10-06 20:10   ` [PATCH 41/49] tools/power turbostat: delete unused line Len Brown
2012-10-07  2:43   ` Len Brown [this message]
2012-10-07  2:43   ` [PATCH 43/49] tools/power turbostat: make -M output pretty Len Brown
2012-10-07  2:43   ` [PATCH 44/49] tools/power turbostat: add [-m MSR#] option Len Brown
2012-10-07  2:43   ` [PATCH 45/49] intel_idle: enable IVB Xeon support Len Brown
2012-10-07  2:43   ` [PATCH 46/49] tools/power turbostat: add [-d MSR#][-D MSR#] options to print counter deltas Len Brown
2012-10-07  2:43   ` [PATCH 47/49] tools/power/turbostat: add option to count SMIs, re-name some options Len Brown
2012-10-07  2:43   ` [PATCH 48/49] ACPI: Harden acpi_table_parse_entries() against BIOS bug Len Brown
2012-10-07  2:43   ` [PATCH 49/49] ACPI: Add new sysfs interface to export device description Len Brown
2012-10-09 14:23   ` [PATCH 01/49] ACPI: delelte more BFS/GTS related definition and code Konrad Rzeszutek Wilk
2012-10-07  2:43 ACPI & PM queue for 3.7-merge - part 2 Len Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6574a5d5053cd3b8e7c088900b80a9ff51895450.1349554106.git.len.brown@intel.com \
    --to=lenb@kernel.org \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.