Re: [Intel-gfx] [PATCH i-g-t] i915/gem_request_retire: Switch from random blitter loads to dummy

2020-11-30 Thread Tvrtko Ursulin



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

2020-11-30 Thread Chris Wilson
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

2020-11-23 Thread Chris Wilson
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;
-