From: Prarit Bhargava <prarit@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: len.brown@intel.com, andrey.semin@intel.com,
linux-pm@vger.kernel.org, Prarit Bhargava <prarit@redhat.com>
Subject: [PATCH 2/2] turbostat, add set_base_cpu()
Date: Mon, 25 May 2015 08:34:29 -0400 [thread overview]
Message-ID: <1432557269-10994-3-git-send-email-prarit@redhat.com> (raw)
In-Reply-To: <1432557269-10994-1-git-send-email-prarit@redhat.com>
turbostat does not function properly on systems that support CPU0 hotplug.
When running turbostat on these systems the following error is seen.
[root@intel-chiefriver-04 ~]# turbostat ls
turbostat: no /dev/cpu/0/msr
Try "# modprobe msr": No such file or directory
This happens because base_cpu is set to 0 in the turbostat code and calls
to check_dev_msr() will fail if CPU0 has been removed.
This patchset adds functionality to set the value of base_cpu to the lowest
found cpu on the system. This patch moves setup_all_buffers() to the
beginning of the turbostat_init() so that set_base_cpu() can take advantage
of topo.max_cpu_num which is set in setup_all_buffers().
After this change, on a system that has CPU0 removed,
[root@prarit ~]# ./turbostat -d -d ls
turbostat version 4.5 2 Apr, 2015 - Len Brown <lenb@kernel.org>
num_cpus 7 max_cpu_num 7
cpu0 NOT PRESENT
cpu 1 pkg 0 core 0
cpu 2 pkg 0 core 1
cpu 3 pkg 0 core 1
cpu 4 pkg 0 core 2
cpu 5 pkg 0 core 2
cpu 6 pkg 0 core 3
cpu 7 pkg 0 core 3
<snip>
anaconda-ks.cfg README turbostat
Core CPU Avg_MHz %Busy Bzy_MHz TSC_MHz SMI CPU%c1 CPU%c3 CPU%c6 CPU%c7 CoreTmp PkgTmp Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc7 PkgWatt CorWatt GFXWatt
- - 492 14.20 3462 2634 0 18.90 0.00 0.00 68.63 27 27 0.00 0.00 0.00 0.00 17.65 12.69 0.00
0 1 353 9.95 3552 2645 0 9.68 0.00 0.00 80.37 27 27 0.00 0.00 0.00 0.00 17.65 12.69 0.00
1 2 217 7.70 2814 2614 0 64.63 0.00 0.00 27.68 26
1 3 2006 57.20 3507 2660 0 15.61
2 4 120 3.37 3570 2649 0 10.95 0.00 0.00 85.69 25
2 5 155 4.22 3679 2631 0 9.48
3 6 296 8.38 3530 2620 0 11.07 0.00 0.00 80.55 17
3 7 296 8.15 3630 2617 0 11.22
0.001160 sec
I have additionally tested various other hotplug configurations to make sure
that turbostat behaves correctly in those situations as well.
[v2]: use sched_getcpu() to get current cpu
Signed-off-by: Prarit Bhargava <prarit@redhat.com>
---
tools/power/x86/turbostat/turbostat.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index 8c2e761..8e4ce9f 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -91,7 +91,7 @@ unsigned int do_gfx_perf_limit_reasons;
unsigned int do_ring_perf_limit_reasons;
unsigned int crystal_hz;
unsigned long long tsc_hz;
-int base_cpu = 0;
+int base_cpu = -1;
#define RAPL_PKG (1 << 0)
/* 0x610 MSR_PKG_POWER_LIMIT */
@@ -2790,13 +2790,24 @@ void setup_all_buffers(void)
for_all_proc_cpus(initialize_counters);
}
+void set_base_cpu(void)
+{
+ base_cpu = sched_getcpu();
+ if (base_cpu < 0)
+ err(-ENODEV, "No valid cpus found");
+
+ if (debug > 1)
+ fprintf(stderr, "base_cpu = %d\n", base_cpu);
+}
+
void turbostat_init()
{
+ setup_all_buffers();
+ set_base_cpu();
check_dev_msr();
check_permissions();
process_cpuid();
- setup_all_buffers();
if (debug)
for_all_cpus(print_epb, ODD_COUNTERS);
--
1.7.9.3
next prev parent reply other threads:[~2015-05-25 12:34 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-25 12:34 [PATCH 0/2] turbostat, support CPU0 hotplug [v2] Prarit Bhargava
2015-05-25 12:34 ` [PATCH 1/2] turbostat, add base_cpu Prarit Bhargava
2015-05-25 12:34 ` Prarit Bhargava [this message]
2015-05-27 21:54 ` [PATCH 2/2] turbostat, add set_base_cpu() Len Brown
-- strict thread matches above, loose matches on Subject: below --
2015-05-22 12:01 [PATCH 0/2] turbostat, support CPU0 hotplug Prarit Bhargava
2015-05-22 12:01 ` [PATCH 2/2] turbostat, add set_base_cpu() Prarit Bhargava
2015-05-22 15:55 ` Brown, Len
2015-05-22 21:44 ` Prarit Bhargava
2015-05-22 22:30 ` Prarit Bhargava
2015-05-26 0:32 ` Brown, Len
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=1432557269-10994-3-git-send-email-prarit@redhat.com \
--to=prarit@redhat.com \
--cc=andrey.semin@intel.com \
--cc=len.brown@intel.com \
--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.