[PATCH] drm/amdkfd: Add VRAM accounting for SVM migration

Felix Kuehling felix.kuehling at amd.com
Fri Apr 19 19:45:34 UTC 2024


On 2024-04-19 12:23, Mukul Joshi wrote:
> Do VRAM accounting when doing migrations to vram to make sure
> there is enough available VRAM and migrating to VRAM doesn't evict
> other possible non-unified memory BOs. If migrating to VRAM fails,
> driver can fall back to using system memory seamlessly.
>
> Signed-off-by: Mukul Joshi <mukul.joshi at amd.com>

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


> ---
>   drivers/gpu/drm/amd/amdkfd/kfd_migrate.c | 16 +++++++++++++++-
>   drivers/gpu/drm/amd/amdkfd/kfd_svm.c     |  2 +-
>   2 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
> index bdc01ca9609a..a6bfc00c0310 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c
> @@ -509,10 +509,19 @@ svm_migrate_ram_to_vram(struct svm_range *prange, uint32_t best_loc,
>   	start = start_mgr << PAGE_SHIFT;
>   	end = (last_mgr + 1) << PAGE_SHIFT;
>   
> +	r = amdgpu_amdkfd_reserve_mem_limit(node->adev,
> +					prange->npages * PAGE_SIZE,
> +					KFD_IOC_ALLOC_MEM_FLAGS_VRAM,
> +					node->xcp ? node->xcp->id : 0);
> +	if (r) {
> +		dev_dbg(node->adev->dev, "failed to allocate VRAM, size exceeds VRAM limit\n", r);
> +		return -ENOSPC;
> +	}
> +
>   	r = svm_range_vram_node_new(node, prange, true);
>   	if (r) {
>   		dev_dbg(node->adev->dev, "fail %ld to alloc vram\n", r);
> -		return r;
> +		goto out;
>   	}
>   	ttm_res_offset = (start_mgr - prange->start + prange->offset) << PAGE_SHIFT;
>   
> @@ -545,6 +554,11 @@ svm_migrate_ram_to_vram(struct svm_range *prange, uint32_t best_loc,
>   		svm_range_vram_node_free(prange);
>   	}
>   
> +out:
> +	amdgpu_amdkfd_unreserve_mem_limit(node->adev,
> +					prange->npages * PAGE_SIZE,
> +					KFD_IOC_ALLOC_MEM_FLAGS_VRAM,
> +					node->xcp ? node->xcp->id : 0);
>   	return r < 0 ? r : 0;
>   }
>   
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> index f7d75b432cc6..bfab16b43fec 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
> @@ -3426,7 +3426,7 @@ svm_range_trigger_migration(struct mm_struct *mm, struct svm_range *prange,
>   				mm, KFD_MIGRATE_TRIGGER_PREFETCH);
>   	*migrated = !r;
>   
> -	return r;
> +	return 0;
>   }
>   
>   int svm_range_schedule_evict_svm_bo(struct amdgpu_amdkfd_fence *fence)


More information about the amd-gfx mailing list