[PATCH i-g-t] tests/gem_sync: test no inner loop
Marcin Bernatowicz
marcin.bernatowicz at linux.intel.com
Wed Aug 12 07:13:22 UTC 2020
Compare sync_ring times when no inner loops are used
Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>
---
tests/i915/gem_sync.c | 51 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/tests/i915/gem_sync.c b/tests/i915/gem_sync.c
index b317a3927..0ecf4a1be 100644
--- a/tests/i915/gem_sync.c
+++ b/tests/i915/gem_sync.c
@@ -147,6 +147,55 @@ static void xchg_engine(void *array, unsigned i, unsigned j)
igt_swap(E[i], E[j]);
}
+static void
+sync_ring_no_inner_loops(int fd, unsigned ring, int num_children, int timeout)
+{
+ struct intel_engine_data ied;
+
+ ied = list_engines(fd, ring);
+ igt_require(ied.nengines);
+
+
+ // if (num_children < ied.nengines)
+ // num_children = ied.nengines;
+ igt_info("sync_ring_no_inner_loops\n");
+
+ intel_detect_and_clear_missed_interrupts(fd);
+ igt_fork(child, num_children) {
+ const uint32_t bbe = MI_BATCH_BUFFER_END;
+ struct drm_i915_gem_exec_object2 object;
+ struct drm_i915_gem_execbuffer2 execbuf;
+ double start, elapsed;
+ unsigned long cycles;
+
+ memset(&object, 0, sizeof(object));
+ object.handle = gem_create(fd, 4096);
+ gem_write(fd, object.handle, 0, &bbe, sizeof(bbe));
+
+ memset(&execbuf, 0, sizeof(execbuf));
+ execbuf.buffers_ptr = to_user_pointer(&object);
+ execbuf.buffer_count = 1;
+ execbuf.flags = ied_flags(&ied, child);
+ gem_execbuf(fd, &execbuf);
+ gem_sync(fd, object.handle);
+
+ start = gettime();
+ cycles = 0;
+ do {
+ gem_execbuf(fd, &execbuf);
+ gem_sync(fd, object.handle);
+ ++cycles;
+ } while ((elapsed = gettime() - start) < timeout);
+
+ igt_info("%s %ld cycles: %.3f us\n",
+ ied_name(&ied, child), cycles, elapsed * 1e6 / cycles);
+
+ gem_close(fd, object.handle);
+ }
+ igt_waitchildren_timeout(timeout+10, NULL);
+ igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
+}
+
static void
sync_ring(int fd, unsigned ring, int num_children, int timeout)
{
@@ -191,6 +240,8 @@ sync_ring(int fd, unsigned ring, int num_children, int timeout)
}
igt_waitchildren_timeout(timeout+10, NULL);
igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
+
+ sync_ring_no_inner_loops(fd, ring, num_children, timeout);
}
static void
--
2.25.1
More information about the Intel-gfx-trybot
mailing list