[igt-dev] [PATCH i-g-t v2 3/3] tests/perf_pmu: Give sampling more time

Tvrtko Ursulin tursulin at ursulin.net
Mon Feb 12 11:36:07 UTC 2018


From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

We get occasional errors like:

 (perf_pmu:21315) CRITICAL: Test assertion failure function sema_wait, file perf_pmu.c:631:
 (perf_pmu:21315) CRITICAL: Failed assertion: (double)(val[1] - val[0]) <= (1.0 + (tolerance)) * (double)(slept) && (double)(val[1] - val[0]) >= (1.0 - (tolerance)) * (double)(slept)
 (perf_pmu:21315) CRITICAL: 'val[1] - val[0]' != 'slept' (450000000.000000 not within 5.000000% tolerance of 500129618.000000)

Suggesting a time disagreement between userspace and the PMU.

At the moment I got no better ideas than fiddling with delays to see if it
improves things.

v2: Wait for sampling to start instead of hardcoded sleep. (Chris Wilson)

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
 tests/perf_pmu.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/tests/perf_pmu.c b/tests/perf_pmu.c
index cf701bbd3f18..28ce89399623 100644
--- a/tests/perf_pmu.c
+++ b/tests/perf_pmu.c
@@ -613,11 +613,15 @@ sema_wait(int gem_fd, const struct intel_execution_engine2 *e,
 
 	fd = open_pmu(I915_PMU_ENGINE_SEMA(e->class, e->instance));
 
+	val[0] = pmu_read_single(fd);
+
 	gem_execbuf(gem_fd, &eb);
 	do { /* wait for the batch to start executing */
 		usleep(5e3);
 	} while (!obj_ptr[1]);
-	usleep(5e3); /* wait for the register sampling */
+
+	igt_assert_f(igt_wait(pmu_read_single(fd) != val[0], 10, 1),
+		     "sampling failed to start withing 10ms");
 
 	val[0] = pmu_read_single(fd);
 	slept = measured_usleep(batch_duration_ns / 1000);
-- 
2.14.1



More information about the igt-dev mailing list