[igt-dev] [i-g-t] Fixing the latency of hrtimer

Sowmya Kaparthi sowmyax.kaparthi at intel.com
Thu Aug 27 12:02:26 UTC 2020


This test undergoes sanity check that we are not spending more than
1/100th of the time awake in the kernel. The right thing would be to
adjust that value by the number of expected wakeups. We expect the
kernel time not to exceed 1/100th of the total test duration at the
default hrtimer of 200Hz/every5ms. Scale that by the provided hrtimer if
applicable.

Cc: Landwerlin, Lionel G <lionel.g.landwerlin at intel.com>
Signed-off-by: Sowmya Kaparthi <sowmyax.kaparthi at intel.com>
---
 tests/i915/perf.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/tests/i915/perf.c b/tests/i915/perf.c
index a894fd38..952da84c 100644
--- a/tests/i915/perf.c
+++ b/tests/i915/perf.c
@@ -1993,6 +1993,7 @@ test_blocking(uint64_t requested_oa_period, bool set_kernel_hrtimer, uint64_t ke
 
 	int64_t start, end;
 	int n = 0;
+	uint64_t max_expected_kernel_ns;
 
 	stream_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
 
@@ -2098,7 +2099,12 @@ test_blocking(uint64_t requested_oa_period, bool set_kernel_hrtimer, uint64_t ke
 	 */
 	igt_assert(n > (min_iterations + n_extra_iterations));
 
-	igt_assert(kernel_ns <= (test_duration_ns / 100ull));
+	if (set_kernel_hrtimer)
+		max_expected_kernel_ns = kernel_hrtimer * (test_duration_ns / 100);
+	else
+		max_expected_kernel_ns = test_duration_ns / 100;
+
+	igt_assert(kernel_ns <= max_expected_kernel_ns);
 
 	__perf_close(stream_fd);
 }
@@ -2152,6 +2158,7 @@ test_polling(uint64_t requested_oa_period, bool set_kernel_hrtimer, uint64_t ker
 	int min_iterations = (test_duration_ns / (oa_period + (kernel_hrtimer + kernel_hrtimer / 5)));
 	int64_t start, end;
 	int n = 0;
+	uint64_t max_expected_kernel_ns;
 
 	stream_fd = __perf_open(drm_fd, &param, true /* prevent_pm */);
 
@@ -2286,7 +2293,12 @@ test_polling(uint64_t requested_oa_period, bool set_kernel_hrtimer, uint64_t ker
 	 */
 	igt_assert(n > (min_iterations + n_extra_iterations));
 
-	igt_assert(kernel_ns <= (test_duration_ns / 100ull));
+	if (set_kernel_hrtimer)
+		max_expected_kernel_ns = kernel_hrtimer * (test_duration_ns / 100);
+	else
+		max_expected_kernel_ns = test_duration_ns / 100;
+
+	igt_assert(kernel_ns <= max_expected_kernel_ns);
 
 	__perf_close(stream_fd);
 }
-- 
2.25.1



More information about the igt-dev mailing list