From: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
To: igt-dev@lists.freedesktop.org,
Lionel G Landwerlin <lionel.g.landwerlin@intel.com>,
Chris Wilson <chris.p.wilson@intel.com>
Subject: [igt-dev] [PATCH i-g-t] test/perf: Add test to verify OA TLB invalidation
Date: Fri, 13 Mar 2020 17:00:16 -0700 [thread overview]
Message-ID: <20200314000016.16629-1-umesh.nerlige.ramappa@intel.com> (raw)
Run 2 blocking tests back to back and compare the number of OA reports
captured. Make sure the number of reports are within an acceptable range
of the expected number of reports.
v2: Drop poll and use blocking IO (Lionel)
v3: Verify number of expected reports for both tests (Lionel)
v4: Group gen12 tests under igt_subtest_group (Chris)
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
tests/perf.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 100 insertions(+), 10 deletions(-)
diff --git a/tests/perf.c b/tests/perf.c
index 5e818030..724f6f80 100644
--- a/tests/perf.c
+++ b/tests/perf.c
@@ -2265,6 +2265,92 @@ test_polling(void)
__perf_close(stream_fd);
}
+static int
+num_valid_reports_captured(struct drm_i915_perf_open_param *param,
+ int64_t *duration_ns)
+{
+ uint8_t buf[1024 * 1024];
+ int64_t start, end;
+ int num_reports = 0;
+
+ igt_debug("Expected duration = %lu\n", *duration_ns);
+
+ stream_fd = __perf_open(drm_fd, param, true);
+
+ start = get_time();
+ do_ioctl(stream_fd, I915_PERF_IOCTL_ENABLE, 0);
+ for (/* nop */; ((end = get_time()) - start) < *duration_ns; /* nop */) {
+ struct drm_i915_perf_record_header *header;
+ int ret;
+
+ while ((ret = read(stream_fd, buf, sizeof(buf))) < 0 &&
+ errno == EINTR)
+ ;
+
+ igt_assert(ret > 0);
+
+ for (int offset = 0; offset < ret; offset += header->size) {
+ header = (void *)(buf + offset);
+
+ if (header->type == DRM_I915_PERF_RECORD_SAMPLE) {
+ uint32_t *report = (void *)(header + 1);
+
+ if ((report[0] >> OAREPORT_REASON_SHIFT) &
+ OAREPORT_REASON_TIMER)
+ num_reports++;
+ }
+ }
+ }
+ __perf_close(stream_fd);
+
+ *duration_ns = end - start;
+
+ igt_debug("Actual duration = %lu\n", *duration_ns);
+
+ return num_reports;
+}
+
+static void
+gen12_test_oa_tlb_invalidate(void)
+{
+ int oa_exponent = max_oa_exponent_for_period_lte(30000000);
+ 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_EXPONENT, oa_exponent,
+ };
+ struct drm_i915_perf_open_param param = {
+ .flags = I915_PERF_FLAG_FD_CLOEXEC |
+ I915_PERF_FLAG_DISABLED,
+ .num_properties = sizeof(properties) / 16,
+ .properties_ptr = to_user_pointer(properties),
+ };
+ int num_reports1, num_reports2, num_expected_reports;
+ int64_t duration;
+
+ /* Capture reports for 5 seconds twice and then make sure you get around
+ * the same number of reports. In the case of failure, the number of
+ * reports will vary largely since the beginning of the OA buffer
+ * will have invalid entries.
+ */
+ duration = 5LL * NSEC_PER_SEC;
+ num_reports1 = num_valid_reports_captured(¶m, &duration);
+ num_expected_reports = duration / oa_exponent_to_ns(oa_exponent);
+ igt_debug("expected num reports = %d\n", num_expected_reports);
+ igt_debug("actual num reports = %d\n", num_reports1);
+ igt_assert(num_reports1 > 0.95 * num_expected_reports);
+
+ duration = 5LL * NSEC_PER_SEC;
+ num_reports2 = num_valid_reports_captured(¶m, &duration);
+ num_expected_reports = duration / oa_exponent_to_ns(oa_exponent);
+ igt_debug("expected num reports = %d\n", num_expected_reports);
+ igt_debug("actual num reports = %d\n", num_reports2);
+ igt_assert(num_reports2 > 0.95 * num_expected_reports);
+}
+
+
static void
test_buffer_fill(void)
{
@@ -4598,12 +4684,6 @@ igt_main
test_mi_rpc();
}
- igt_describe("Test MI REPORT PERF COUNT for Gen 12");
- igt_subtest("gen12-mi-rpc") {
- igt_require(intel_gen(devid) >= 12);
- gen12_test_mi_rpc();
- }
-
igt_subtest("unprivileged-single-ctx-counters") {
igt_require(IS_HASWELL(devid));
hsw_test_single_ctx_counters();
@@ -4622,10 +4702,20 @@ igt_main
gen8_test_single_ctx_render_target_writes_a_counter();
}
- igt_describe("Measure performance for a specific context using OAR in Gen 12");
- igt_subtest("gen12-unprivileged-single-ctx-counters") {
- igt_require(intel_gen(devid) >= 12);
- gen12_test_single_ctx_render_target_writes_a_counter();
+ igt_subtest_group {
+ igt_fixture igt_require(intel_gen(devid) >= 12);
+
+ igt_describe("Test MI REPORT PERF COUNT for Gen 12");
+ igt_subtest("gen12-mi-rpc")
+ gen12_test_mi_rpc();
+
+ igt_describe("Test OA TLB invalidate");
+ igt_subtest("gen12-oa-tlb-invalidate")
+ gen12_test_oa_tlb_invalidate();
+
+ igt_describe("Measure performance for a specific context using OAR in Gen 12");
+ igt_subtest("gen12-unprivileged-single-ctx-counters")
+ gen12_test_single_ctx_render_target_writes_a_counter();
}
igt_subtest("rc6-disable")
--
2.17.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
next reply other threads:[~2020-03-14 0:00 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-14 0:00 Umesh Nerlige Ramappa [this message]
2020-03-14 10:36 ` [igt-dev] [PATCH i-g-t] test/perf: Add test to verify OA TLB invalidation Lionel Landwerlin
2020-03-16 13:13 ` [igt-dev] ✓ Fi.CI.BAT: success for test/perf: Add test to verify OA TLB invalidation (rev4) Patchwork
2020-03-16 18:42 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
-- strict thread matches above, loose matches on Subject: below --
2020-03-13 17:42 [igt-dev] [PATCH i-g-t] test/perf: Add test to verify OA TLB invalidation Umesh Nerlige Ramappa
2020-03-13 17:51 ` Chris Wilson
2020-03-16 9:52 ` Lionel Landwerlin
2020-03-10 19:00 Umesh Nerlige Ramappa
2020-03-12 13:28 ` Lionel Landwerlin
2020-03-10 3:07 Umesh Nerlige Ramappa
2020-03-10 9:02 ` Lionel Landwerlin
2020-03-10 17:57 ` Umesh Nerlige Ramappa
2020-03-12 13:18 ` Lionel Landwerlin
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=20200314000016.16629-1-umesh.nerlige.ramappa@intel.com \
--to=umesh.nerlige.ramappa@intel.com \
--cc=chris.p.wilson@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=lionel.g.landwerlin@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