diff options
author | Jason Ekstrand <jason@jlekstrand.net> | 2021-04-12 17:49:02 -0500 |
---|---|---|
committer | Jason Ekstrand <jason@jlekstrand.net> | 2021-07-08 12:45:33 -0500 |
commit | 789c748c5299febb29786250a208658e5597f70b (patch) | |
tree | c4eb7ec799200332202964343ee846df4eaf93a9 /tests/i915/gem_ctx_create.c | |
parent | 46a4c7d4234f5366ed3ac50b5c03755fcc48fdce (diff) |
tests/i915/gem_ctx_create: Convert benchmarks to intel_ctx_t
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Zbigniew KempczyĆski <zbigniew.kempczynski@intel.com>
Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Diffstat (limited to 'tests/i915/gem_ctx_create.c')
-rw-r--r-- | tests/i915/gem_ctx_create.c | 93 |
1 files changed, 52 insertions, 41 deletions
diff --git a/tests/i915/gem_ctx_create.c b/tests/i915/gem_ctx_create.c index 37061ebc..44846652 100644 --- a/tests/i915/gem_ctx_create.c +++ b/tests/i915/gem_ctx_create.c @@ -79,7 +79,8 @@ static double elapsed(const struct timespec *start, return (end->tv_sec - start->tv_sec) + 1e-9*(end->tv_nsec - start->tv_nsec); } -static void files(int core, int timeout, const int ncpus) +static void files(int core, const intel_ctx_cfg_t *cfg, + int timeout, const int ncpus) { const uint32_t bbe = MI_BATCH_BUFFER_END; struct drm_i915_gem_execbuffer2 execbuf; @@ -98,18 +99,22 @@ static void files(int core, int timeout, const int ncpus) igt_fork(child, ncpus) { struct timespec start, end; unsigned count = 0; + const intel_ctx_t *ctx; int fd; clock_gettime(CLOCK_MONOTONIC, &start); do { fd = gem_reopen_driver(core); - gem_context_copy_engines(core, 0, fd, 0); + + ctx = intel_ctx_create(fd, cfg); + execbuf.rsvd1 = ctx->id; obj.handle = gem_open(fd, name); execbuf.flags &= ~ENGINE_FLAGS; execbuf.flags |= ppgtt_engines[count % ppgtt_nengine]; gem_execbuf(fd, &execbuf); + intel_ctx_destroy(fd, ctx); close(fd); count++; @@ -126,7 +131,8 @@ static void files(int core, int timeout, const int ncpus) gem_close(core, batch); } -static void active(int fd, const struct intel_execution_engine2 *e, +static void active(int fd, const intel_ctx_cfg_t *cfg, + const struct intel_execution_engine2 *e, int timeout, int ncpus) { const uint32_t bbe = MI_BATCH_BUFFER_END; @@ -158,19 +164,19 @@ static void active(int fd, const struct intel_execution_engine2 *e, if (ncpus < 0) { igt_fork(child, ppgtt_nengine) { unsigned long count = 0; - int i915; + const intel_ctx_t *ctx; - i915 = gem_reopen_driver(fd); /* * Ensure the gpu is idle by launching * a nop execbuf and stalling for it */ - gem_quiescent_gpu(i915); - gem_context_copy_engines(fd, 0, i915, 0); + gem_quiescent_gpu(fd); if (ppgtt_engines[child] == e->flags) continue; + ctx = intel_ctx_create(fd, cfg); + execbuf.rsvd1 = ctx->id; execbuf.flags = ppgtt_engines[child]; while (!READ_ONCE(*shared)) { @@ -183,6 +189,7 @@ static void active(int fd, const struct intel_execution_engine2 *e, } igt_debug("hog[%d]: cycles=%lu\n", child, count); + intel_ctx_destroy(fd, ctx); } ncpus = -ncpus; } @@ -190,33 +197,27 @@ static void active(int fd, const struct intel_execution_engine2 *e, igt_fork(child, ncpus) { struct timespec start, end; unsigned count = 0; - int i915; - uint32_t ctx; - i915 = gem_reopen_driver(fd); /* * Ensure the gpu is idle by launching * a nop execbuf and stalling for it. */ - gem_quiescent_gpu(i915); - ctx = gem_context_create(i915); - gem_context_copy_engines(fd, 0, i915, ctx); + gem_quiescent_gpu(fd); clock_gettime(CLOCK_MONOTONIC, &start); do { - execbuf.rsvd1 = gem_context_clone_with_engines(fd, ctx); + const intel_ctx_t *ctx = intel_ctx_create(fd, cfg); + execbuf.rsvd1 = ctx->id; for (unsigned n = 0; n < nengine; n++) { execbuf.flags = engines[n]; gem_execbuf(fd, &execbuf); } - gem_context_destroy(fd, execbuf.rsvd1); + intel_ctx_destroy(fd, ctx); count++; clock_gettime(CLOCK_MONOTONIC, &end); } while (elapsed(&start, &end) < timeout); - gem_context_destroy(fd, ctx); - gem_sync(fd, obj.handle); clock_gettime(CLOCK_MONOTONIC, &end); igt_info("[%d] Context creation + execution: %.3f us\n", @@ -239,6 +240,15 @@ static void xchg_u32(void *array, unsigned i, unsigned j) a[j] = tmp; } +static void xchg_ptr(void *array, unsigned i, unsigned j) +{ + void **a = array, *tmp; + + tmp = a[i]; + a[i] = a[j]; + a[j] = tmp; +} + static unsigned __context_size(int fd) { switch (intel_gen(intel_get_drm_devid(fd))) { @@ -277,16 +287,17 @@ static uint64_t total_avail_mem(unsigned mode) return total << 20; } -static void maximum(int fd, int ncpus, unsigned mode) +static void maximum(int fd, const intel_ctx_cfg_t *cfg, + int ncpus, unsigned mode) { const uint32_t bbe = MI_BATCH_BUFFER_END; struct drm_i915_gem_execbuffer2 execbuf; struct drm_i915_gem_exec_object2 obj[2]; uint64_t avail_mem = total_avail_mem(mode); unsigned ctx_size = context_size(fd); - uint32_t *contexts = NULL; + const intel_ctx_t **contexts = NULL; unsigned long count = 0; - uint32_t ctx_id; + const intel_ctx_t *ctx; do { int err; @@ -300,16 +311,14 @@ static void maximum(int fd, int ncpus, unsigned mode) err = -ENOMEM; if (avail_mem > (count + 1) * ctx_size) - err = __gem_context_clone(fd, 0, - I915_CONTEXT_CLONE_ENGINES, - 0, &ctx_id); + err = __intel_ctx_create(fd, cfg, &ctx); if (err) { igt_info("Created %lu contexts, before failing with '%s' [%d]\n", count, strerror(-err), -err); break; } - contexts[count++] = ctx_id; + contexts[count++] = ctx; } while (1); igt_require(count); @@ -329,11 +338,11 @@ static void maximum(int fd, int ncpus, unsigned mode) clock_gettime(CLOCK_MONOTONIC, &start); for (int repeat = 0; repeat < 3; repeat++) { - igt_permute_array(contexts, count, xchg_u32); + igt_permute_array(contexts, count, xchg_ptr); igt_permute_array(all_engines, all_nengine, xchg_u32); for (unsigned long i = 0; i < count; i++) { - execbuf.rsvd1 = contexts[i]; + execbuf.rsvd1 = contexts[i]->id; for (unsigned long j = 0; j < all_nengine; j++) { execbuf.flags = all_engines[j]; gem_execbuf(fd, &execbuf); @@ -352,7 +361,7 @@ static void maximum(int fd, int ncpus, unsigned mode) gem_close(fd, obj[1].handle); for (unsigned long i = 0; i < count; i++) - gem_context_destroy(fd, contexts[i]); + intel_ctx_destroy(fd, contexts[i]); free(contexts); } @@ -552,6 +561,7 @@ igt_main const int ncpus = sysconf(_SC_NPROCESSORS_ONLN); struct drm_i915_gem_context_create create; const struct intel_execution_engine2 *e; + intel_ctx_cfg_t cfg; int fd = -1; igt_fixture { @@ -559,7 +569,8 @@ igt_main igt_require_gem(fd); gem_require_contexts(fd); - __for_each_physical_engine(fd, e) + cfg = intel_ctx_cfg_all_physical(fd); + for_each_ctx_cfg_engine(fd, &cfg, e) all_engines[all_nengine++] = e->flags; igt_require(all_nengine); @@ -589,39 +600,39 @@ igt_main iris_pipeline(fd); igt_subtest("maximum-mem") - maximum(fd, ncpus, CHECK_RAM); + maximum(fd, &cfg, ncpus, CHECK_RAM); igt_subtest("maximum-swap") - maximum(fd, ncpus, CHECK_RAM | CHECK_SWAP); + maximum(fd, &cfg, ncpus, CHECK_RAM | CHECK_SWAP); igt_subtest("basic-files") - files(fd, 2, 1); + files(fd, &cfg, 2, 1); igt_subtest("files") - files(fd, 20, 1); + files(fd, &cfg, 20, 1); igt_subtest("forked-files") - files(fd, 20, ncpus); + files(fd, &cfg, 20, ncpus); /* NULL value means all engines */ igt_subtest("active-all") - active(fd, NULL, 20, 1); + active(fd, &cfg, NULL, 20, 1); igt_subtest("forked-active-all") - active(fd, NULL, 20, ncpus); + active(fd, &cfg, NULL, 20, ncpus); igt_subtest_with_dynamic("active") { - __for_each_physical_engine(fd, e) { + for_each_ctx_cfg_engine(fd, &cfg, e) { igt_dynamic_f("%s", e->name) - active(fd, e, 20, 1); + active(fd, &cfg, e, 20, 1); } } igt_subtest_with_dynamic("forked-active") { - __for_each_physical_engine(fd, e) { + for_each_ctx_cfg_engine(fd, &cfg, e) { igt_dynamic_f("%s", e->name) - active(fd, e, 20, ncpus); + active(fd, &cfg, e, 20, ncpus); } } igt_subtest_with_dynamic("hog") { - __for_each_physical_engine(fd, e) { + for_each_ctx_cfg_engine(fd, &cfg, e) { igt_dynamic_f("%s", e->name) - active(fd, e, 20, -1); + active(fd, &cfg, e, 20, -1); } } |