All of lore.kernel.org
 help / color / mirror / Atom feed
From: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
To: "Dixit, Ashutosh" <ashutosh.dixit@intel.com>
Cc: igt-dev@lists.freedesktop.org,
	Lionel G Landwerlin <lionel.g.landwerlin@linux.intel.com>
Subject: Re: [igt-dev] [PATCH i-g-t 14/31] i915/perf: Test concurrent access to OA in different groups
Date: Wed, 15 Mar 2023 13:40:35 -0700	[thread overview]
Message-ID: <ZBItQ6dZ07v3kxFB@orsosgc001.jf.intel.com> (raw)
In-Reply-To: <87pm9aly83.wl-ashutosh.dixit@intel.com>

On Tue, Mar 14, 2023 at 04:17:16PM -0700, Dixit, Ashutosh wrote:
>On Tue, 14 Feb 2023 16:46:31 -0800, Umesh Nerlige Ramappa wrote:
>>
>> With multiple OA buffers, verify that the perf interface allows
>> concurrent access to the OA buffers in different groups.
>>
>> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
>> ---
>>  tests/i915/perf.c | 135 ++++++++++++++++++++++++++++++++++++++++++++--
>>  1 file changed, 131 insertions(+), 4 deletions(-)
>>
>> diff --git a/tests/i915/perf.c b/tests/i915/perf.c
>> index 727eaf4e..9c926fd2 100644
>> --- a/tests/i915/perf.c
>> +++ b/tests/i915/perf.c
>> @@ -2248,6 +2248,7 @@ test_blocking(uint64_t requested_oa_period,
>>
>>	int max_iterations = (test_duration_ns / oa_period) + 2;
>>	int n_extra_iterations = 0;
>> +	int perf_fd;
>>
>>	/* It's a bit tricky to put a lower limit here, but we expect a
>>	 * relatively low latency for seeing reports, while we don't currently
>> @@ -2281,7 +2282,7 @@ test_blocking(uint64_t requested_oa_period,
>>	param.num_properties = (idx - props) / 2;
>>	param.properties_ptr = to_user_pointer(props);
>>
>> -	stream_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
>> +	perf_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
>>
>>	times(&start_times);
>>
>> @@ -2313,14 +2314,14 @@ test_blocking(uint64_t requested_oa_period,
>>	 * the error delta.
>>	 */
>>	start = get_time();
>> -	do_ioctl(stream_fd, I915_PERF_IOCTL_ENABLE, 0);
>> +	do_ioctl(perf_fd, I915_PERF_IOCTL_ENABLE, 0);
>>	for (/* nop */; ((end = get_time()) - start) < test_duration_ns; /* nop */) {
>>		struct drm_i915_perf_record_header *header;
>>		bool timer_report_read = false;
>>		bool non_timer_report_read = false;
>>		int ret;
>>
>> -		while ((ret = read(stream_fd, buf, sizeof(buf))) < 0 &&
>> +		while ((ret = read(perf_fd, buf, sizeof(buf))) < 0 &&
>>		       errno == EINTR)
>>			;
>>
>> @@ -2388,7 +2389,7 @@ test_blocking(uint64_t requested_oa_period,
>>	if (!set_kernel_hrtimer)
>>		igt_assert(kernel_ns <= (test_duration_ns / 100ull));
>>
>> -	__perf_close(stream_fd);
>> +	__perf_close(perf_fd);
>>  }
>>
>>  static void
>> @@ -5476,6 +5477,14 @@ static void put_engine_groups(struct perf_engine_group *groups,
>>	free(groups);
>>  }
>>
>> +static struct i915_engine_class_instance *
>> +random_engine(struct perf_engine_group *group)
>> +{
>> +	srandom(time(NULL));
>> +
>> +	return &group->ci[random() % group->num_engines];
>> +}
>> +
>>  static bool has_class_instance(int i915, uint16_t class, uint16_t instance)
>>  {
>>	int fd;
>> @@ -5498,6 +5507,112 @@ static void set_default_engine(const intel_ctx_t *ctx)
>>			default_e2 = *e;
>>  }
>>
>> +/*
>> + * Test if OA buffer streams can be independently opened on each gt. Once a user
>> + * opens a stream, that gt is exclusive to the user, other users get -EBUSY on
>> + * trying to open a stream. Note that OA metrics are global to the gt and can
>> + * get clobbered if we try to support concurrency.
>
>Little bit confusing since what we are doing below is for each perf group,
>not each gt, though there is one perf group per gt on MTL. Even function
>and test names say gt. Shall we s/gt/grp/ or something like that?

Hmm, looks like the comment wasn't updated when we moved to perf groups.  
I will fix that and the function name accordingly.

>
>> + */
>> +static void
>> +test_gt_exclusive_stream(const intel_ctx_t *ctx, bool exponent)
>> +{
>> +	uint64_t properties[] = {
>> +		DRM_I915_PERF_PROP_SAMPLE_OA, true,
>> +		DRM_I915_PERF_PROP_OA_METRICS_SET, test_set->perf_oa_metrics_set,
>> +		DRM_I915_PERF_PROP_OA_FORMAT, test_set->perf_oa_format,
>> +		DRM_I915_PERF_PROP_OA_ENGINE_CLASS, 0,
>> +		DRM_I915_PERF_PROP_OA_ENGINE_INSTANCE, 0,
>> +		DRM_I915_PERF_PROP_OA_EXPONENT, oa_exp_1_millisec,
>> +	};
>> +	struct drm_i915_perf_open_param param = {
>> +		.flags = I915_PERF_FLAG_FD_CLOEXEC,
>> +		/* for gem_context use case, we do no pass exponent */
>> +		.num_properties = exponent ?
>> +				  ARRAY_SIZE(properties) / 2 - 1:
>> +				  ARRAY_SIZE(properties) / 2,
>> +		.properties_ptr = to_user_pointer(properties),
>> +	};
>> +	uint32_t i, j;
>> +
>> +	/* for each group, open one random perf stream with sample OA */
>> +	for (i = 0; i < num_perf_oa_groups; i++) {
>> +		struct perf_engine_group *grp = &perf_oa_groups[i];
>> +		struct i915_engine_class_instance *ci = random_engine(grp);
>> +
>> +		if (!exponent) {
>> +			properties[0] = DRM_I915_PERF_PROP_CTX_HANDLE;
>> +			properties[1] = ctx->id;
>> +		}
>> +
>> +		properties[7] = ci->engine_class;
>> +		properties[9] = ci->engine_instance;
>> +		grp->perf_fd = igt_ioctl(drm_fd,
>> +					 DRM_IOCTL_I915_PERF_OPEN,
>> +					 &param);
>> +		igt_assert(grp->perf_fd >= 0);
>> +		igt_debug("opened OA buffer with c:i %d:%d\n",
>> +			  ci->engine_class, ci->engine_instance);
>> +	}
>> +
>> +	/* for each group make sure no other streams can be opened */
>> +	for (i = 0; i < num_perf_oa_groups; i++) {
>> +		struct perf_engine_group *grp = &perf_oa_groups[i];
>> +		int err;
>> +
>> +		for (j = 0; j < grp->num_engines; j++) {
>> +			struct i915_engine_class_instance *ci = grp->ci + j;
>> +
>> +			/*
>> +			 * case 1:
>> +			 * concurrent access to OAG should fail
>
>I guess here by OAG we means SAMPLE_OA so using the OA buffer?

Correct, SAMPLE_OA means OA buffer is being enabled.
>
>> +			 */
>> +			properties[0] = DRM_I915_PERF_PROP_SAMPLE_OA;
>> +			properties[1] = true;
>> +			properties[7] = ci->engine_class;
>> +			properties[9] = ci->engine_instance;
>> +			/* for SAMPLE OA use case, we must pass exponent */
>> +			param.num_properties = ARRAY_SIZE(properties) / 2;
>> +			do_ioctl_err(drm_fd, DRM_IOCTL_I915_PERF_OPEN, &param,
>> +				     EBUSY);
>> +			igt_debug("try OA buffer with c:i %d:%d\n",
>> +				  ci->engine_class, ci->engine_instance);
>> +
>> +			/*
>> +			 * case 2:
>> +			 * concurrent access to non-OAG unit should fail
>
>Similarly here non-OAG means not using the OA buffer?

non-OAG = OAR/OAC units which are configured by passing 
DRM_I915_PERF_PROP_CTX_HANDLE.
>
>After potentially fixing the function names and comments, this is:
>
>Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>

Thanks,
Umesh
>
>> +			 */
>> +			properties[0] = DRM_I915_PERF_PROP_CTX_HANDLE;
>> +			properties[1] = gem_context_create(drm_fd);
>> +			/* for gem_context use case, we do no pass exponent */
>> +			param.num_properties = ARRAY_SIZE(properties) / 2 - 1;
>> +			errno = 0;
>> +			err = igt_ioctl(drm_fd, DRM_IOCTL_I915_PERF_OPEN, &param);
>> +			igt_assert(err < 0);
>> +			igt_assert(errno == EBUSY || errno == ENODEV);
>> +			igt_debug("try OA ci unit with c:i %d:%d\n",
>> +				  ci->engine_class, ci->engine_instance);
>> +			gem_context_destroy(drm_fd, properties[1]);
>> +		}
>> +
>> +		if (grp->perf_fd >= 0)
>> +			close(grp->perf_fd);
>> +	}
>> +}
>> +
>> +static void
>> +test_gt_concurrent_oa_buffer_read(void)
>> +{
>> +	igt_fork(child, num_perf_oa_groups) {
>> +		struct intel_execution_engine2 e;
>> +
>> +		e.class = perf_oa_groups[child].ci->engine_class;
>> +		e.instance = perf_oa_groups[child].ci->engine_instance;
>> +
>> +		test_blocking(40 * 1000 * 1000, false, 5 * 1000 * 1000, &e);
>> +	}
>> +	igt_waitchildren();
>> +}
>> +
>>  igt_main
>>  {
>>	const intel_ctx_t *ctx;
>> @@ -5723,6 +5838,18 @@ igt_main
>>		igt_describe("Verify invalid class instance");
>>		igt_subtest("gen12-invalid-class-instance")
>>			test_invalid_class_instance();
>> +
>> +		igt_describe("Verify exclusivity of perf streams with sample oa option");
>> +		igt_subtest("gen12-gt-exclusive-stream-sample-oa")
>> +			test_gt_exclusive_stream(ctx, true);
>> +
>> +		igt_describe("Verify exclusivity of perf streams with ctx handle");
>> +		igt_subtest("gen12-gt-exclusive-stream-ctx-handle")
>> +			test_gt_exclusive_stream(ctx, false);
>> +
>> +		igt_describe("Verify concurrent reads from OA buffers in different gts");
>> +		igt_subtest("gen12-gt-concurrent-oa-buffer-read")
>> +			test_gt_concurrent_oa_buffer_read();
>>	}
>>
>>	igt_subtest("rc6-disable")
>> --
>> 2.36.1
>>

  reply	other threads:[~2023-03-15 20:40 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-15  0:46 [igt-dev] [PATCH i-g-t 00/31] Enable OAM support in IGT and GPUvis Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 01/31] i915/perf: Add support for 64-bit OA formats Umesh Nerlige Ramappa
2023-03-04  2:55   ` Dixit, Ashutosh
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 02/31] i915/perf: Define a default engine for OA Umesh Nerlige Ramappa
2023-03-04  3:05   ` Dixit, Ashutosh
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 03/31] i915/perf: Use default engine for sseu tests Umesh Nerlige Ramappa
2023-03-04  3:08   ` Dixit, Ashutosh
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 04/31] i915/perf: Ensure rcs0 is present for gen12-mi-rpc Umesh Nerlige Ramappa
2023-03-04  3:26   ` Dixit, Ashutosh
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 05/31] i915/perf: Use ARRAY_SIZE for buffer-fill test Umesh Nerlige Ramappa
2023-03-04  3:28   ` Dixit, Ashutosh
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 06/31] i915/perf: Add class:instance support to OA tests Umesh Nerlige Ramappa
2023-03-04  3:38   ` Dixit, Ashutosh
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 07/31] i915/perf: Enable tests to run on specific engines Umesh Nerlige Ramappa
2023-03-06 22:19   ` Dixit, Ashutosh
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 08/31] i915/perf: Treat ticks as 64 bit Umesh Nerlige Ramappa
2023-03-06 23:13   ` Dixit, Ashutosh
2023-03-09 22:55     ` Umesh Nerlige Ramappa
2023-03-09 23:00   ` Dixit, Ashutosh
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 09/31] i915/perf: Treat timestamp as 64 bit value Umesh Nerlige Ramappa
2023-03-07 12:53   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 10/31] i915/perf: Add OAM format type Umesh Nerlige Ramappa
2023-03-07 13:45   ` Kamil Konieczny
2023-03-09 22:39     ` Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 11/31] i915/perf: Move OA format array from stack to heap Umesh Nerlige Ramappa
2023-03-07 13:32   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 12/31] i915/perf: Use a helper for OA format Umesh Nerlige Ramappa
2023-03-07 13:49   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 13/31] i915/perf: Add support for oa perf groups Umesh Nerlige Ramappa
2023-03-07 14:09   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 14/31] i915/perf: Test concurrent access to OA in different groups Umesh Nerlige Ramappa
2023-03-13 15:04   ` Kamil Konieczny
2023-03-14 23:17   ` Dixit, Ashutosh
2023-03-15 20:40     ` Umesh Nerlige Ramappa [this message]
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 15/31] i915/perf: Add OAM support Umesh Nerlige Ramappa
2023-03-13 15:21   ` Kamil Konieczny
2023-03-15  0:38     ` Dixit, Ashutosh
2023-03-15 20:37       ` Umesh Nerlige Ramappa
2023-03-15 21:52   ` Dixit, Ashutosh
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 16/31] lib/perf: Make chipsets aware of oa formats Umesh Nerlige Ramappa
2023-03-13 15:49   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 17/31] i915/perf: Choose OAM format for media metrics Umesh Nerlige Ramappa
2023-03-13 15:52   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 18/31] lib/perf" Set missing metric unit for some counters Umesh Nerlige Ramappa
2023-02-24 13:22   ` Kamil Konieczny
2023-03-15  4:44   ` Dixit, Ashutosh
2023-03-15 19:58     ` Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 19/31] lib/perf: Add MTL to supprted HW in oa guid registry Umesh Nerlige Ramappa
2023-03-13 15:55   ` Kamil Konieczny
2023-03-13 15:57   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 20/31] lib/perf: Add support for OAM format in codegen Umesh Nerlige Ramappa
2023-03-13 16:04   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 21/31] lib/perf: Update MTL GT2 metrics for OAM Umesh Nerlige Ramappa
2023-03-13 16:09   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 22/31] lib/perf: Update MTL GT3 " Umesh Nerlige Ramappa
2023-03-13 16:15   ` Kamil Konieczny
2023-03-16 18:38     ` Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 23/31] i915/perf: Add support for engine specific metrics Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 24/31] i915/perf: Run non-zero-reason on media engines as well Umesh Nerlige Ramappa
2023-03-15 16:50   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 25/31] i915/perf: Make sanity check failures descriptive Umesh Nerlige Ramappa
2023-03-15 16:47   ` Kamil Konieczny
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 26/31] lib/perf: Enable multi-tile support for perf library Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 27/31] lib/perf: Update MTL OA timestamp and EU thread config Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 28/31] lib/perf: Add support for MPEC format Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 29/31] lib/perf: Adjust the GPU timestamp for new OA formats Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 30/31] tools/perf: Choose the right card Umesh Nerlige Ramappa
2023-02-16 19:39   ` Kamil Konieczny
2023-02-16 21:27     ` Umesh Nerlige Ramappa
2023-03-03  1:17       ` Umesh Nerlige Ramappa
2023-02-15  0:46 ` [igt-dev] [PATCH i-g-t 31/31] lib/perf: Apply shift to raw timestamp as well Umesh Nerlige Ramappa
2023-02-15  1:26 ` [igt-dev] ✓ Fi.CI.BAT: success for Enable OAM support in IGT and GPUvis (rev2) Patchwork
2023-02-15 14:12 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork

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=ZBItQ6dZ07v3kxFB@orsosgc001.jf.intel.com \
    --to=umesh.nerlige.ramappa@intel.com \
    --cc=ashutosh.dixit@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=lionel.g.landwerlin@linux.intel.com \
    /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 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.