From: "Christian König" <christian.koenig@amd.com>
To: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>,
Alex Deucher <alexander.deucher@amd.com>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 1/2] drm/amdgpu: increment share sched score on entity selection
Date: Fri, 5 Sep 2025 16:33:31 +0200 [thread overview]
Message-ID: <29d65aec-e709-4606-9513-8bbe9f05a40e@amd.com> (raw)
In-Reply-To: <20250822134348.6819-1-pierre-eric.pelloux-prayer@amd.com>
On 22.08.25 15:43, Pierre-Eric Pelloux-Prayer wrote:
> For hw engines that can't load balance jobs, entities are
> "statically" load balanced: on their first submit, they select
> the best scheduler based on its score.
> The score is made up of 2 parts:
> * the job queue depth (how much jobs are executing/waiting)
> * the number of entities assigned
>
> The second part is only relevant for the static load balance:
> it's a way to consider how many entities are attached to this
> scheduler, knowing that if they ever submit jobs they will go
> to this one.
>
> For rings that can load balance jobs freely, idle entities
> aren't a concern and shouldn't impact the scheduler's decisions.
>
> Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 23 ++++++++++++++++++-----
> drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h | 1 +
> 2 files changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> index f5d5c45ddc0d..4a078d2d98c5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
> @@ -206,9 +206,11 @@ static int amdgpu_ctx_init_entity(struct amdgpu_ctx *ctx, u32 hw_ip,
> {
> struct drm_gpu_scheduler **scheds = NULL, *sched = NULL;
> struct amdgpu_device *adev = ctx->mgr->adev;
> + bool static_load_balancing = false;
> struct amdgpu_ctx_entity *entity;
> enum drm_sched_priority drm_prio;
> unsigned int hw_prio, num_scheds;
> + struct amdgpu_ring *aring;
> int32_t ctx_prio;
> int r;
>
> @@ -236,17 +238,22 @@ static int amdgpu_ctx_init_entity(struct amdgpu_ctx *ctx, u32 hw_ip,
> r = amdgpu_xcp_select_scheds(adev, hw_ip, hw_prio, fpriv,
> &num_scheds, &scheds);
> if (r)
> - goto cleanup_entity;
> + goto error_free_entity;
> }
>
> /* disable load balance if the hw engine retains context among dependent jobs */
> - if (hw_ip == AMDGPU_HW_IP_VCN_ENC ||
> - hw_ip == AMDGPU_HW_IP_VCN_DEC ||
> - hw_ip == AMDGPU_HW_IP_UVD_ENC ||
> - hw_ip == AMDGPU_HW_IP_UVD) {
> + static_load_balancing = hw_ip == AMDGPU_HW_IP_VCN_ENC ||
> + hw_ip == AMDGPU_HW_IP_VCN_DEC ||
> + hw_ip == AMDGPU_HW_IP_UVD_ENC ||
> + hw_ip == AMDGPU_HW_IP_UVD;
Please make that a property of the, e.g. a bool in struct amdgpu_ring_funcs.
Making it depend on the HW IP type was a bad idea in the first place since this all depends on the HW/FW version and not the general IP type.
Apart from that looks good to me.
Regards,
Christian.
> +
> + if (static_load_balancing) {
> sched = drm_sched_pick_best(scheds, num_scheds);
> scheds = &sched;
> num_scheds = 1;
> + aring = container_of(sched, struct amdgpu_ring, sched);
> + entity->sched_ring_score = aring->sched_score;
> + atomic_inc(entity->sched_ring_score);
> }
>
> r = drm_sched_entity_init(&entity->entity, drm_prio, scheds, num_scheds,
> @@ -264,6 +271,9 @@ static int amdgpu_ctx_init_entity(struct amdgpu_ctx *ctx, u32 hw_ip,
> drm_sched_entity_fini(&entity->entity);
>
> error_free_entity:
> + if (static_load_balancing)
> + atomic_dec(entity->sched_ring_score);
> +
> kfree(entity);
>
> return r;
> @@ -514,6 +524,9 @@ static void amdgpu_ctx_do_release(struct kref *ref)
> if (!ctx->entities[i][j])
> continue;
>
> + if (ctx->entities[i][j]->sched_ring_score)
> + atomic_dec(ctx->entities[i][j]->sched_ring_score);
> +
> drm_sched_entity_destroy(&ctx->entities[i][j]->entity);
> }
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
> index 090dfe86f75b..076a0e165ce0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
> @@ -39,6 +39,7 @@ struct amdgpu_ctx_entity {
> uint32_t hw_ip;
> uint64_t sequence;
> struct drm_sched_entity entity;
> + atomic_t *sched_ring_score;
> struct dma_fence *fences[];
> };
>
prev parent reply other threads:[~2025-09-05 14:33 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-22 13:43 Pierre-Eric Pelloux-Prayer
2025-08-22 13:43 ` [PATCH v1 2/2] drm/sched: limit sched score update to jobs change Pierre-Eric Pelloux-Prayer
2025-08-25 13:13 ` Philipp Stanner
2025-09-01 13:14 ` Pierre-Eric Pelloux-Prayer
2025-09-02 6:21 ` Philipp Stanner
2025-09-01 9:20 ` Tvrtko Ursulin
2025-09-05 13:39 ` Tomeu Vizoso
2025-09-26 8:20 ` Pierre-Eric Pelloux-Prayer
2025-09-26 8:24 ` Tvrtko Ursulin
2025-09-26 8:26 ` Pierre-Eric Pelloux-Prayer
2025-09-01 9:02 ` [PATCH v1 1/2] drm/amdgpu: increment share sched score on entity selection Tvrtko Ursulin
2025-09-03 8:48 ` Pierre-Eric Pelloux-Prayer
2025-09-05 14:33 ` Christian König [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=29d65aec-e709-4606-9513-8bbe9f05a40e@amd.com \
--to=christian.koenig@amd.com \
--cc=airlied@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pierre-eric.pelloux-prayer@amd.com \
--cc=simona@ffwll.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®