Re: [PATCH] drm/scheduler: use hw_rq_count for load calculation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 18.10.18 um 17:37 schrieb :
> If the hardware queue for a scheduler is empty then we don't
> need to the shift the entities from their current scheduler
> as they are not getting scheduled because of some dependency.

That is most likely not a good idea. The scheduler might not have 
anything todo right now, but we can't guarantee that it will stay this way.

Instead when the number of jobs on a rq is identical we should select 
the one with the least entities on it.

This should make sure that we distribute the entities equally among the 
runqueues even when they are idle.

Christian.

>
> Signed-off-by: Nayan Deshmukh <nayan26deshmukh@xxxxxxxxx>
> ---
>   drivers/gpu/drm/scheduler/sched_entity.c | 14 ++++++++++++++
>   1 file changed, 14 insertions(+)
>
> diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
> index 3e22a54a99c2..4d18497d6ecf 100644
> --- a/drivers/gpu/drm/scheduler/sched_entity.c
> +++ b/drivers/gpu/drm/scheduler/sched_entity.c
> @@ -130,6 +130,12 @@ drm_sched_entity_get_free_sched(struct drm_sched_entity *entity)
>   	int i;
>   
>   	for (i = 0; i < entity->num_rq_list; ++i) {
> +		if (atomic_read(&entity->rq_list[i]->sched->hw_rq_count) <
> +			entity->rq_list[i]->sched->hw_submission_limit) {
> +			rq = entity->rq_list[i];
> +			break;
> +		}
> +
>   		num_jobs = atomic_read(&entity->rq_list[i]->sched->num_jobs);
>   		if (num_jobs < min_jobs) {
>   			min_jobs = num_jobs;
> @@ -470,6 +476,14 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
>   	if (spsc_queue_count(&entity->job_queue) || entity->num_rq_list <= 1)
>   		return;
>   
> +	/*
> +	 * We don't need to shift entity if the hardware
> +	 * queue of current scheduler is empty
> +	 */
> +	if (atomic_read(&entity->rq->sched->hw_rq_count) <
> +		entity->rq->sched->hw_submission_limit)
> +		return;
> +
>   	fence = READ_ONCE(entity->last_scheduled);
>   	if (fence && !dma_fence_is_signaled(fence))
>   		return;

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux