From: "Dixit, Ashutosh" <ashutosh.dixit@intel.com>
To: intel-xe@lists.freedesktop.org
Subject: Re: [Intel-xe] [PATCH 21/21] drm/xe/uapi: Convert OA property key/value pairs to a struct
Date: Thu, 21 Sep 2023 16:53:20 -0700 [thread overview]
Message-ID: <878r8zhymn.wl-ashutosh.dixit@intel.com> (raw)
In-Reply-To: <20230919161049.2307855-22-ashutosh.dixit@intel.com>
On Tue, 19 Sep 2023 09:10:49 -0700, Ashutosh Dixit wrote:
>
> Change OA uapi to take a param struct rather than property key value
> pairs. A param struct is simpler and param structs can be extenended in the
> future using xe_user_extension so there seems to be no reason to use
> property key value pairs.
There are two ways of doing this:
1. In this patch we have collected all OA properties into a single
struct. The assumption is that any future changes would be handled via
'struct drm_xe_ext_set_property' chained structs (basically using
xe_user_extension):
https://patchwork.freedesktop.org/patch/558715/
2. The second way to do it would be to use chained 'struct
drm_xe_ext_set_property' from the beginning as is being done for
DRM_XE_EXEC_QUEUE_SET_PROPERTY. This is basically the same as the
earlier OA property key/value pairs except that the properties are now
input via chained structs.
This second way is a uniform way of specifying property values whereas
the first way in non-uniform.
Just thought I'll point this out when we decide about this uapi during the
code review.
Thanks.
--
Ashutosh
> Suggested-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
/snip/
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index c0018abee4052..8ba11c4eb36b5 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1175,30 +1175,26 @@ struct drm_xe_query_oa_info {
> } oau[];
> };
>
> -enum drm_xe_oa_property_id {
> - /**
> - * ID of the OA unit on which to open the OA stream, see
> - * @oa_unit_id in 'struct drm_xe_engine_class_instance'. Defaults
> - * to 0 if not provided.
> - */
> - DRM_XE_OA_PROP_OA_UNIT_ID = 1,
> +struct drm_xe_oa_open_param {
> + /** @extensions: Pointer to the first extension struct, if any */
> + __u64 extensions;
>
> /**
> - * A value of 1 requests the inclusion of raw OA unit reports as
> - * part of stream samples.
> + * @oa_unit_id: ID of the OA unit on which to open the OA stream,
> + * see @oa_unit_id in struct @drm_xe_engine_class_instance
> */
> - DRM_XE_OA_PROP_SAMPLE_OA,
> + __u32 oa_unit_id;
>
> /**
> - * The value specifies which set of OA unit metrics should be
> - * configured, defining the contents of any OA unit reports.
> + * @sample_oa: A value of 1 requests the inclusion of raw OA unit
> + * reports as part of stream samples
> */
> - DRM_XE_OA_PROP_OA_METRICS_SET,
> + __u32 sample_oa;
>
> /**
> - * The value specifies the size and layout of OA unit reports.
> + * @oa_format: The value specifies the size and layout of OA unit reports
> */
> - DRM_XE_OA_PROP_OA_FORMAT,
> + __u64 oa_format;
> /**
> * OA_FORMAT's are specified the same way as in Bspec, in terms of
> * the following quantities: a. enum @drm_xe_oa_format_type
> @@ -1210,86 +1206,79 @@ enum drm_xe_oa_property_id {
> #define XE_OA_MASK_BC_REPORT (0xff << 24)
>
> /**
> - * Specifying this property implicitly requests periodic OA unit
> - * sampling and (at least on Haswell) the sampling frequency is derived
> - * from this exponent as follows:
> - *
> - * 80ns * 2^(period_exponent + 1)
> + * @metric_set: specifies which set of OA unit metrics should be
> + * configured, defining the contents of any OA unit reports. Metric
> + * set ID is returned by the XE_PERF_ADD_CONFIG op of the PREF ioctl
> */
> - DRM_XE_OA_PROP_OA_EXPONENT,
> + __u32 metric_set;
>
> /**
> - * Specifying this property is only valid when specify a context to
> - * filter with DRM_XE_OA_PROP_ENGINE_ID. Specifying this property
> - * will hold preemption of the particular engine we want to gather
> - * performance data about.
> + * @period_exponent: Specifying this property implicitly requests
> + * periodic OA unit sampling. The sampling period is:
> + *
> + * 2^(period_exponent + 1) / @oa_timestamp_freq
> + *
> + * Set period_exponent *negative* to disable periodic sampling
> */
> - DRM_XE_OA_PROP_HOLD_PREEMPTION,
> + __s32 period_exponent;
>
> /**
> - * Specify a global OA buffer size to be allocated in bytes. The
> - * size specified must be supported by HW (powers of 2 ranging from
> - * 128 KB to 128Mb depending on the platform)
> + * @oa_buffer_size: Specify a global OA buffer size to be allocated
> + * in bytes. The size specified must be supported by HW (powers of
> + * 2 ranging from 128 KB to 128Mb depending on the platform). A
> + * value of 0 will choose a default size of 16 MB.
> */
> - DRM_XE_OA_PROP_OA_BUFFER_SIZE,
> + __u32 oa_buffer_size;
>
> /**
> - * This optional parameter specifies the timer interval in nanoseconds
> - * at which the xe driver will check the OA buffer for available data.
> - * Minimum allowed value is 100 microseconds. A default value is used by
> - * the driver if this parameter is not specified. Note that larger timer
> - * values will reduce cpu consumption during OA perf captures. However,
> - * excessively large values would potentially result in OA buffer
> - * overwrites as captures reach end of the OA buffer.
> + * @poll_period: Specify timer interval in micro-seconds at which
> + * the xe driver will check the OA buffer for available
> + * data. Minimum allowed value is 100 microseconds. A value of 0
> + * selects a default value is used by the driver. Note that larger
> + * timer values will reduce cpu consumption during OA perf
> + * captures. However, excessively large values would potentially
> + * result in OA buffer overwrites as captures reach end of the OA
> + * buffer.
> */
> - DRM_XE_OA_PROP_POLL_OA_PERIOD,
> + __u32 poll_period_us;
> +
> + /** @open_flags: Flags */
> + __u32 open_flags;
> +#define XE_OA_FLAG_FD_CLOEXEC (1 << 0)
> +#define XE_OA_FLAG_FD_NONBLOCK (1 << 1)
> +#define XE_OA_FLAG_DISABLED (1 << 2)
>
> /**
> - * Open the stream for a specific exec queue id (as used with
> - * drm_xe_exec). A stream opened for a specific exec queue id this
> - * way won't typically require root privileges.
> + * @exec_queue_id: Open the stream for a specific exec queue id (as
> + * used with drm_xe_exec). A stream opened for a specific exec
> + * queue id this way won't typically require root
> + * privileges. Pass a value <= 0 to not specify an exec queue id.
> */
> - DRM_XE_OA_PROP_EXEC_QUEUE_ID,
> + __s32 exec_queue_id;
>
> /**
> - * This parameter specifies the engine instance and can be passed along
> - * with DRM_XE_OA_PROP_EXEC_QUEUE_ID or will default to 0.
> + * @engine_instance: engine instance to use with @exec_queue_id.
> */
> - DRM_XE_OA_PROP_OA_ENGINE_INSTANCE,
> + __u32 engine_instance;
>
> - DRM_XE_OA_PROP_MAX /* non-ABI */
> -};
> -
> -struct drm_xe_oa_open_param {
> - /** @extensions: Pointer to the first extension struct, if any */
> - __u64 extensions;
> + /**
> + * @hold_preemption: If true, this will disable preemption for the
> + * exec queue selected with @exec_queue_id
> + */
> + __u32 hold_preemption;
>
> /**
> - * @config_syncobj: (Output) handle to configuration syncobj
> + * @config_syncobj: (output) handle to configuration syncobj
> *
> * Handle to a syncobj which the kernel will signal after stream
> * configuration or re-configuration is complete (after return from
> * the ioctl). This handle can be provided as a dependency to the
> - * next XE exec ioctl.
> + * next xe exec ioctl to synchronize xe exec with oa config changes
> */
> __u32 config_syncobj;
>
> - __u32 reserved;
> -
> - /** @flags: Flags */
> - __u32 flags;
> -#define XE_OA_FLAG_FD_CLOEXEC (1 << 0)
> -#define XE_OA_FLAG_FD_NONBLOCK (1 << 1)
> -#define XE_OA_FLAG_DISABLED (1 << 2)
> -
> - /** The number of u64 (id, value) pairs */
> - __u32 num_properties;
> -
> - /**
> - * Pointer to array of u64 (id, value) pairs configuring the stream
> - * to open.
> - */
> - __u64 properties_ptr;
> + /** @reserved: reserved (MBZ) */
> + __u64 reserved[4];
> };
>
> struct drm_xe_oa_record_header {
> --
> 2.41.0
>
next prev parent reply other threads:[~2023-09-22 0:09 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-19 16:10 [Intel-xe] [PATCH 00/21] Add OA functionality to Xe Ashutosh Dixit
2023-09-19 16:10 ` [Intel-xe] [PATCH 01/21] drm/xe/uapi: Introduce OA (observability architecture) uapi Ashutosh Dixit
2023-10-04 0:26 ` Umesh Nerlige Ramappa
2023-10-04 0:36 ` Dixit, Ashutosh
2023-11-04 1:23 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 02/21] drm/xe/oa: Add OA types Ashutosh Dixit
2023-10-13 17:05 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 03/21] drm/xe/oa: Add registers and GPU commands used by OA Ashutosh Dixit
2023-10-13 17:06 ` Umesh Nerlige Ramappa
2023-11-17 22:52 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 04/21] drm/xe/oa: Module init/exit and probe/remove Ashutosh Dixit
2023-10-13 17:50 ` Umesh Nerlige Ramappa
2023-10-20 7:08 ` [Intel-xe] [04/21] " Lionel Landwerlin
2023-10-27 20:28 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 05/21] drm/xe/oa: Add/remove config ioctl's Ashutosh Dixit
2023-10-13 17:59 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 06/21] drm/xe/oa: Start implementing OA stream open ioctl Ashutosh Dixit
2023-10-13 18:09 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 07/21] drm/xe/oa: OA stream initialization Ashutosh Dixit
2023-10-04 15:22 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 08/21] drm/xe/oa: Expose OA stream fd Ashutosh Dixit
2023-10-13 18:17 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 09/21] drm/xe/oa: Read file_operation Ashutosh Dixit
2023-10-14 0:56 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 10/21] drm/xe/oa: Implement queries Ashutosh Dixit
2023-10-14 0:58 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 11/21] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2023-10-16 17:43 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 12/21] drm/xe/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2023-10-04 2:13 ` Umesh Nerlige Ramappa
2023-10-05 4:33 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 13/21] drm/xe/uapi: Multiplex PERF ops through a single PERF ioctl Ashutosh Dixit
2023-10-04 2:23 ` Umesh Nerlige Ramappa
2023-10-05 5:27 ` Dixit, Ashutosh
2023-10-05 15:22 ` Dixit, Ashutosh
2023-10-05 18:27 ` Umesh Nerlige Ramappa
2023-10-05 23:18 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 14/21] drm/xe/uapi: Simplify OA configs in uapi Ashutosh Dixit
2023-10-04 2:26 ` Umesh Nerlige Ramappa
2023-10-04 15:44 ` Dixit, Ashutosh
2023-10-04 16:13 ` Rodrigo Vivi
2023-09-19 16:10 ` [Intel-xe] [PATCH 15/21] drm/xe/uapi: Remove OA format names from OA uapi Ashutosh Dixit
2023-10-04 2:33 ` Umesh Nerlige Ramappa
2023-10-05 6:13 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 16/21] drm/xe/oa: Make xe_oa_timestamp_frequency per gt Ashutosh Dixit
2023-09-21 20:45 ` Rodrigo Vivi
2023-09-21 21:58 ` Dixit, Ashutosh
2023-09-22 19:10 ` Rodrigo Vivi
2023-09-19 16:10 ` [Intel-xe] [PATCH 17/21] drm/xe/oa: Remove filtering reports on context id Ashutosh Dixit
2023-10-14 1:01 ` Umesh Nerlige Ramappa
2023-10-20 7:30 ` [Intel-xe] [17/21] " Lionel Landwerlin
2023-10-20 17:00 ` Umesh Nerlige Ramappa
2023-09-19 16:10 ` [Intel-xe] [PATCH 18/21] drm/xe/uapi: More OA uapi fixes/additions Ashutosh Dixit
2023-10-04 0:23 ` Dixit, Ashutosh
2023-10-05 22:33 ` Dixit, Ashutosh
2023-10-12 3:14 ` Umesh Nerlige Ramappa
2023-10-20 7:28 ` [Intel-xe] [18/21] " Lionel Landwerlin
2023-10-27 20:28 ` Dixit, Ashutosh
2023-10-30 10:06 ` Lionel Landwerlin
2023-10-31 2:08 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 19/21] drm/xe/uapi: Drop OA_IOCTL_VERSION Ashutosh Dixit
2023-09-19 17:02 ` Dixit, Ashutosh
2023-10-04 2:37 ` Umesh Nerlige Ramappa
2023-10-05 3:28 ` Dixit, Ashutosh
2023-10-05 19:35 ` Umesh Nerlige Ramappa
2023-10-20 7:36 ` [Intel-xe] [19/21] " Lionel Landwerlin
2023-10-23 23:02 ` Umesh Nerlige Ramappa
2023-10-24 4:08 ` Dixit, Ashutosh
2023-10-24 15:54 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 20/21] drm/xe/uapi: Use OA unit id to identify OA unit Ashutosh Dixit
2023-10-04 22:37 ` Umesh Nerlige Ramappa
2023-10-05 3:04 ` Dixit, Ashutosh
2023-10-05 3:09 ` Dixit, Ashutosh
2023-09-19 16:10 ` [Intel-xe] [PATCH 21/21] drm/xe/uapi: Convert OA property key/value pairs to a struct Ashutosh Dixit
2023-09-21 23:53 ` Dixit, Ashutosh [this message]
2023-10-05 5:37 ` Dixit, Ashutosh
2023-10-05 19:26 ` Umesh Nerlige Ramappa
2023-09-19 16:19 ` [Intel-xe] ✓ CI.Patch_applied: success for Add OA functionality to Xe (rev6) Patchwork
2023-09-19 16:19 ` [Intel-xe] ✗ CI.checkpatch: warning " Patchwork
2023-09-19 16:21 ` [Intel-xe] ✓ CI.KUnit: success " Patchwork
2023-09-19 16:28 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-09-19 16:28 ` [Intel-xe] ✗ CI.Hooks: failure " Patchwork
2023-09-19 16:29 ` [Intel-xe] ✓ CI.checksparse: success " Patchwork
2023-09-19 17:04 ` [Intel-xe] ✗ CI.BAT: failure " Patchwork
2023-10-14 1:05 ` [Intel-xe] [PATCH 00/21] Add OA functionality to Xe Umesh Nerlige Ramappa
2023-10-20 7:44 ` Lionel Landwerlin
2023-10-20 7:52 ` Lionel Landwerlin
2023-10-31 6:51 ` Dixit, Ashutosh
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=878r8zhymn.wl-ashutosh.dixit@intel.com \
--to=ashutosh.dixit@intel.com \
--cc=intel-xe@lists.freedesktop.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox