[PATCH 2/2] drm/amdgpu: Pessimistic availability based on rounded up allocations

Felix Kuehling felix.kuehling at amd.com
Fri Jul 29 14:29:56 UTC 2022


Your patches are missing Signed-off-by lines. If you use "git commit 
-s", git should add those automatically for your convenience. Other than 
that, the patches look good to me. With Signed-off-by added, the series is

Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>


Am 2022-07-28 um 23:16 schrieb Daniel Phillips:
> Seperately accumulate a statistic of rounded up allocations to use
> to report availability, with a view to increasing the likelihood a
> buffer object can be successfully allocated at exactly the size
> reported by the availability API.
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h       | 1 +
>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 4 +++-
>   2 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> index 73bf8b5f2aa9..781274be5f27 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> @@ -96,6 +96,7 @@ struct amdgpu_amdkfd_fence {
>   struct amdgpu_kfd_dev {
>   	struct kfd_dev *dev;
>   	uint64_t vram_used;
> +	uint64_t vram_used_aligned;
>   	bool init_complete;
>   	struct work_struct reset_work;
>   };
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> index 014a594899fb..e5ea897f56bc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> @@ -181,6 +181,7 @@ static int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
>   	 * memory, TTM memory and GPU memory as computed above
>   	 */
>   	adev->kfd.vram_used += vram_needed;
> +	adev->kfd.vram_used_aligned += ALIGN(vram_needed, VRAM_AVAILABLITY_ALIGN);
>   	kfd_mem_limit.system_mem_used += system_mem_needed;
>   	kfd_mem_limit.ttm_mem_used += ttm_mem_needed;
>   
> @@ -199,6 +200,7 @@ static void unreserve_mem_limit(struct amdgpu_device *adev,
>   		kfd_mem_limit.ttm_mem_used -= size;
>   	} else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
>   		adev->kfd.vram_used -= size;
> +		adev->kfd.vram_used_aligned -= ALIGN(size, VRAM_AVAILABLITY_ALIGN);
>   	} else if (alloc_flag & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR) {
>   		kfd_mem_limit.system_mem_used -= size;
>   	} else if (!(alloc_flag &
> @@ -1644,7 +1646,7 @@ size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev)
>   	size_t available;
>   	spin_lock(&kfd_mem_limit.mem_limit_lock);
>   	available = adev->gmc.real_vram_size
> -		- adev->kfd.vram_used
> +		- adev->kfd.vram_used_aligned
>   		- atomic64_read(&adev->vram_pin_size)
>   		- reserved_for_pt;
>   	spin_unlock(&kfd_mem_limit.mem_limit_lock);


More information about the amd-gfx mailing list