Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1695686

[PATCH 1/7] turbostat: set max_num_cpus equal to the cpumask length

From Prarit Bhargava <prarit@redhat.com>
Newsgroups linux.kernel
Subject [PATCH 1/7] turbostat: set max_num_cpus equal to the cpumask length
Date 2017-07-25 14:30 +0200
Message-ID <u778m-2J2-23@gated-at.bofh.it> (permalink)
References <u778l-2J2-1@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Future fixes will use sysfs files that contain cpumask output.  The code
needs to know the length of the cpumask in order to determine which cpus
are set in a cpumask.  Currently topo.max_cpu_num is the maximum cpu
number.  It can be increased the the maximum value of cpus represented in
cpumasks.

Set max_num_cpus to the length of a cpumask.

Signed-off-by: Prarit Bhargava <prarit@redhat.com>
Cc: Len Brown <len.brown@intel.com>
---
 tools/power/x86/turbostat/turbostat.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index 0dafba2c1e7d..6d368e744d27 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -2413,6 +2413,20 @@ void re_initialize(void)
 	printf("turbostat: re-initialized with num_cpus %d\n", topo.num_cpus);
 }
 
+void set_max_cpu_num(void)
+{
+	FILE *filep;
+	unsigned long dummy;
+
+	topo.max_cpu_num = 0;
+	filep = fopen_or_die(
+			"/sys/devices/system/cpu/cpu0/topology/thread_siblings",
+			"r");
+	while (fscanf(filep, "%lx,", &dummy) == 1)
+		topo.max_cpu_num+=32;
+	fclose(filep);
+	topo.max_cpu_num--; /* 0 based */
+}
 
 /*
  * count_cpus()
@@ -2420,10 +2434,7 @@ void re_initialize(void)
  */
 int count_cpus(int cpu)
 {
-	if (topo.max_cpu_num < cpu)
-		topo.max_cpu_num = cpu;
-
-	topo.num_cpus += 1;
+	topo.num_cpus++;
 	return 0;
 }
 int mark_cpu_present(int cpu)
@@ -4320,8 +4331,8 @@ void topology_probe()
 	} *cpus;
 
 	/* Initialize num_cpus, max_cpu_num */
+	set_max_cpu_num();
 	topo.num_cpus = 0;
-	topo.max_cpu_num = 0;
 	for_all_proc_cpus(count_cpus);
 	if (!summary_only && topo.num_cpus > 1)
 		BIC_PRESENT(BIC_CPU);
-- 
1.8.5.5

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/7 RESEND] turbostat: Fix AMD output by making turbostat aware of nodes Prarit Bhargava <prarit@redhat.com> - 2017-07-25 14:30 +0200
  [PATCH 4/7] turbostat: track thread ID in cpu_topology Prarit Bhargava <prarit@redhat.com> - 2017-07-25 14:30 +0200
  [PATCH 3/7] turbostat: Calculate additional node information for a package Prarit Bhargava <prarit@redhat.com> - 2017-07-25 14:30 +0200
  [PATCH 7/7] turbostat: add node information into turbostat calculations Prarit Bhargava <prarit@redhat.com> - 2017-07-25 14:30 +0200
  [PATCH 6/7] turbostat: remove num_ from cpu_topology struct Prarit Bhargava <prarit@redhat.com> - 2017-07-25 14:30 +0200
  [PATCH 1/7] turbostat: set max_num_cpus equal to the cpumask length Prarit Bhargava <prarit@redhat.com> - 2017-07-25 14:30 +0200
  [PATCH 5/7] turbostat: rename num_cores_per_pkg to num_cores_per_node Prarit Bhargava <prarit@redhat.com> - 2017-07-25 14:30 +0200
  [PATCH 2/7] turbostat: Fix node and siblings lookup data Prarit Bhargava <prarit@redhat.com> - 2017-07-25 14:30 +0200

csiph-web