On 2018å¹´08æ??02æ?¥ 14:01, Nayan Deshmukh wrote: > Hi David, > > On Thu, Aug 2, 2018 at 8:22 AM Zhou, David(ChunMing) > <David1.Zhou at amd.com <mailto:David1.Zhou at amd.com>> wrote: > > Another big question: > > I agree the general idea is good to balance scheduler load for > same ring family. > > But, when same entity job run on different scheduler, that means > the later job could be completed ahead of front, Right? > > Really good question. To avoid this senario we do not move an entity > which already has a job in the hardware queue. We only move entities > whose last_scheduled fence has been signalled which means that the > last submitted job of this entity has finished executing. Good handling I missed when reviewing them. Cheers, David Zhou > > Moving an entity which already has a job in the hardware queue will > hinder the dependency optimization that we are using and hence will > not anyway lead to a better performance. I have talked about the issue > in more detail here [1]. Please let me know if you have any more > doubts regarding this. > > Cheers, > Nayan > > [1] > http://ndesh26.github.io/gsoc/2018/06/14/GSoC-Update-A-Curious-Case-of-Dependency-Handling/ > > That will break fence design, later fence must be signaled after > front fence in same fence context. > > Anything I missed? > > Regards, > > David Zhou > > *From:* dri-devel <dri-devel-bounces at lists.freedesktop.org > <mailto:dri-devel-bounces at lists.freedesktop.org>> *On Behalf Of > *Nayan Deshmukh > *Sent:* Thursday, August 02, 2018 12:07 AM > *To:* Grodzovsky, Andrey <Andrey.Grodzovsky at amd.com > <mailto:Andrey.Grodzovsky at amd.com>> > *Cc:* amd-gfx at lists.freedesktop.org > <mailto:amd-gfx at lists.freedesktop.org>; Maling list - DRI > developers <dri-devel at lists.freedesktop.org > <mailto:dri-devel at lists.freedesktop.org>>; Koenig, Christian > <Christian.Koenig at amd.com <mailto:Christian.Koenig at amd.com>> > *Subject:* Re: [PATCH 3/4] drm/scheduler: add new function to get > least loaded sched v2 > > Yes, that is correct. > > Nayan > > On Wed, Aug 1, 2018, 9:05 PM Andrey Grodzovsky > <Andrey.Grodzovsky at amd.com <mailto:Andrey.Grodzovsky at amd.com>> wrote: > > Clarification question -Â if the run queues belong to different > schedulers they effectively point to different rings, > > it means we allow to move (reschedule) a drm_sched_entity from > one ring > to another - i assume that the idea int the first place, that > > you have a set of HW rings and you can utilize any of them for > your jobs > (like compute rings). Correct ? > > Andrey > > > On 08/01/2018 04:20 AM, Nayan Deshmukh wrote: > > The function selects the run queue from the rq_list with the > > least load. The load is decided by the number of jobs in a > > scheduler. > > > > v2: avoid using atomic read twice consecutively, instead store > >Â Â Â it locally > > > > Signed-off-by: Nayan Deshmukh <nayan26deshmukh at gmail.com > <mailto:nayan26deshmukh at gmail.com>> > > --- > >Â Â drivers/gpu/drm/scheduler/gpu_scheduler.c | 25 > +++++++++++++++++++++++++ > >Â Â 1 file changed, 25 insertions(+) > > > > diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c > b/drivers/gpu/drm/scheduler/gpu_scheduler.c > > index 375f6f7f6a93..fb4e542660b0 100644 > > --- a/drivers/gpu/drm/scheduler/gpu_scheduler.c > > +++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c > > @@ -255,6 +255,31 @@ static bool > drm_sched_entity_is_ready(struct drm_sched_entity *entity) > >Â Â Â Â return true; > >Â Â } > > > > +/** > > + * drm_sched_entity_get_free_sched - Get the rq from > rq_list with least load > > + * > > + * @entity: scheduler entity > > + * > > + * Return the pointer to the rq with least load. > > + */ > > +static struct drm_sched_rq * > > +drm_sched_entity_get_free_sched(struct drm_sched_entity > *entity) > > +{ > > +Â Â Â struct drm_sched_rq *rq = NULL; > > +Â Â Â unsigned int min_jobs = UINT_MAX, num_jobs; > > +Â Â Â int i; > > + > > +Â Â Â for (i = 0; i < entity->num_rq_list; ++i) { > > +Â Â Â Â Â Â Â num_jobs = > atomic_read(&entity->rq_list[i]->sched->num_jobs); > > +Â Â Â Â Â Â Â if (num_jobs < min_jobs) { > > +Â Â Â Â Â Â Â Â Â Â Â min_jobs = num_jobs; > > +Â Â Â Â Â Â Â Â Â Â Â rq = entity->rq_list[i]; > > +Â Â Â Â Â Â Â } > > +Â Â Â } > > + > > +Â Â Â return rq; > > +} > > + > >Â Â static void drm_sched_entity_kill_jobs_cb(struct dma_fence *f, > >Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â struct dma_fence_cb *cb) > >Â Â { > -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20180802/72e722c9/attachment.html>