All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] perf jevents: Drop or simplify small integer values
@ 2024-01-31 20:14 Ian Rogers
  2024-01-31 21:28 ` Liang, Kan
  2024-02-06  0:18 ` Namhyung Kim
  0 siblings, 2 replies; 3+ messages in thread
From: Ian Rogers @ 2024-01-31 20:14 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
	Ian Rogers, Adrian Hunter, Kajol Jain, John Garry, Jing Zhang,
	Kan Liang, linux-perf-users, linux-kernel, Weilin Wang,
	Veronika Molnarova, Michael Petlan, Edward Baker, Perry Taylor

Prior to this patch '0' would be dropped as the config values default
to 0. Some json values are hex and the string '0' wouldn't match '0x0'
as zero. Add a more robust is_zero test to drop these event terms.

When encoding numbers as hex, if the number is between 0 and 9
inclusive then don't add a 0x prefix.

Update test expectations for these changes.

On x86 this reduces the event/metric C string by 58,411 bytes.

Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/pmu-events/jevents.py | 23 ++++++++++++++++++++---
 tools/perf/tests/pmu-events.c    | 22 +++++++++++-----------
 2 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
index 53ab050c8fa4..2c7e5d61ce92 100755
--- a/tools/perf/pmu-events/jevents.py
+++ b/tools/perf/pmu-events/jevents.py
@@ -203,7 +203,7 @@ class JsonEvent:
 
     def llx(x: int) -> str:
       """Convert an int to a string similar to a printf modifier of %#llx."""
-      return '0' if x == 0 else hex(x)
+      return str(x) if x >= 0 and x < 10 else hex(x)
 
     def fixdesc(s: str) -> str:
       """Fix formatting issue for the desc string."""
@@ -294,6 +294,23 @@ class JsonEvent:
       }
       return table[unit] if unit in table else f'uncore_{unit.lower()}'
 
+    def is_zero(val: str) -> bool:
+        try:
+            if val.startswith('0x'):
+                return int(val, 16) == 0
+            else:
+                return int(val) == 0
+        except e:
+            return False
+
+    def canonicalize_value(val: str) -> str:
+        try:
+            if val.startswith('0x'):
+                return llx(int(val, 16))
+            return str(int(val))
+        except e:
+            return val
+
     eventcode = 0
     if 'EventCode' in jd:
       eventcode = int(jd['EventCode'].split(',', 1)[0], 0)
@@ -358,8 +375,8 @@ class JsonEvent:
         ('RdWrMask', 'rdwrmask='),
     ]
     for key, value in event_fields:
-      if key in jd and jd[key] != '0':
-        event += ',' + value + jd[key]
+      if key in jd and not is_zero(jd[key]):
+        event += f',{value}{canonicalize_value(jd[key])}'
     if filter:
       event += f',{filter}'
     if msr:
diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c
index a56d32905743..47a7c3277540 100644
--- a/tools/perf/tests/pmu-events.c
+++ b/tools/perf/tests/pmu-events.c
@@ -70,7 +70,7 @@ static const struct perf_pmu_test_event segment_reg_loads_any = {
 	.event = {
 		.pmu = "default_core",
 		.name = "segment_reg_loads.any",
-		.event = "event=0x6,period=200000,umask=0x80",
+		.event = "event=6,period=200000,umask=0x80",
 		.desc = "Number of segment register loads",
 		.topic = "other",
 	},
@@ -82,7 +82,7 @@ static const struct perf_pmu_test_event dispatch_blocked_any = {
 	.event = {
 		.pmu = "default_core",
 		.name = "dispatch_blocked.any",
-		.event = "event=0x9,period=200000,umask=0x20",
+		.event = "event=9,period=200000,umask=0x20",
 		.desc = "Memory cluster signals to block micro-op dispatch for any reason",
 		.topic = "other",
 	},
@@ -94,11 +94,11 @@ static const struct perf_pmu_test_event eist_trans = {
 	.event = {
 		.pmu = "default_core",
 		.name = "eist_trans",
-		.event = "event=0x3a,period=200000,umask=0x0",
+		.event = "event=0x3a,period=200000",
 		.desc = "Number of Enhanced Intel SpeedStep(R) Technology (EIST) transitions",
 		.topic = "other",
 	},
-	.alias_str = "event=0x3a,period=0x30d40,umask=0",
+	.alias_str = "event=0x3a,period=0x30d40",
 	.alias_long_desc = "Number of Enhanced Intel SpeedStep(R) Technology (EIST) transitions",
 };
 
@@ -128,7 +128,7 @@ static const struct perf_pmu_test_event *core_events[] = {
 static const struct perf_pmu_test_event uncore_hisi_ddrc_flux_wcmd = {
 	.event = {
 		.name = "uncore_hisi_ddrc.flux_wcmd",
-		.event = "event=0x2",
+		.event = "event=2",
 		.desc = "DDRC write commands",
 		.topic = "uncore",
 		.long_desc = "DDRC write commands",
@@ -156,13 +156,13 @@ static const struct perf_pmu_test_event unc_cbo_xsnp_response_miss_eviction = {
 static const struct perf_pmu_test_event uncore_hyphen = {
 	.event = {
 		.name = "event-hyphen",
-		.event = "event=0xe0,umask=0x00",
+		.event = "event=0xe0",
 		.desc = "UNC_CBO_HYPHEN",
 		.topic = "uncore",
 		.long_desc = "UNC_CBO_HYPHEN",
 		.pmu = "uncore_cbox",
 	},
-	.alias_str = "event=0xe0,umask=0",
+	.alias_str = "event=0xe0",
 	.alias_long_desc = "UNC_CBO_HYPHEN",
 	.matching_pmu = "uncore_cbox_0",
 };
@@ -170,13 +170,13 @@ static const struct perf_pmu_test_event uncore_hyphen = {
 static const struct perf_pmu_test_event uncore_two_hyph = {
 	.event = {
 		.name = "event-two-hyph",
-		.event = "event=0xc0,umask=0x00",
+		.event = "event=0xc0",
 		.desc = "UNC_CBO_TWO_HYPH",
 		.topic = "uncore",
 		.long_desc = "UNC_CBO_TWO_HYPH",
 		.pmu = "uncore_cbox",
 	},
-	.alias_str = "event=0xc0,umask=0",
+	.alias_str = "event=0xc0",
 	.alias_long_desc = "UNC_CBO_TWO_HYPH",
 	.matching_pmu = "uncore_cbox_0",
 };
@@ -184,7 +184,7 @@ static const struct perf_pmu_test_event uncore_two_hyph = {
 static const struct perf_pmu_test_event uncore_hisi_l3c_rd_hit_cpipe = {
 	.event = {
 		.name = "uncore_hisi_l3c.rd_hit_cpipe",
-		.event = "event=0x7",
+		.event = "event=7",
 		.desc = "Total read hits",
 		.topic = "uncore",
 		.long_desc = "Total read hits",
@@ -265,7 +265,7 @@ static const struct perf_pmu_test_event sys_ccn_pmu_read_cycles = {
 static const struct perf_pmu_test_event sys_cmn_pmu_hnf_cache_miss = {
 	.event = {
 		.name = "sys_cmn_pmu.hnf_cache_miss",
-		.event = "eventid=0x1,type=0x5",
+		.event = "eventid=1,type=5",
 		.desc = "Counts total cache misses in first lookup result (high priority)",
 		.topic = "uncore",
 		.pmu = "uncore_sys_cmn_pmu",
-- 
2.43.0.429.g432eaa2c6b-goog


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

* Re: [PATCH v1] perf jevents: Drop or simplify small integer values
  2024-01-31 20:14 [PATCH v1] perf jevents: Drop or simplify small integer values Ian Rogers
@ 2024-01-31 21:28 ` Liang, Kan
  2024-02-06  0:18 ` Namhyung Kim
  1 sibling, 0 replies; 3+ messages in thread
From: Liang, Kan @ 2024-01-31 21:28 UTC (permalink / raw)
  To: Ian Rogers, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Namhyung Kim, Mark Rutland,
	Alexander Shishkin, Jiri Olsa, Adrian Hunter, Kajol Jain,
	John Garry, Jing Zhang, linux-perf-users, linux-kernel,
	Weilin Wang, Veronika Molnarova, Michael Petlan, Edward Baker,
	Perry Taylor



On 2024-01-31 3:14 p.m., Ian Rogers wrote:
> Prior to this patch '0' would be dropped as the config values default
> to 0. Some json values are hex and the string '0' wouldn't match '0x0'
> as zero. Add a more robust is_zero test to drop these event terms.
> 
> When encoding numbers as hex, if the number is between 0 and 9
> inclusive then don't add a 0x prefix.
> 
> Update test expectations for these changes.
> 
> On x86 this reduces the event/metric C string by 58,411 bytes.
> 
> Signed-off-by: Ian Rogers <irogers@google.com>

Reviewed-by: Kan Liang <kan.liang@linux.intel.com>

Thanks,
Kan
> ---
>  tools/perf/pmu-events/jevents.py | 23 ++++++++++++++++++++---
>  tools/perf/tests/pmu-events.c    | 22 +++++++++++-----------
>  2 files changed, 31 insertions(+), 14 deletions(-)
> 
> diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
> index 53ab050c8fa4..2c7e5d61ce92 100755
> --- a/tools/perf/pmu-events/jevents.py
> +++ b/tools/perf/pmu-events/jevents.py
> @@ -203,7 +203,7 @@ class JsonEvent:
>  
>      def llx(x: int) -> str:
>        """Convert an int to a string similar to a printf modifier of %#llx."""
> -      return '0' if x == 0 else hex(x)
> +      return str(x) if x >= 0 and x < 10 else hex(x)
>  
>      def fixdesc(s: str) -> str:
>        """Fix formatting issue for the desc string."""
> @@ -294,6 +294,23 @@ class JsonEvent:
>        }
>        return table[unit] if unit in table else f'uncore_{unit.lower()}'
>  
> +    def is_zero(val: str) -> bool:
> +        try:
> +            if val.startswith('0x'):
> +                return int(val, 16) == 0
> +            else:
> +                return int(val) == 0
> +        except e:
> +            return False
> +
> +    def canonicalize_value(val: str) -> str:
> +        try:
> +            if val.startswith('0x'):
> +                return llx(int(val, 16))
> +            return str(int(val))
> +        except e:
> +            return val
> +
>      eventcode = 0
>      if 'EventCode' in jd:
>        eventcode = int(jd['EventCode'].split(',', 1)[0], 0)
> @@ -358,8 +375,8 @@ class JsonEvent:
>          ('RdWrMask', 'rdwrmask='),
>      ]
>      for key, value in event_fields:
> -      if key in jd and jd[key] != '0':
> -        event += ',' + value + jd[key]
> +      if key in jd and not is_zero(jd[key]):
> +        event += f',{value}{canonicalize_value(jd[key])}'
>      if filter:
>        event += f',{filter}'
>      if msr:
> diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c
> index a56d32905743..47a7c3277540 100644
> --- a/tools/perf/tests/pmu-events.c
> +++ b/tools/perf/tests/pmu-events.c
> @@ -70,7 +70,7 @@ static const struct perf_pmu_test_event segment_reg_loads_any = {
>  	.event = {
>  		.pmu = "default_core",
>  		.name = "segment_reg_loads.any",
> -		.event = "event=0x6,period=200000,umask=0x80",
> +		.event = "event=6,period=200000,umask=0x80",
>  		.desc = "Number of segment register loads",
>  		.topic = "other",
>  	},
> @@ -82,7 +82,7 @@ static const struct perf_pmu_test_event dispatch_blocked_any = {
>  	.event = {
>  		.pmu = "default_core",
>  		.name = "dispatch_blocked.any",
> -		.event = "event=0x9,period=200000,umask=0x20",
> +		.event = "event=9,period=200000,umask=0x20",
>  		.desc = "Memory cluster signals to block micro-op dispatch for any reason",
>  		.topic = "other",
>  	},
> @@ -94,11 +94,11 @@ static const struct perf_pmu_test_event eist_trans = {
>  	.event = {
>  		.pmu = "default_core",
>  		.name = "eist_trans",
> -		.event = "event=0x3a,period=200000,umask=0x0",
> +		.event = "event=0x3a,period=200000",
>  		.desc = "Number of Enhanced Intel SpeedStep(R) Technology (EIST) transitions",
>  		.topic = "other",
>  	},
> -	.alias_str = "event=0x3a,period=0x30d40,umask=0",
> +	.alias_str = "event=0x3a,period=0x30d40",
>  	.alias_long_desc = "Number of Enhanced Intel SpeedStep(R) Technology (EIST) transitions",
>  };
>  
> @@ -128,7 +128,7 @@ static const struct perf_pmu_test_event *core_events[] = {
>  static const struct perf_pmu_test_event uncore_hisi_ddrc_flux_wcmd = {
>  	.event = {
>  		.name = "uncore_hisi_ddrc.flux_wcmd",
> -		.event = "event=0x2",
> +		.event = "event=2",
>  		.desc = "DDRC write commands",
>  		.topic = "uncore",
>  		.long_desc = "DDRC write commands",
> @@ -156,13 +156,13 @@ static const struct perf_pmu_test_event unc_cbo_xsnp_response_miss_eviction = {
>  static const struct perf_pmu_test_event uncore_hyphen = {
>  	.event = {
>  		.name = "event-hyphen",
> -		.event = "event=0xe0,umask=0x00",
> +		.event = "event=0xe0",
>  		.desc = "UNC_CBO_HYPHEN",
>  		.topic = "uncore",
>  		.long_desc = "UNC_CBO_HYPHEN",
>  		.pmu = "uncore_cbox",
>  	},
> -	.alias_str = "event=0xe0,umask=0",
> +	.alias_str = "event=0xe0",
>  	.alias_long_desc = "UNC_CBO_HYPHEN",
>  	.matching_pmu = "uncore_cbox_0",
>  };
> @@ -170,13 +170,13 @@ static const struct perf_pmu_test_event uncore_hyphen = {
>  static const struct perf_pmu_test_event uncore_two_hyph = {
>  	.event = {
>  		.name = "event-two-hyph",
> -		.event = "event=0xc0,umask=0x00",
> +		.event = "event=0xc0",
>  		.desc = "UNC_CBO_TWO_HYPH",
>  		.topic = "uncore",
>  		.long_desc = "UNC_CBO_TWO_HYPH",
>  		.pmu = "uncore_cbox",
>  	},
> -	.alias_str = "event=0xc0,umask=0",
> +	.alias_str = "event=0xc0",
>  	.alias_long_desc = "UNC_CBO_TWO_HYPH",
>  	.matching_pmu = "uncore_cbox_0",
>  };
> @@ -184,7 +184,7 @@ static const struct perf_pmu_test_event uncore_two_hyph = {
>  static const struct perf_pmu_test_event uncore_hisi_l3c_rd_hit_cpipe = {
>  	.event = {
>  		.name = "uncore_hisi_l3c.rd_hit_cpipe",
> -		.event = "event=0x7",
> +		.event = "event=7",
>  		.desc = "Total read hits",
>  		.topic = "uncore",
>  		.long_desc = "Total read hits",
> @@ -265,7 +265,7 @@ static const struct perf_pmu_test_event sys_ccn_pmu_read_cycles = {
>  static const struct perf_pmu_test_event sys_cmn_pmu_hnf_cache_miss = {
>  	.event = {
>  		.name = "sys_cmn_pmu.hnf_cache_miss",
> -		.event = "eventid=0x1,type=0x5",
> +		.event = "eventid=1,type=5",
>  		.desc = "Counts total cache misses in first lookup result (high priority)",
>  		.topic = "uncore",
>  		.pmu = "uncore_sys_cmn_pmu",

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

* Re: [PATCH v1] perf jevents: Drop or simplify small integer values
  2024-01-31 20:14 [PATCH v1] perf jevents: Drop or simplify small integer values Ian Rogers
  2024-01-31 21:28 ` Liang, Kan
@ 2024-02-06  0:18 ` Namhyung Kim
  1 sibling, 0 replies; 3+ messages in thread
From: Namhyung Kim @ 2024-02-06  0:18 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Michael Petlan, Jing Zhang,
	Weilin Wang, Ian Rogers, Jiri Olsa, Ingo Molnar, linux-kernel,
	Veronika Molnarova, Alexander Shishkin, Kajol Jain, Kan Liang,
	Perry Taylor, Adrian Hunter, Mark Rutland, John Garry,
	linux-perf-users, Edward Baker, Peter Zijlstra

On Wed, 31 Jan 2024 12:14:29 -0800, Ian Rogers wrote:
> Prior to this patch '0' would be dropped as the config values default
> to 0. Some json values are hex and the string '0' wouldn't match '0x0'
> as zero. Add a more robust is_zero test to drop these event terms.
> 
> When encoding numbers as hex, if the number is between 0 and 9
> inclusive then don't add a 0x prefix.
> 
> [...]

Applied to perf-tools-next, thanks!

Best regards,
-- 
Namhyung Kim <namhyung@kernel.org>

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

end of thread, other threads:[~2024-02-06  0:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-31 20:14 [PATCH v1] perf jevents: Drop or simplify small integer values Ian Rogers
2024-01-31 21:28 ` Liang, Kan
2024-02-06  0:18 ` Namhyung Kim

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.