[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, ¶m);
> } 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