[PATCH] drm/amdgpu: only use kernel zone if need_dma32 is not required

Yang, Philip Philip.Yang at amd.com
Wed Jun 12 18:06:15 UTC 2019


That's kind of hack because dma32 zone is not needed, it has bad effect 
to trigger unnecessary eviction for KFDTest.BigBufStressTest. But 
ttm_bo_global_init->ttm_mem_global_init always create dma32 zone without 
accepting any parameter.

To avoid ttm_mem_global_alloc_page account to dma32 zone, another option 
is to add a new flag to ttm_operation_ctx->flags, that looks not good 
either.

Thanks,
Philip

On 2019-06-12 1:23 p.m., Kuehling, Felix wrote:
> TTM itself has some logic for need_dma32 and TTM_PAGE_FLAG_DMA32. I
> believe that should already handle this. need_dma32 is passed from
> amdgpu to ttm_bo_device_init to bdev->need_dma32. ttm_tt_create
> translates that to page_flags |= TTM_PAGE_FLAG_DMA32 and passes that to
> bdev->driver->ttm_tt_create. The two page allocators in ttm_page_alloc.c
> and ttm_page_alloc_dma.c check ttm->page_flags. Is that chain broken
> somewhere? Overriding glob->mem_glob->num_zones from amdgpu seems to be
> a bit of a hack.
> 
> Regards,
>     Felix
> 
> On 2019-06-12 8:13, Yang, Philip wrote:
>> TTM create two zones, kernel zone and dma32 zone for system memory. If
>> system memory address allocated is below 4GB, this account to dma32 zone
>> and will exhaust dma32 zone and trigger unnesssary TTM eviction.
>>
>> Patch "drm/ttm: Account for kernel allocations in kernel zone only" only
>> handle the allocation for acc_size, the system memory page allocation is
>> through ttm_mem_global_alloc_page which still account to dma32 zone if
>> page is below 4GB.
>>
>> Change-Id: I289b85d891b8f64a1422c42b1eab398098ab7ef7
>> Signed-off-by: Philip Yang <Philip.Yang at amd.com>
>> ---
>>    drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 ++++
>>    1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> index 2778ff63d97d..79bb9dfe617b 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> @@ -1686,6 +1686,10 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
>>    	}
>>    	adev->mman.initialized = true;
>>    
>> +	/* Only kernel zone (no dma32 zone) if device does not require dma32 */
>> +	if (!adev->need_dma32)
>> +		adev->mman.bdev.glob->mem_glob->num_zones = 1;
>> +
>>    	/* We opt to avoid OOM on system pages allocations */
>>    	adev->mman.bdev.no_retry = true;
>>    


More information about the amd-gfx mailing list