drm/i915/selftests: Reduce oversaturation of request smoketesting
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 2 Nov 2022 15:57:09 +0000 (16:57 +0100)
committerAndi Shyti <andi.shyti@linux.intel.com>
Thu, 3 Nov 2022 10:12:33 +0000 (11:12 +0100)
The goal in launching the request smoketest is to have sufficient tasks
running across the system such that we are likely to detect concurrency
issues. We aim to have 2 tasks using the same engine, gt, device (each
level of locking around submission and signaling) running at the same
time. While tasks may not be running all the time as they synchronise
with the gpu, they will be running most of the time, in which case
having many more tasks than cores available is wasteful (and
dramatically increases the workload causing excess runtime). Aim to
limit the number of tasks such that there is at least 2 running per
engine, spreading surplus cores around the engines (rather than running
a task per core per engine.)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
Tested-by: Nirmoy Das <nirmoy.das@intel.com>
Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221102155709.31717-1-nirmoy.das@intel.com
drivers/gpu/drm/i915/selftests/i915_request.c

index a46350c37e9d495288b57f554d26b1401f5b57ee..4380473ceb9861a41429bd207a9b2667f1d18e34 100644 (file)
@@ -1710,7 +1710,8 @@ static int live_breadcrumbs_smoketest(void *arg)
 {
        struct drm_i915_private *i915 = arg;
        const unsigned int nengines = num_uabi_engines(i915);
-       const unsigned int ncpus = num_online_cpus();
+       const unsigned int ncpus = /* saturate with nengines * ncpus */
+               max_t(int, 2, DIV_ROUND_UP(num_online_cpus(), nengines));
        unsigned long num_waits, num_fences;
        struct intel_engine_cs *engine;
        struct smoke_thread *threads;
@@ -1782,7 +1783,7 @@ static int live_breadcrumbs_smoketest(void *arg)
                        goto out_flush;
                }
                /* One ring interleaved between requests from all cpus */
-               smoke[idx].max_batch /= num_online_cpus() + 1;
+               smoke[idx].max_batch /= ncpus + 1;
                pr_debug("Limiting batches to %d requests on %s\n",
                         smoke[idx].max_batch, engine->name);