diff mbox series

[i-g-t] i915/gem_persistent_relocs: Don't call DROP_IDLE in the middle of submitting

Message ID 20190806084939.20203-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show
Series [i-g-t] i915/gem_persistent_relocs: Don't call DROP_IDLE in the middle of submitting | expand

Commit Message

Chris Wilson Aug. 6, 2019, 8:49 a.m. UTC
To actually DROP_IDLE means that we have to wait for ongoing submission,
and any new concurrently submitted, i.e. it should only be called during
single-threaded submission to ensure the GPU is idle before the new
action.

v2: Also include SHRINK for thrash-all-the-things, and find a dupe in
gem_reloc_vs_gpu.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 tests/i915/gem_persistent_relocs.c | 9 ++++++---
 tests/i915/gem_reloc_vs_gpu.c      | 9 ++++++---
 2 files changed, 12 insertions(+), 6 deletions(-)

Comments

Mika Kuoppala Aug. 8, 2019, 3:26 p.m. UTC | #1
Chris Wilson <chris@chris-wilson.co.uk> writes:

> To actually DROP_IDLE means that we have to wait for ongoing submission,
> and any new concurrently submitted, i.e. it should only be called during
> single-threaded submission to ensure the GPU is idle before the new
> action.
>
> v2: Also include SHRINK for thrash-all-the-things, and find a dupe in
> gem_reloc_vs_gpu.

Agreed that is rather pointless trying to guarantee an idle gpu
during a test.

Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>

But between a tests, it will serve as a flush?

>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  tests/i915/gem_persistent_relocs.c | 9 ++++++---
>  tests/i915/gem_reloc_vs_gpu.c      | 9 ++++++---
>  2 files changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/tests/i915/gem_persistent_relocs.c b/tests/i915/gem_persistent_relocs.c
> index 452fe686e..dff4e9a76 100644
> --- a/tests/i915/gem_persistent_relocs.c
> +++ b/tests/i915/gem_persistent_relocs.c
> @@ -281,10 +281,13 @@ static void do_forked_test(int fd, unsigned flags)
>  	struct igt_helper_process thrasher = {};
>  
>  	if (flags & (THRASH | THRASH_INACTIVE)) {
> -		uint64_t val = (flags & THRASH_INACTIVE) ?
> -				(DROP_RETIRE | DROP_BOUND | DROP_UNBOUND) : DROP_ALL;
> -
>  		igt_fork_helper(&thrasher) {
> +			uint64_t val;
> +
> +			val = DROP_RETIRE | DROP_BOUND | DROP_UNBOUND;
> +			if (!(flags & THRASH_INACTIVE))
> +				val |= DROP_ACTIVE | DROP_SHRINK_ALL;
> +
>  			while (1) {
>  				usleep(1000);
>  				igt_drop_caches_set(fd, val);
> diff --git a/tests/i915/gem_reloc_vs_gpu.c b/tests/i915/gem_reloc_vs_gpu.c
> index d421e4340..328730a9b 100644
> --- a/tests/i915/gem_reloc_vs_gpu.c
> +++ b/tests/i915/gem_reloc_vs_gpu.c
> @@ -258,10 +258,13 @@ static void do_forked_test(int fd, unsigned flags)
>  		igt_require_hang_ring(fd, I915_EXEC_BLT);
>  
>  	if (flags & (THRASH | THRASH_INACTIVE)) {
> -		uint64_t val = (flags & THRASH_INACTIVE) ?
> -				(DROP_RETIRE | DROP_BOUND | DROP_UNBOUND) : DROP_ALL;
> -
>  		igt_fork_helper(&thrasher) {
> +			uint64_t val;
> +
> +			val = DROP_RETIRE | DROP_BOUND | DROP_UNBOUND;
> +			if (!(flags & THRASH_INACTIVE))
> +				val |= DROP_ACTIVE | DROP_SHRINK_ALL;
> +
>  			while (1) {
>  				usleep(1000);
>  				igt_drop_caches_set(fd, val);
> -- 
> 2.23.0.rc1
>
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev
Chris Wilson Aug. 8, 2019, 3:34 p.m. UTC | #2
Quoting Mika Kuoppala (2019-08-08 16:26:35)
> Chris Wilson <chris@chris-wilson.co.uk> writes:
> 
> > To actually DROP_IDLE means that we have to wait for ongoing submission,
> > and any new concurrently submitted, i.e. it should only be called during
> > single-threaded submission to ensure the GPU is idle before the new
> > action.
> >
> > v2: Also include SHRINK for thrash-all-the-things, and find a dupe in
> > gem_reloc_vs_gpu.
> 
> Agreed that is rather pointless trying to guarantee an idle gpu
> during a test.
> 
> Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
> 
> But between a tests, it will serve as a flush?

At the end of a _test_ (binary), we do reset and idle the GPU. The
theory is that we want each test to have a clean slate, and to catch any
residual problems in the test that created them.

But we don't do anything between subtests by default, and we frequently
run into problems there if one subtest fails and causes the next to
fail and so on and so on. An unsolved dilemma.
-Chris
diff mbox series

Patch

diff --git a/tests/i915/gem_persistent_relocs.c b/tests/i915/gem_persistent_relocs.c
index 452fe686e..dff4e9a76 100644
--- a/tests/i915/gem_persistent_relocs.c
+++ b/tests/i915/gem_persistent_relocs.c
@@ -281,10 +281,13 @@  static void do_forked_test(int fd, unsigned flags)
 	struct igt_helper_process thrasher = {};
 
 	if (flags & (THRASH | THRASH_INACTIVE)) {
-		uint64_t val = (flags & THRASH_INACTIVE) ?
-				(DROP_RETIRE | DROP_BOUND | DROP_UNBOUND) : DROP_ALL;
-
 		igt_fork_helper(&thrasher) {
+			uint64_t val;
+
+			val = DROP_RETIRE | DROP_BOUND | DROP_UNBOUND;
+			if (!(flags & THRASH_INACTIVE))
+				val |= DROP_ACTIVE | DROP_SHRINK_ALL;
+
 			while (1) {
 				usleep(1000);
 				igt_drop_caches_set(fd, val);
diff --git a/tests/i915/gem_reloc_vs_gpu.c b/tests/i915/gem_reloc_vs_gpu.c
index d421e4340..328730a9b 100644
--- a/tests/i915/gem_reloc_vs_gpu.c
+++ b/tests/i915/gem_reloc_vs_gpu.c
@@ -258,10 +258,13 @@  static void do_forked_test(int fd, unsigned flags)
 		igt_require_hang_ring(fd, I915_EXEC_BLT);
 
 	if (flags & (THRASH | THRASH_INACTIVE)) {
-		uint64_t val = (flags & THRASH_INACTIVE) ?
-				(DROP_RETIRE | DROP_BOUND | DROP_UNBOUND) : DROP_ALL;
-
 		igt_fork_helper(&thrasher) {
+			uint64_t val;
+
+			val = DROP_RETIRE | DROP_BOUND | DROP_UNBOUND;
+			if (!(flags & THRASH_INACTIVE))
+				val |= DROP_ACTIVE | DROP_SHRINK_ALL;
+
 			while (1) {
 				usleep(1000);
 				igt_drop_caches_set(fd, val);