Re: [Intel-gfx] [PATCH] drm/i915/selftests: Reduce oversaturation of request smoketesting

Das, Nirmoy
2022-11-03T08:43:50Z

On 11/2/2022 4:57 PM, Nirmoy Das wrote:
> From: Chris Wilson <chris@chris-wilson.co.uk>
>
> 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>

Nirmoy

> ---
> drivers/gpu/drm/i915/selftests/i915_request.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> index a46350c37e9d..4380473ceb98 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> @@ -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);
>