[PATCH v3 i-g-t 4/6] benchmarks/gem_wsim: Update request_idx in prepare phase

Kamil Konieczny kamil.konieczny at linux.intel.com
Wed Jul 31 14:59:53 UTC 2024


Hi Marcin,
On 2024-07-29 at 19:52:17 +0200, Marcin Bernatowicz wrote:
> Renamed `request` to `request_idx` for consistency with `engine_idx`.
> The index references an element of device's physical engines array.
> Similar to engine_idx the field is initialized in workload's preparation
> phase. Field is used for throttling functionality, enabling control over
> the rate of requests on a given engine.
> 
> v2: Avoid multiple assignments.
> 
> Signed-off-by: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>

Acked-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>

> ---
>  benchmarks/gem_wsim.c | 36 ++++++++++++++++++++----------------
>  1 file changed, 20 insertions(+), 16 deletions(-)
> 
> diff --git a/benchmarks/gem_wsim.c b/benchmarks/gem_wsim.c
> index 04340fa5d..85f722985 100644
> --- a/benchmarks/gem_wsim.c
> +++ b/benchmarks/gem_wsim.c
> @@ -181,7 +181,7 @@ struct w_step {
>  	/* Implementation details */
>  	unsigned int idx;
>  	struct igt_list_head rq_link;
> -	unsigned int request;
> +	unsigned int request_idx;
>  	unsigned int preempt_us;
>  
>  	union {
> @@ -1300,7 +1300,8 @@ add_step:
>  			step.delay = __duration(step.delay, scale_time);
>  
>  		step.idx = nr_steps++;
> -		step.request = -1;
> +		step.rq_link.next = NULL;
> +		step.rq_link.prev = NULL;
>  		steps = realloc(steps, sizeof(step) * nr_steps);
>  		igt_assert(steps);
>  
> @@ -2226,7 +2227,7 @@ static int prepare_contexts(unsigned int id, struct workload *wrk)
>  			};
>  			struct i915_context_engines_bond *last = NULL;
>  
> -			/* update engine_idx */
> +			/* update engine_idx and request_idx */
>  			for_each_w_step(w, wrk) {
>  				if (w->context != ctx_idx)
>  					continue;
> @@ -2239,6 +2240,8 @@ static int prepare_contexts(unsigned int id, struct workload *wrk)
>  						w->engine_idx = map_idx + 1;
>  					else
>  						igt_assert(ctx->load_balance);
> +
> +					w->request_idx = ctx->engine_map.engines[map_idx];
>  				}
>  			}
>  
> @@ -2298,12 +2301,13 @@ static int prepare_contexts(unsigned int id, struct workload *wrk)
>  
>  			gem_context_set_param(fd, &param);
>  		} else {
> -			/* update engine_idx */
> +			/* update engine_idx and request_idx */
>  			for_each_w_step(w, wrk) {
>  				if (w->context != ctx_idx)
>  					continue;
>  				if (w->type == BATCH) {
>  					w->engine_idx = engine_to_i915_legacy_ring(&w->engine);
> +					w->request_idx = w->engine;
>  				}
>  			}
>  		}
> @@ -2396,8 +2400,10 @@ static int xe_prepare_contexts(unsigned int id, struct workload *wrk)
>  			for_each_w_step(w, wrk) {
>  				if (w->context != ctx_idx)
>  					continue;
> -				if (w->type == BATCH)
> +				if (w->type == BATCH) {
>  					w->engine_idx = 0;
> +					w->request_idx = ctx->engine_map.engines[w->engine_idx];
> +				}
>  			}
>  
>  			xe_exec_queue_create_(ctx, eq);
> @@ -2412,8 +2418,9 @@ static int xe_prepare_contexts(unsigned int id, struct workload *wrk)
>  					continue;
>  				if (w->type == BATCH) {
>  					engine_classes[w->engine]++;
> -					/* update engine_idx */
> +					/* update engine_idx and request_idx */
>  					w->engine_idx = w->engine;
> +					w->request_idx = w->engine;
>  				}
>  			}
>  
> @@ -2730,7 +2737,6 @@ static void *run_workload(void *data)
>  		clock_gettime(CLOCK_MONOTONIC, &repeat_start);
>  
>  		for_each_w_step(w, wrk) {
> -			enum intel_engine_id engine = w->engine;
>  			int do_sleep = 0;
>  
>  			if (!wrk->run)
> @@ -2851,13 +2857,12 @@ static void *run_workload(void *data)
>  			else
>  				do_eb(wrk, w);
>  
> -			if (w->request != -1) {
> +			if (w->rq_link.next) {
>  				igt_list_del(&w->rq_link);
> -				wrk->nrequest[w->request]--;
> +				wrk->nrequest[w->request_idx]--;
>  			}
> -			w->request = engine;
> -			igt_list_add_tail(&w->rq_link, &wrk->requests[engine]);
> -			wrk->nrequest[engine]++;
> +			igt_list_add_tail(&w->rq_link, &wrk->requests[w->request_idx]);
> +			wrk->nrequest[w->request_idx]++;
>  
>  			if (!wrk->run)
>  				break;
> @@ -2866,17 +2871,16 @@ static void *run_workload(void *data)
>  				w_step_sync(w);
>  
>  			if (qd_throttle > 0) {
> -				while (wrk->nrequest[engine] > qd_throttle) {
> +				while (wrk->nrequest[w->request_idx] > qd_throttle) {
>  					struct w_step *s;
>  
> -					s = igt_list_first_entry(&wrk->requests[engine],
> +					s = igt_list_first_entry(&wrk->requests[w->request_idx],
>  								 s, rq_link);
>  
>  					w_step_sync(s);
>  
> -					s->request = -1;
>  					igt_list_del(&s->rq_link);
> -					wrk->nrequest[engine]--;
> +					wrk->nrequest[w->request_idx]--;
>  				}
>  			}
>  		}
> -- 
> 2.31.1
> 


More information about the igt-dev mailing list