linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6] perf stat: Fix wrong skipping for per-die aggregation
@ 2021-01-14  1:27 Jin Yao
  2021-01-14 19:00 ` Jiri Olsa
  0 siblings, 1 reply; 5+ messages in thread
From: Jin Yao @ 2021-01-14  1:27 UTC (permalink / raw)
  To: acme, jolsa, peterz, mingo, alexander.shishkin
  Cc: Linux-kernel, ak, kan.liang, yao.jin, ying.huang, Jin Yao

Uncore becomes die-scope on Xeon Cascade Lake-AP and perf has supported
--per-die aggregation yet.

One issue is found in check_per_pkg() for uncore events running on
AP system. On cascade Lake-AP, we have:

S0-D0
S0-D1
S1-D0
S1-D1

But in check_per_pkg(), S0-D1 and S1-D1 are skipped because the
mask bits for S0 and S1 have been set for S0-D0 and S1-D0. It doesn't
check die_id. So the counting for S0-D1 and S1-D1 are set to zero.
That's not correct.

root@lkp-csl-2ap4 ~# ./perf stat -a -I 1000 -e llc_misses.mem_read --per-die -- sleep 5
     1.001460963 S0-D0           1            1317376 Bytes llc_misses.mem_read
     1.001460963 S0-D1           1             998016 Bytes llc_misses.mem_read
     1.001460963 S1-D0           1             970496 Bytes llc_misses.mem_read
     1.001460963 S1-D1           1            1291264 Bytes llc_misses.mem_read
     2.003488021 S0-D0           1            1082048 Bytes llc_misses.mem_read
     2.003488021 S0-D1           1            1919040 Bytes llc_misses.mem_read
     2.003488021 S1-D0           1             890752 Bytes llc_misses.mem_read
     2.003488021 S1-D1           1            2380800 Bytes llc_misses.mem_read
     3.005613270 S0-D0           1            1126080 Bytes llc_misses.mem_read
     3.005613270 S0-D1           1            2898176 Bytes llc_misses.mem_read
     3.005613270 S1-D0           1             870912 Bytes llc_misses.mem_read
     3.005613270 S1-D1           1            3388608 Bytes llc_misses.mem_read
     4.007627598 S0-D0           1            1124608 Bytes llc_misses.mem_read
     4.007627598 S0-D1           1            3884416 Bytes llc_misses.mem_read
     4.007627598 S1-D0           1             921088 Bytes llc_misses.mem_read
     4.007627598 S1-D1           1            4451840 Bytes llc_misses.mem_read
     5.001479927 S0-D0           1             963328 Bytes llc_misses.mem_read
     5.001479927 S0-D1           1            4831936 Bytes llc_misses.mem_read
     5.001479927 S1-D0           1             895104 Bytes llc_misses.mem_read
     5.001479927 S1-D1           1            5496640 Bytes llc_misses.mem_read

From above output, we can see S0-D1 and S1-D1 don't report the interval
values, they are continued to grow. That's because check_per_pkg() wrongly
decides to use zero counts for S0-D1 and S1-D1.

So in check_per_pkg(), we should use hashmap(socket,die) to decide if
the cpu counts needs to skip. Only considering socket is not enough.

Now with this patch,

root@lkp-csl-2ap4 ~# ./perf stat -a -I 1000 -e llc_misses.mem_read --per-die -- sleep 5
     1.001586691 S0-D0           1            1229440 Bytes llc_misses.mem_read
     1.001586691 S0-D1           1             976832 Bytes llc_misses.mem_read
     1.001586691 S1-D0           1             938304 Bytes llc_misses.mem_read
     1.001586691 S1-D1           1            1227328 Bytes llc_misses.mem_read
     2.003776312 S0-D0           1            1586752 Bytes llc_misses.mem_read
     2.003776312 S0-D1           1             875392 Bytes llc_misses.mem_read
     2.003776312 S1-D0           1             855616 Bytes llc_misses.mem_read
     2.003776312 S1-D1           1             949376 Bytes llc_misses.mem_read
     3.006512788 S0-D0           1            1338880 Bytes llc_misses.mem_read
     3.006512788 S0-D1           1             920064 Bytes llc_misses.mem_read
     3.006512788 S1-D0           1             877184 Bytes llc_misses.mem_read
     3.006512788 S1-D1           1            1020736 Bytes llc_misses.mem_read
     4.008895291 S0-D0           1             926592 Bytes llc_misses.mem_read
     4.008895291 S0-D1           1             906368 Bytes llc_misses.mem_read
     4.008895291 S1-D0           1             892224 Bytes llc_misses.mem_read
     4.008895291 S1-D1           1             987712 Bytes llc_misses.mem_read
     5.001590993 S0-D0           1             962624 Bytes llc_misses.mem_read
     5.001590993 S0-D1           1             912512 Bytes llc_misses.mem_read
     5.001590993 S1-D0           1             891200 Bytes llc_misses.mem_read
     5.001590993 S1-D1           1             978432 Bytes llc_misses.mem_read

On no-die system, die_id is 0, actually it's hashmap(socket,0), original behavior
is not changed.

Reported-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
v6:
 Fix the perf test python failure by adding hashmap.c to python-ext-sources.

 root@kbl-ppc:~# ./perf test python
 19: 'import perf' in python                                         : Ok
 
v5:
 Hash key is changed to die_id << 32 | socket.
 In pkg_id_hash, return (int64_t)key & 0xffffffff; actually it's socket.

v4:
 v3 used unnecessary bool allocatioin. v4 just uses the hash value '(void *)1'.

 v4 is compiled ok with tmp.perf/core.

v3:
 Since for some cpumap functions, the return type is changed from 'int' to
 'struct aggr_cpu_id', the patch needs to be updated as well.

 before:
   d = cpu_map__get_die()

 after:
   d = cpu_map__get_die().die

 v3 is compiled ok with tmp.perf/core.

v2:
 Use hashmap to check the used socket+die pair.

 tools/perf/util/evsel.c            |  4 +++-
 tools/perf/util/evsel.h            |  3 ++-
 tools/perf/util/python-ext-sources |  1 +
 tools/perf/util/stat.c             | 38 +++++++++++++++++++++++++-----
 4 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index c26ea82220bd..9715ed9b03f6 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -45,6 +45,7 @@
 #include "string2.h"
 #include "memswap.h"
 #include "util.h"
+#include "hashmap.h"
 #include "../perf-sys.h"
 #include "util/parse-branch-options.h"
 #include <internal/xyarray.h>
@@ -1377,7 +1378,8 @@ void evsel__exit(struct evsel *evsel)
 	zfree(&evsel->group_name);
 	zfree(&evsel->name);
 	zfree(&evsel->pmu_name);
-	zfree(&evsel->per_pkg_mask);
+	hashmap__free(evsel->per_pkg_mask);
+	evsel->per_pkg_mask = NULL;
 	zfree(&evsel->metric_events);
 	perf_evsel__object.fini(evsel);
 }
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index cd1d8dd43199..951628943fd0 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -17,6 +17,7 @@ struct cgroup;
 struct perf_counts;
 struct perf_stat_evsel;
 union perf_event;
+struct hashmap;
 
 typedef int (evsel__sb_cb_t)(union perf_event *event, void *data);
 
@@ -110,7 +111,7 @@ struct evsel {
 	bool			merged_stat;
 	bool			reset_group;
 	bool			errored;
-	unsigned long		*per_pkg_mask;
+	struct hashmap		*per_pkg_mask;
 	struct evsel		*leader;
 	struct list_head	config_terms;
 	int			err;
diff --git a/tools/perf/util/python-ext-sources b/tools/perf/util/python-ext-sources
index a9d9c142eb7c..266874913dbb 100644
--- a/tools/perf/util/python-ext-sources
+++ b/tools/perf/util/python-ext-sources
@@ -35,3 +35,4 @@ util/symbol_fprintf.c
 util/units.c
 util/affinity.c
 util/rwsem.c
+util/hashmap.c
diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
index 8ce1479c98f0..ed6e42ddd780 100644
--- a/tools/perf/util/stat.c
+++ b/tools/perf/util/stat.c
@@ -13,6 +13,7 @@
 #include "evlist.h"
 #include "evsel.h"
 #include "thread_map.h"
+#include "hashmap.h"
 #include <linux/zalloc.h>
 
 void update_stats(struct stats *stats, u64 val)
@@ -276,15 +277,27 @@ void evlist__save_aggr_prev_raw_counts(struct evlist *evlist)
 static void zero_per_pkg(struct evsel *counter)
 {
 	if (counter->per_pkg_mask)
-		memset(counter->per_pkg_mask, 0, cpu__max_cpu());
+		hashmap__clear(counter->per_pkg_mask);
+}
+
+static size_t pkg_id_hash(const void *key, void *ctx __maybe_unused)
+{
+	return (int64_t)key & 0xffffffff;
+}
+
+static bool pkg_id_equal(const void *key1, const void *key2,
+			 void *ctx __maybe_unused)
+{
+	return (int64_t)key1 == (int64_t)key2;
 }
 
 static int check_per_pkg(struct evsel *counter,
 			 struct perf_counts_values *vals, int cpu, bool *skip)
 {
-	unsigned long *mask = counter->per_pkg_mask;
+	struct hashmap *mask = counter->per_pkg_mask;
 	struct perf_cpu_map *cpus = evsel__cpus(counter);
-	int s;
+	int s, d, ret = 0;
+	uint64_t key;
 
 	*skip = false;
 
@@ -295,7 +308,7 @@ static int check_per_pkg(struct evsel *counter,
 		return 0;
 
 	if (!mask) {
-		mask = zalloc(cpu__max_cpu());
+		mask = hashmap__new(pkg_id_hash, pkg_id_equal, NULL);
 		if (!mask)
 			return -ENOMEM;
 
@@ -317,8 +330,21 @@ static int check_per_pkg(struct evsel *counter,
 	if (s < 0)
 		return -1;
 
-	*skip = test_and_set_bit(s, mask) == 1;
-	return 0;
+	/*
+	 * On multi-die system, die_id > 0. On no-die system, die_id = 0.
+	 * We use hashmap(socket, die) to check the used socket+die pair.
+	 */
+	d = cpu_map__get_die(cpus, cpu, NULL).die;
+	if (d < 0)
+		return -1;
+
+	key = (uint64_t)d << 32 | s;
+	if (hashmap__find(mask, (void *)key, NULL))
+		*skip = true;
+	else
+		ret = hashmap__add(mask, (void *)key, (void *)1);
+
+	return ret;
 }
 
 static int
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v6] perf stat: Fix wrong skipping for per-die aggregation
  2021-01-14  1:27 [PATCH v6] perf stat: Fix wrong skipping for per-die aggregation Jin Yao
@ 2021-01-14 19:00 ` Jiri Olsa
  2021-01-15 20:28   ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 5+ messages in thread
From: Jiri Olsa @ 2021-01-14 19:00 UTC (permalink / raw)
  To: Jin Yao
  Cc: acme, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel, ak,
	kan.liang, yao.jin, ying.huang

On Thu, Jan 14, 2021 at 09:27:55AM +0800, Jin Yao wrote:

SNIP

>      2.003776312 S1-D0           1             855616 Bytes llc_misses.mem_read
>      2.003776312 S1-D1           1             949376 Bytes llc_misses.mem_read
>      3.006512788 S0-D0           1            1338880 Bytes llc_misses.mem_read
>      3.006512788 S0-D1           1             920064 Bytes llc_misses.mem_read
>      3.006512788 S1-D0           1             877184 Bytes llc_misses.mem_read
>      3.006512788 S1-D1           1            1020736 Bytes llc_misses.mem_read
>      4.008895291 S0-D0           1             926592 Bytes llc_misses.mem_read
>      4.008895291 S0-D1           1             906368 Bytes llc_misses.mem_read
>      4.008895291 S1-D0           1             892224 Bytes llc_misses.mem_read
>      4.008895291 S1-D1           1             987712 Bytes llc_misses.mem_read
>      5.001590993 S0-D0           1             962624 Bytes llc_misses.mem_read
>      5.001590993 S0-D1           1             912512 Bytes llc_misses.mem_read
>      5.001590993 S1-D0           1             891200 Bytes llc_misses.mem_read
>      5.001590993 S1-D1           1             978432 Bytes llc_misses.mem_read
> 
> On no-die system, die_id is 0, actually it's hashmap(socket,0), original behavior
> is not changed.
> 
> Reported-by: Huang Ying <ying.huang@intel.com>
> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> ---
> v6:
>  Fix the perf test python failure by adding hashmap.c to python-ext-sources.
> 
>  root@kbl-ppc:~# ./perf test python
>  19: 'import perf' in python                                         : Ok

Acked-by: Jiri Olsa <jolsa@redhat.com>

thanks,
jirka


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v6] perf stat: Fix wrong skipping for per-die aggregation
  2021-01-14 19:00 ` Jiri Olsa
@ 2021-01-15 20:28   ` Arnaldo Carvalho de Melo
  2021-01-15 20:31     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2021-01-15 20:28 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Jin Yao, jolsa, peterz, mingo, alexander.shishkin, Linux-kernel,
	ak, kan.liang, yao.jin, ying.huang

Em Thu, Jan 14, 2021 at 08:00:32PM +0100, Jiri Olsa escreveu:
> On Thu, Jan 14, 2021 at 09:27:55AM +0800, Jin Yao wrote:
> 
> SNIP
> 
> >      2.003776312 S1-D0           1             855616 Bytes llc_misses.mem_read
> >      2.003776312 S1-D1           1             949376 Bytes llc_misses.mem_read
> >      3.006512788 S0-D0           1            1338880 Bytes llc_misses.mem_read
> >      3.006512788 S0-D1           1             920064 Bytes llc_misses.mem_read
> >      3.006512788 S1-D0           1             877184 Bytes llc_misses.mem_read
> >      3.006512788 S1-D1           1            1020736 Bytes llc_misses.mem_read
> >      4.008895291 S0-D0           1             926592 Bytes llc_misses.mem_read
> >      4.008895291 S0-D1           1             906368 Bytes llc_misses.mem_read
> >      4.008895291 S1-D0           1             892224 Bytes llc_misses.mem_read
> >      4.008895291 S1-D1           1             987712 Bytes llc_misses.mem_read
> >      5.001590993 S0-D0           1             962624 Bytes llc_misses.mem_read
> >      5.001590993 S0-D1           1             912512 Bytes llc_misses.mem_read
> >      5.001590993 S1-D0           1             891200 Bytes llc_misses.mem_read
> >      5.001590993 S1-D1           1             978432 Bytes llc_misses.mem_read
> > 
> > On no-die system, die_id is 0, actually it's hashmap(socket,0), original behavior
> > is not changed.
> > 
> > Reported-by: Huang Ying <ying.huang@intel.com>
> > Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> > ---
> > v6:
> >  Fix the perf test python failure by adding hashmap.c to python-ext-sources.
> > 
> >  root@kbl-ppc:~# ./perf test python
> >  19: 'import perf' in python                                         : Ok
> 
> Acked-by: Jiri Olsa <jolsa@redhat.com>

Jin, this is breaking the build in some 32-bit system, can you please
take a look to validate these warnings?

  CC       /tmp/build/perf/util/srcline.o
util/stat.c: In function 'pkg_id_hash':
util/stat.c:285:9: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
  return (int64_t)key & 0xffffffff;
         ^
util/stat.c: In function 'pkg_id_equal':
util/stat.c:291:9: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
  return (int64_t)key1 == (int64_t)key2;
         ^
util/stat.c:291:26: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
  return (int64_t)key1 == (int64_t)key2;
                          ^
util/stat.c: In function 'check_per_pkg':
util/stat.c:342:26: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
  if (hashmap__find(mask, (void *)key, NULL))
                          ^
util/stat.c:345:28: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
   ret = hashmap__add(mask, (void *)key, (void *)1);
                            ^
  CC       /tmp/build/perf/tests/expand-cgroup.o

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v6] perf stat: Fix wrong skipping for per-die aggregation
  2021-01-15 20:28   ` Arnaldo Carvalho de Melo
@ 2021-01-15 20:31     ` Arnaldo Carvalho de Melo
  2021-01-18  4:16       ` Jin, Yao
  0 siblings, 1 reply; 5+ messages in thread
From: Arnaldo Carvalho de Melo @ 2021-01-15 20:31 UTC (permalink / raw)
  To: Jin Yao
  Cc: Jiri Olsa, jolsa, peterz, mingo, alexander.shishkin,
	Linux-kernel, ak, kan.liang, yao.jin, ying.huang

Em Fri, Jan 15, 2021 at 05:28:14PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Thu, Jan 14, 2021 at 08:00:32PM +0100, Jiri Olsa escreveu:
> > On Thu, Jan 14, 2021 at 09:27:55AM +0800, Jin Yao wrote:
> > 
> > SNIP
> > 
> > >      2.003776312 S1-D0           1             855616 Bytes llc_misses.mem_read
> > >      2.003776312 S1-D1           1             949376 Bytes llc_misses.mem_read
> > >      3.006512788 S0-D0           1            1338880 Bytes llc_misses.mem_read
> > >      3.006512788 S0-D1           1             920064 Bytes llc_misses.mem_read
> > >      3.006512788 S1-D0           1             877184 Bytes llc_misses.mem_read
> > >      3.006512788 S1-D1           1            1020736 Bytes llc_misses.mem_read
> > >      4.008895291 S0-D0           1             926592 Bytes llc_misses.mem_read
> > >      4.008895291 S0-D1           1             906368 Bytes llc_misses.mem_read
> > >      4.008895291 S1-D0           1             892224 Bytes llc_misses.mem_read
> > >      4.008895291 S1-D1           1             987712 Bytes llc_misses.mem_read
> > >      5.001590993 S0-D0           1             962624 Bytes llc_misses.mem_read
> > >      5.001590993 S0-D1           1             912512 Bytes llc_misses.mem_read
> > >      5.001590993 S1-D0           1             891200 Bytes llc_misses.mem_read
> > >      5.001590993 S1-D1           1             978432 Bytes llc_misses.mem_read
> > > 
> > > On no-die system, die_id is 0, actually it's hashmap(socket,0), original behavior
> > > is not changed.
> > > 
> > > Reported-by: Huang Ying <ying.huang@intel.com>
> > > Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
> > > ---
> > > v6:
> > >  Fix the perf test python failure by adding hashmap.c to python-ext-sources.
> > > 
> > >  root@kbl-ppc:~# ./perf test python
> > >  19: 'import perf' in python                                         : Ok
> > 
> > Acked-by: Jiri Olsa <jolsa@redhat.com>
> 
> Jin, this is breaking the build in some 32-bit system, can you please
> take a look to validate these warnings?

One such system:

  28    13.75 debian:experimental-x-mipsel  : FAIL mipsel-linux-gnu-gcc (Debian 10.2.1-3) 10.2.1 20201224

 
>   CC       /tmp/build/perf/util/srcline.o
> util/stat.c: In function 'pkg_id_hash':
> util/stat.c:285:9: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
>   return (int64_t)key & 0xffffffff;
>          ^
> util/stat.c: In function 'pkg_id_equal':
> util/stat.c:291:9: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
>   return (int64_t)key1 == (int64_t)key2;
>          ^
> util/stat.c:291:26: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
>   return (int64_t)key1 == (int64_t)key2;
>                           ^
> util/stat.c: In function 'check_per_pkg':
> util/stat.c:342:26: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
>   if (hashmap__find(mask, (void *)key, NULL))
>                           ^
> util/stat.c:345:28: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
>    ret = hashmap__add(mask, (void *)key, (void *)1);
>                             ^
>   CC       /tmp/build/perf/tests/expand-cgroup.o

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v6] perf stat: Fix wrong skipping for per-die aggregation
  2021-01-15 20:31     ` Arnaldo Carvalho de Melo
@ 2021-01-18  4:16       ` Jin, Yao
  0 siblings, 0 replies; 5+ messages in thread
From: Jin, Yao @ 2021-01-18  4:16 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Jiri Olsa, jolsa, peterz, mingo, alexander.shishkin,
	Linux-kernel, ak, kan.liang, yao.jin, ying.huang

Hi Arnaldo, Jiri,

On 1/16/2021 4:31 AM, Arnaldo Carvalho de Melo wrote:
> Em Fri, Jan 15, 2021 at 05:28:14PM -0300, Arnaldo Carvalho de Melo escreveu:
>> Em Thu, Jan 14, 2021 at 08:00:32PM +0100, Jiri Olsa escreveu:
>>> On Thu, Jan 14, 2021 at 09:27:55AM +0800, Jin Yao wrote:
>>>
>>> SNIP
>>>
>>>>       2.003776312 S1-D0           1             855616 Bytes llc_misses.mem_read
>>>>       2.003776312 S1-D1           1             949376 Bytes llc_misses.mem_read
>>>>       3.006512788 S0-D0           1            1338880 Bytes llc_misses.mem_read
>>>>       3.006512788 S0-D1           1             920064 Bytes llc_misses.mem_read
>>>>       3.006512788 S1-D0           1             877184 Bytes llc_misses.mem_read
>>>>       3.006512788 S1-D1           1            1020736 Bytes llc_misses.mem_read
>>>>       4.008895291 S0-D0           1             926592 Bytes llc_misses.mem_read
>>>>       4.008895291 S0-D1           1             906368 Bytes llc_misses.mem_read
>>>>       4.008895291 S1-D0           1             892224 Bytes llc_misses.mem_read
>>>>       4.008895291 S1-D1           1             987712 Bytes llc_misses.mem_read
>>>>       5.001590993 S0-D0           1             962624 Bytes llc_misses.mem_read
>>>>       5.001590993 S0-D1           1             912512 Bytes llc_misses.mem_read
>>>>       5.001590993 S1-D0           1             891200 Bytes llc_misses.mem_read
>>>>       5.001590993 S1-D1           1             978432 Bytes llc_misses.mem_read
>>>>
>>>> On no-die system, die_id is 0, actually it's hashmap(socket,0), original behavior
>>>> is not changed.
>>>>
>>>> Reported-by: Huang Ying <ying.huang@intel.com>
>>>> Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
>>>> ---
>>>> v6:
>>>>   Fix the perf test python failure by adding hashmap.c to python-ext-sources.
>>>>
>>>>   root@kbl-ppc:~# ./perf test python
>>>>   19: 'import perf' in python                                         : Ok
>>>
>>> Acked-by: Jiri Olsa <jolsa@redhat.com>
>>
>> Jin, this is breaking the build in some 32-bit system, can you please
>> take a look to validate these warnings?
> 
> One such system:
> 
>    28    13.75 debian:experimental-x-mipsel  : FAIL mipsel-linux-gnu-gcc (Debian 10.2.1-3) 10.2.1 20201224
> 
>   
>>    CC       /tmp/build/perf/util/srcline.o
>> util/stat.c: In function 'pkg_id_hash':
>> util/stat.c:285:9: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
>>    return (int64_t)key & 0xffffffff;
>>           ^
>> util/stat.c: In function 'pkg_id_equal':
>> util/stat.c:291:9: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
>>    return (int64_t)key1 == (int64_t)key2;
>>           ^
>> util/stat.c:291:26: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
>>    return (int64_t)key1 == (int64_t)key2;
>>                            ^
>> util/stat.c: In function 'check_per_pkg':
>> util/stat.c:342:26: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
>>    if (hashmap__find(mask, (void *)key, NULL))
>>                            ^
>> util/stat.c:345:28: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
>>     ret = hashmap__add(mask, (void *)key, (void *)1);
>>                              ^
>>    CC       /tmp/build/perf/tests/expand-cgroup.o
> 

Thanks for reporting this build issue on 32 bit system.

In v7, I use size_t to replace uint64_t and change the hash key to 'die_id << 16 | socket_id'. I 
assume that 16 bits is enough for socket id, is it true? But if it's not true, we have to use a more 
complicated way such as allocate a structure which has die_id and socket_id and add it to hashmap.

But I'm not sure if that's necessary because I can't imagine a system which has socket id > 65535.

Thanks
Jin Yao


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-01-18  4:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-14  1:27 [PATCH v6] perf stat: Fix wrong skipping for per-die aggregation Jin Yao
2021-01-14 19:00 ` Jiri Olsa
2021-01-15 20:28   ` Arnaldo Carvalho de Melo
2021-01-15 20:31     ` Arnaldo Carvalho de Melo
2021-01-18  4:16       ` Jin, Yao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).