[Intel-gfx] [igt-dev] [PATCH i-g-t 3/3] igt/gem_sync: Exercising waiting while keeping the GPU busy
Antonio Argenziano
antonio.argenziano at intel.com
Fri Aug 10 17:41:22 UTC 2018
On 10/08/18 04:01, Chris Wilson wrote:
> Normally we wait on the last request, but that overlooks any
> difficulties in waiting on a request while the next is being qeued.
/s/qeued/queued
> Check those.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> tests/gem_sync.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 72 insertions(+)
>
> diff --git a/tests/gem_sync.c b/tests/gem_sync.c
> index c697220ad..fb209977d 100644
> --- a/tests/gem_sync.c
> +++ b/tests/gem_sync.c
> @@ -294,6 +294,74 @@ wakeup_ring(int fd, unsigned ring, int timeout, int wlen)
> igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
> }
>
> + intel_detect_and_clear_missed_interrupts(fd);
> + igt_fork(child, num_engines) {
> + double start, end, elapsed;
> + unsigned long cycles;
> + igt_spin_t *spin[2];
> + uint32_t cmd;
> +
> + spin[0] = __igt_spin_batch_new(fd,
> + .engine = ring,
> + .flags = IGT_SPIN_FAST);
> + cmd = *spin[0]->batch;
> +
> + spin[1] = __igt_spin_batch_new(fd,
> + .engine = ring,
> + .flags = IGT_SPIN_FAST);
> + igt_assert(*spin[1]->batch == cmd);
> +
> + start = gettime();
> + end = start + timeout;
> + cycles = 0;
> + do {
> + for (int loop = 0; loop < 1024; loop++) {
> + igt_spin_t *s = spin[loop & 1];
> +
> + igt_spin_batch_end(s);
> + gem_sync(fd, s->handle);
How does the test fail if the sync goes wrong? Hang detector on the
queued batch?
Antonio
> +
> + *s->batch = cmd;
> + gem_execbuf(fd, &s->execbuf);
> + }
> + cycles += 1024;
> + } while ((elapsed = gettime()) < end);
> + igt_spin_batch_free(fd, spin[1]);
> + igt_spin_batch_free(fd, spin[0]);
> +
> + igt_info("%s%sompleted %ld cycles: %.3f us\n",
> + names[child % num_engines] ?: "",
> + names[child % num_engines] ? " c" : "C",
> + cycles, (elapsed - start)*1e6/cycles);
> + }
> + igt_waitchildren_timeout(2*timeout, NULL);
> + igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
> +}
> +
More information about the Intel-gfx
mailing list