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 |
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
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 --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);
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(-)