[1/4] perf event: Add simd_flags field to perf_sample

Message ID 20221219161259.3097213-2-james.clark@arm.com
State New
Headers
Series Enable display of partial and empty SVE predicates from Arm SPE data |

Commit Message

James Clark Dec. 19, 2022, 4:12 p.m. UTC
  From: German Gomez <german.gomez@arm.com>

Add new field to the struct perf_sample to store flags related to SIMD
ops.

It will be used to store SIMD information from SVE and NEON when
profiling using ARM SPE.

Signed-off-by: German Gomez <german.gomez@arm.com>
Signed-off-by: James Clark <james.clark@arm.com>
---
 tools/perf/util/sample.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)
  

Comments

Namhyung Kim Dec. 19, 2022, 6:21 p.m. UTC | #1
Hi James,

On Mon, Dec 19, 2022 at 8:13 AM James Clark <james.clark@arm.com> wrote:
>
> From: German Gomez <german.gomez@arm.com>
>
> Add new field to the struct perf_sample to store flags related to SIMD
> ops.
>
> It will be used to store SIMD information from SVE and NEON when
> profiling using ARM SPE.
>
> Signed-off-by: German Gomez <german.gomez@arm.com>
> Signed-off-by: James Clark <james.clark@arm.com>
> ---
>  tools/perf/util/sample.h | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/tools/perf/util/sample.h b/tools/perf/util/sample.h
> index 60ec79d4eea4..bdf52faf165f 100644
> --- a/tools/perf/util/sample.h
> +++ b/tools/perf/util/sample.h
> @@ -66,6 +66,18 @@ struct aux_sample {
>         void *data;
>  };
>
> +struct simd_flags {
> +       u64     arch:1, /* architecture (isa) */
> +               pred:2; /* predication */

Can we reserve more bits for possible future extension or
other arch support?  It seems to be too tight for each field.
Do you plan to add more info to the struct in the future?

Thanks,
Namhyung


> +};
> +
> +/* simd architecture flags */
> +#define SIMD_OP_FLAGS_ARCH_SVE         0x01    /* ARM SVE */
> +
> +/* simd predicate flags */
> +#define SIMD_OP_FLAGS_PRED_PARTIAL     0x01    /* partial predicate */
> +#define SIMD_OP_FLAGS_PRED_EMPTY       0x02    /* empty predicate */
> +
>  struct perf_sample {
>         u64 ip;
>         u32 pid, tid;
> @@ -103,6 +115,7 @@ struct perf_sample {
>         struct stack_dump user_stack;
>         struct sample_read read;
>         struct aux_sample aux_sample;
> +       struct simd_flags simd_flags;
>  };
>
>  /*
> --
> 2.25.1
>
  
James Clark Dec. 20, 2022, 10:22 a.m. UTC | #2
On 19/12/2022 18:21, Namhyung Kim wrote:
> Hi James,
> 
> On Mon, Dec 19, 2022 at 8:13 AM James Clark <james.clark@arm.com> wrote:
>>
>> From: German Gomez <german.gomez@arm.com>
>>
>> Add new field to the struct perf_sample to store flags related to SIMD
>> ops.
>>
>> It will be used to store SIMD information from SVE and NEON when
>> profiling using ARM SPE.
>>
>> Signed-off-by: German Gomez <german.gomez@arm.com>
>> Signed-off-by: James Clark <james.clark@arm.com>
>> ---
>>  tools/perf/util/sample.h | 13 +++++++++++++
>>  1 file changed, 13 insertions(+)
>>
>> diff --git a/tools/perf/util/sample.h b/tools/perf/util/sample.h
>> index 60ec79d4eea4..bdf52faf165f 100644
>> --- a/tools/perf/util/sample.h
>> +++ b/tools/perf/util/sample.h
>> @@ -66,6 +66,18 @@ struct aux_sample {
>>         void *data;
>>  };
>>
>> +struct simd_flags {
>> +       u64     arch:1, /* architecture (isa) */
>> +               pred:2; /* predication */
> 
> Can we reserve more bits for possible future extension or
> other arch support?  It seems to be too tight for each field.
> Do you plan to add more info to the struct in the future?

As far as I can see because this is userspace only, reserving bits
doesn't be done ahead of time. When we need more bits we can just add
it. It never gets written to a file either so there is no need for
backwards compatibility.

> 
> Thanks,
> Namhyung
> 
> 
>> +};
>> +
>> +/* simd architecture flags */
>> +#define SIMD_OP_FLAGS_ARCH_SVE         0x01    /* ARM SVE */
>> +
>> +/* simd predicate flags */
>> +#define SIMD_OP_FLAGS_PRED_PARTIAL     0x01    /* partial predicate */
>> +#define SIMD_OP_FLAGS_PRED_EMPTY       0x02    /* empty predicate */
>> +
>>  struct perf_sample {
>>         u64 ip;
>>         u32 pid, tid;
>> @@ -103,6 +115,7 @@ struct perf_sample {
>>         struct stack_dump user_stack;
>>         struct sample_read read;
>>         struct aux_sample aux_sample;
>> +       struct simd_flags simd_flags;
>>  };
>>
>>  /*
>> --
>> 2.25.1
>>
  

Patch

diff --git a/tools/perf/util/sample.h b/tools/perf/util/sample.h
index 60ec79d4eea4..bdf52faf165f 100644
--- a/tools/perf/util/sample.h
+++ b/tools/perf/util/sample.h
@@ -66,6 +66,18 @@  struct aux_sample {
 	void *data;
 };
 
+struct simd_flags {
+	u64	arch:1,	/* architecture (isa) */
+		pred:2;	/* predication */
+};
+
+/* simd architecture flags */
+#define SIMD_OP_FLAGS_ARCH_SVE		0x01	/* ARM SVE */
+
+/* simd predicate flags */
+#define SIMD_OP_FLAGS_PRED_PARTIAL	0x01	/* partial predicate */
+#define SIMD_OP_FLAGS_PRED_EMPTY	0x02	/* empty predicate */
+
 struct perf_sample {
 	u64 ip;
 	u32 pid, tid;
@@ -103,6 +115,7 @@  struct perf_sample {
 	struct stack_dump user_stack;
 	struct sample_read read;
 	struct aux_sample aux_sample;
+	struct simd_flags simd_flags;
 };
 
 /*