Re: [Intel-gfx] [PATCH i-g-t] i915/gem_request_retire: Switch from random blitter loads to dummy
On 30/11/2020 10:36, Chris Wilson wrote: Use the spinners to provide exactly the right amount of background busyness. Signed-off-by: Chris Wilson Cc: Tvrtko Ursulin --- lib/igt_dummyload.c | 23 ++--- lib/igt_dummyload.h | 1 + tests/i915/gem_request_retire.c | 170 3 files changed, 34 insertions(+), 160 deletions(-) diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c index d58f73108..891e4eaab 100644 --- a/lib/igt_dummyload.c +++ b/lib/igt_dummyload.c @@ -161,19 +161,20 @@ emit_recursive_batch(igt_spin_t *spin, if (opts->dependency) { igt_assert(!(opts->flags & IGT_SPIN_POLL_RUN)); - r = [obj[BATCH].relocation_count++]; - - /* dummy write to dependency */ obj[SCRATCH].handle = opts->dependency; obj[SCRATCH].offset = addr; - obj[SCRATCH].flags = EXEC_OBJECT_WRITE; - - r->presumed_offset = obj[SCRATCH].offset; - r->target_handle = obj[SCRATCH].handle; - r->offset = sizeof(uint32_t) * 1020; - r->delta = 0; - r->read_domains = I915_GEM_DOMAIN_RENDER; - r->write_domain = I915_GEM_DOMAIN_RENDER; + if (!(opts->flags & IGT_SPIN_SOFTDEP)) { + obj[SCRATCH].flags = EXEC_OBJECT_WRITE; + + /* dummy write to dependency */ + r = [obj[BATCH].relocation_count++]; + r->presumed_offset = obj[SCRATCH].offset; + r->target_handle = obj[SCRATCH].handle; + r->offset = sizeof(uint32_t) * 1020; + r->delta = 0; + r->read_domains = I915_GEM_DOMAIN_RENDER; + r->write_domain = I915_GEM_DOMAIN_RENDER; + } execbuf->buffer_count++; } else if (opts->flags & IGT_SPIN_POLL_RUN) { diff --git a/lib/igt_dummyload.h b/lib/igt_dummyload.h index 6d3e65ce2..b8baaa6b4 100644 --- a/lib/igt_dummyload.h +++ b/lib/igt_dummyload.h @@ -71,6 +71,7 @@ struct igt_spin_factory { #define IGT_SPIN_NO_PREEMPTION (1 << 4) #define IGT_SPIN_INVALID_CS(1 << 5) #define IGT_SPIN_USERPTR (1 << 6) +#define IGT_SPIN_SOFTDEP (1 << 7) igt_spin_t * __igt_spin_factory(int fd, const struct igt_spin_factory *opts); diff --git a/tests/i915/gem_request_retire.c b/tests/i915/gem_request_retire.c index 31fb41987..c23ddfb7b 100644 --- a/tests/i915/gem_request_retire.c +++ b/tests/i915/gem_request_retire.c @@ -52,130 +52,6 @@ IGT_TEST_DESCRIPTION("Collection of tests targeting request retirement code" " paths."); -#define WIDTH 4096 -#define HEIGHT 4096 -#define BO_SIZE (WIDTH * HEIGHT * sizeof(uint32_t)) - -static uint32_t -blit(int fd, uint32_t dst, uint32_t src, uint32_t ctx_id) -{ - const unsigned int copies = 1000; - uint32_t batch[12 * copies + 5]; - struct drm_i915_gem_relocation_entry reloc[2 * copies]; - struct drm_i915_gem_exec_object2 obj[3]; - struct drm_i915_gem_execbuffer2 exec; - uint32_t handle; - unsigned int i = 0, j, r = 0; - - for (j = 0; j < copies; j++) { - reloc[r].target_handle = dst; - reloc[r].delta = 0; - reloc[r].offset = (i + 4) * sizeof(uint32_t); - reloc[r].presumed_offset = 0; - reloc[r].read_domains = I915_GEM_DOMAIN_RENDER; - reloc[r].write_domain = I915_GEM_DOMAIN_RENDER; - - r++; - - reloc[r].target_handle = src; - reloc[r].delta = 0; - reloc[r].offset = (i + 7) * sizeof(uint32_t); - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - reloc[r].offset += sizeof(uint32_t); - reloc[r].presumed_offset = 0; - reloc[r].read_domains = I915_GEM_DOMAIN_RENDER; - reloc[r].write_domain = 0; - - r++; - - batch[i++] = XY_SRC_COPY_BLT_CMD | - XY_SRC_COPY_BLT_WRITE_ALPHA | - XY_SRC_COPY_BLT_WRITE_RGB; - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - batch[i - 1] |= 8; - else - batch[i - 1] |= 6; - - batch[i++] = (3 << 24) | /* 32 bits */ - (0xcc << 16) | /* copy ROP */ - WIDTH*4; - batch[i++] = 0; /* dst x1,y1 */ - batch[i++] = (HEIGHT << 16) | WIDTH; /* dst x2,y2 */ - batch[i++] = 0; /* dst reloc */ - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - batch[i++] = 0; - batch[i++] = 0; /* src x1,y1 */ - batch[i++] = WIDTH*4; - batch[i++] = 0; /* src reloc */ - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - batch[i++] =
[Intel-gfx] [PATCH i-g-t] i915/gem_request_retire: Switch from random blitter loads to dummy
Use the spinners to provide exactly the right amount of background busyness. Signed-off-by: Chris Wilson Cc: Tvrtko Ursulin --- lib/igt_dummyload.c | 23 ++--- lib/igt_dummyload.h | 1 + tests/i915/gem_request_retire.c | 170 3 files changed, 34 insertions(+), 160 deletions(-) diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c index d58f73108..891e4eaab 100644 --- a/lib/igt_dummyload.c +++ b/lib/igt_dummyload.c @@ -161,19 +161,20 @@ emit_recursive_batch(igt_spin_t *spin, if (opts->dependency) { igt_assert(!(opts->flags & IGT_SPIN_POLL_RUN)); - r = [obj[BATCH].relocation_count++]; - - /* dummy write to dependency */ obj[SCRATCH].handle = opts->dependency; obj[SCRATCH].offset = addr; - obj[SCRATCH].flags = EXEC_OBJECT_WRITE; - - r->presumed_offset = obj[SCRATCH].offset; - r->target_handle = obj[SCRATCH].handle; - r->offset = sizeof(uint32_t) * 1020; - r->delta = 0; - r->read_domains = I915_GEM_DOMAIN_RENDER; - r->write_domain = I915_GEM_DOMAIN_RENDER; + if (!(opts->flags & IGT_SPIN_SOFTDEP)) { + obj[SCRATCH].flags = EXEC_OBJECT_WRITE; + + /* dummy write to dependency */ + r = [obj[BATCH].relocation_count++]; + r->presumed_offset = obj[SCRATCH].offset; + r->target_handle = obj[SCRATCH].handle; + r->offset = sizeof(uint32_t) * 1020; + r->delta = 0; + r->read_domains = I915_GEM_DOMAIN_RENDER; + r->write_domain = I915_GEM_DOMAIN_RENDER; + } execbuf->buffer_count++; } else if (opts->flags & IGT_SPIN_POLL_RUN) { diff --git a/lib/igt_dummyload.h b/lib/igt_dummyload.h index 6d3e65ce2..b8baaa6b4 100644 --- a/lib/igt_dummyload.h +++ b/lib/igt_dummyload.h @@ -71,6 +71,7 @@ struct igt_spin_factory { #define IGT_SPIN_NO_PREEMPTION (1 << 4) #define IGT_SPIN_INVALID_CS(1 << 5) #define IGT_SPIN_USERPTR (1 << 6) +#define IGT_SPIN_SOFTDEP (1 << 7) igt_spin_t * __igt_spin_factory(int fd, const struct igt_spin_factory *opts); diff --git a/tests/i915/gem_request_retire.c b/tests/i915/gem_request_retire.c index 31fb41987..c23ddfb7b 100644 --- a/tests/i915/gem_request_retire.c +++ b/tests/i915/gem_request_retire.c @@ -52,130 +52,6 @@ IGT_TEST_DESCRIPTION("Collection of tests targeting request retirement code" " paths."); -#define WIDTH 4096 -#define HEIGHT 4096 -#define BO_SIZE (WIDTH * HEIGHT * sizeof(uint32_t)) - -static uint32_t -blit(int fd, uint32_t dst, uint32_t src, uint32_t ctx_id) -{ - const unsigned int copies = 1000; - uint32_t batch[12 * copies + 5]; - struct drm_i915_gem_relocation_entry reloc[2 * copies]; - struct drm_i915_gem_exec_object2 obj[3]; - struct drm_i915_gem_execbuffer2 exec; - uint32_t handle; - unsigned int i = 0, j, r = 0; - - for (j = 0; j < copies; j++) { - reloc[r].target_handle = dst; - reloc[r].delta = 0; - reloc[r].offset = (i + 4) * sizeof(uint32_t); - reloc[r].presumed_offset = 0; - reloc[r].read_domains = I915_GEM_DOMAIN_RENDER; - reloc[r].write_domain = I915_GEM_DOMAIN_RENDER; - - r++; - - reloc[r].target_handle = src; - reloc[r].delta = 0; - reloc[r].offset = (i + 7) * sizeof(uint32_t); - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - reloc[r].offset += sizeof(uint32_t); - reloc[r].presumed_offset = 0; - reloc[r].read_domains = I915_GEM_DOMAIN_RENDER; - reloc[r].write_domain = 0; - - r++; - - batch[i++] = XY_SRC_COPY_BLT_CMD | - XY_SRC_COPY_BLT_WRITE_ALPHA | - XY_SRC_COPY_BLT_WRITE_RGB; - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - batch[i - 1] |= 8; - else - batch[i - 1] |= 6; - - batch[i++] = (3 << 24) | /* 32 bits */ - (0xcc << 16) | /* copy ROP */ - WIDTH*4; - batch[i++] = 0; /* dst x1,y1 */ - batch[i++] = (HEIGHT << 16) | WIDTH; /* dst x2,y2 */ - batch[i++] = 0; /* dst reloc */ - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - batch[i++] = 0; - batch[i++] = 0; /* src x1,y1 */ - batch[i++] = WIDTH*4; - batch[i++] = 0; /* src reloc */ - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - batch[i++] = 0; - } - - batch[i++] =
[Intel-gfx] [PATCH i-g-t] i915/gem_request_retire: Switch from random blitter loads to dummy
Use the spinners to provide exactly the right amount of background busyness. Signed-off-by: Chris Wilson Cc: Tvrtko Ursulin --- lib/igt_dummyload.c | 13 +-- lib/igt_dummyload.h | 1 + tests/i915/gem_request_retire.c | 169 3 files changed, 23 insertions(+), 160 deletions(-) diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c index d58f73108..8b2709e71 100644 --- a/lib/igt_dummyload.c +++ b/lib/igt_dummyload.c @@ -161,19 +161,10 @@ emit_recursive_batch(igt_spin_t *spin, if (opts->dependency) { igt_assert(!(opts->flags & IGT_SPIN_POLL_RUN)); - r = [obj[BATCH].relocation_count++]; - - /* dummy write to dependency */ obj[SCRATCH].handle = opts->dependency; obj[SCRATCH].offset = addr; - obj[SCRATCH].flags = EXEC_OBJECT_WRITE; - - r->presumed_offset = obj[SCRATCH].offset; - r->target_handle = obj[SCRATCH].handle; - r->offset = sizeof(uint32_t) * 1020; - r->delta = 0; - r->read_domains = I915_GEM_DOMAIN_RENDER; - r->write_domain = I915_GEM_DOMAIN_RENDER; + if (!(opts->flags & IGT_SPIN_SOFTDEP)) + obj[SCRATCH].flags = EXEC_OBJECT_WRITE; execbuf->buffer_count++; } else if (opts->flags & IGT_SPIN_POLL_RUN) { diff --git a/lib/igt_dummyload.h b/lib/igt_dummyload.h index 6d3e65ce2..b8baaa6b4 100644 --- a/lib/igt_dummyload.h +++ b/lib/igt_dummyload.h @@ -71,6 +71,7 @@ struct igt_spin_factory { #define IGT_SPIN_NO_PREEMPTION (1 << 4) #define IGT_SPIN_INVALID_CS(1 << 5) #define IGT_SPIN_USERPTR (1 << 6) +#define IGT_SPIN_SOFTDEP (1 << 7) igt_spin_t * __igt_spin_factory(int fd, const struct igt_spin_factory *opts); diff --git a/tests/i915/gem_request_retire.c b/tests/i915/gem_request_retire.c index 31fb41987..d0e53d221 100644 --- a/tests/i915/gem_request_retire.c +++ b/tests/i915/gem_request_retire.c @@ -52,130 +52,6 @@ IGT_TEST_DESCRIPTION("Collection of tests targeting request retirement code" " paths."); -#define WIDTH 4096 -#define HEIGHT 4096 -#define BO_SIZE (WIDTH * HEIGHT * sizeof(uint32_t)) - -static uint32_t -blit(int fd, uint32_t dst, uint32_t src, uint32_t ctx_id) -{ - const unsigned int copies = 1000; - uint32_t batch[12 * copies + 5]; - struct drm_i915_gem_relocation_entry reloc[2 * copies]; - struct drm_i915_gem_exec_object2 obj[3]; - struct drm_i915_gem_execbuffer2 exec; - uint32_t handle; - unsigned int i = 0, j, r = 0; - - for (j = 0; j < copies; j++) { - reloc[r].target_handle = dst; - reloc[r].delta = 0; - reloc[r].offset = (i + 4) * sizeof(uint32_t); - reloc[r].presumed_offset = 0; - reloc[r].read_domains = I915_GEM_DOMAIN_RENDER; - reloc[r].write_domain = I915_GEM_DOMAIN_RENDER; - - r++; - - reloc[r].target_handle = src; - reloc[r].delta = 0; - reloc[r].offset = (i + 7) * sizeof(uint32_t); - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - reloc[r].offset += sizeof(uint32_t); - reloc[r].presumed_offset = 0; - reloc[r].read_domains = I915_GEM_DOMAIN_RENDER; - reloc[r].write_domain = 0; - - r++; - - batch[i++] = XY_SRC_COPY_BLT_CMD | - XY_SRC_COPY_BLT_WRITE_ALPHA | - XY_SRC_COPY_BLT_WRITE_RGB; - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - batch[i - 1] |= 8; - else - batch[i - 1] |= 6; - - batch[i++] = (3 << 24) | /* 32 bits */ - (0xcc << 16) | /* copy ROP */ - WIDTH*4; - batch[i++] = 0; /* dst x1,y1 */ - batch[i++] = (HEIGHT << 16) | WIDTH; /* dst x2,y2 */ - batch[i++] = 0; /* dst reloc */ - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - batch[i++] = 0; - batch[i++] = 0; /* src x1,y1 */ - batch[i++] = WIDTH*4; - batch[i++] = 0; /* src reloc */ - if (intel_gen(intel_get_drm_devid(fd)) >= 8) - batch[i++] = 0; - } - - batch[i++] = MI_BATCH_BUFFER_END; - - while (i % 4) - batch[i++] = MI_NOOP; - - handle = gem_create(fd, sizeof(batch)); - gem_write(fd, handle, 0, batch, sizeof(batch)); - - memset(obj, 0, sizeof(obj)); - memset(, 0, sizeof(exec)); - - obj[exec.buffer_count++].handle = dst; - if (src != dst) - obj[exec.buffer_count++].handle = src; - obj[exec.buffer_count].handle = handle; - obj[exec.buffer_count].relocation_count = 2 * copies; -