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, ¶m, true /* prevent_pm */);
>> + perf_fd = __perf_open(drm_fd, ¶m, 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,
>> + ¶m);
>> + 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, ¶m,
>> + 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, ¶m);
>> + 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
>>
next prev parent 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox