[PATCH] drm/amdgpu: set sched_hw_submission higher for KIQ (v2)

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

 



As noted in the otehr thread we could set it to 256 as well and still 
only use one page, but 16 is fine with me as well.

Patch is Reviewed-by: Christian König <christian.koenig at amd.com>

Regards,
Christian.

Am 23.08.2017 um 04:25 schrieb Felix Kuehling:
> This change is Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
>
>
> On 2017-08-22 09:52 PM, Alex Deucher wrote:
>> KIQ doesn't really use the GPU scheduler.  The base
>> drivers generally use the KIQ ring directly rather than
>> submitting IBs.  However, amdgpu_sched_hw_submission
>> (which defaults to 2) limits the number of outstanding
>> fences to 2.  KFD uses the KIQ for TLB flushes and the
>> 2 fence limit hurts performance when there are several KFD
>> processes running.
>>
>> v2: move some expressions to one line
>>      change KIQ sched_hw_submission to at least 16
>>
>> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 16 ++++++++++++----
>>   1 file changed, 12 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
>> index 6c5646b..7c251ff 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
>> @@ -170,6 +170,16 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
>>   		     unsigned irq_type)
>>   {
>>   	int r;
>> +	int sched_hw_submission = amdgpu_sched_hw_submission;
>> +
>> +	/* Set the hw submission limit higher for KIQ because
>> +	 * it's used for a number of gfx/compute tasks by both
>> +	 * KFD and KGD which may have outstanding fences and
>> +	 * it doesn't really use the gpu scheduler anyway;
>> +	 * KIQ tasks get submitted directly to the ring.
>> +	 */
>> +	if (ring->funcs->type == AMDGPU_RING_TYPE_KIQ)
>> +		sched_hw_submission = max(sched_hw_submission, 16);
>>   
>>   	if (ring->adev == NULL) {
>>   		if (adev->num_rings >= AMDGPU_MAX_RINGS)
>> @@ -178,8 +188,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
>>   		ring->adev = adev;
>>   		ring->idx = adev->num_rings++;
>>   		adev->rings[ring->idx] = ring;
>> -		r = amdgpu_fence_driver_init_ring(ring,
>> -			amdgpu_sched_hw_submission);
>> +		r = amdgpu_fence_driver_init_ring(ring, sched_hw_submission);
>>   		if (r)
>>   			return r;
>>   	}
>> @@ -218,8 +227,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
>>   		return r;
>>   	}
>>   
>> -	ring->ring_size = roundup_pow_of_two(max_dw * 4 *
>> -					     amdgpu_sched_hw_submission);
>> +	ring->ring_size = roundup_pow_of_two(max_dw * 4 * sched_hw_submission);
>>   
>>   	ring->buf_mask = (ring->ring_size / 4) - 1;
>>   	ring->ptr_mask = ring->funcs->support_64bit_ptrs ?
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux