[PATCH] drm/amdgpu: Adjust the VM size based on system memory size

Christian König christian.koenig at amd.com
Wed Aug 22 18:11:30 UTC 2018


Am 22.08.2018 um 19:40 schrieb Felix Kuehling:
> On 2018-08-22 02:55 AM, Christian König wrote:
>> Am 21.08.2018 um 23:45 schrieb Felix Kuehling:
> [snip]
>>> +    } else {
>>>> +        struct sysinfo si;
>>>> +        unsigned int phys_ram_gb;
>>>> +
>>>> +        /* Optimal VM size depends on the amount of physical
>>>> +         * RAM available. Underlying requirements and
>>>> +         * assumptions:
>>>> +         *
>>>> +         *  - Need to map system memory and VRAM from all GPUs
>>>> +         *     - VRAM from other GPUs not known here
>>>> +         *     - Assume VRAM <= system memory
>>>> +         *  - On GFX8 and older, VM space can be segmented for
>>>> +         *    different MTYPEs
>>>> +         *  - Need to allow room for fragmentation, guard pages etc.
>>>> +         */
>>>> +        si_meminfo(&si);
>>>> +        phys_ram_gb = ((uint64_t)si.totalram * si.mem_unit) >> 30;
>> Looks good to me, but I would make sure that round that up before
>> shifting it.
> Hmm, we used to round up. I just removed it because we were told it's
> not necessary.
>
> But I guess rounding up to the next power of two increases the available
> VM size without increasing page table size. So we should take it if we
> can get it for free. I'll reintroduce rounding up.

No, that wasn't what I meant. Rounding up to the next power of two is 
indeed not necessary.

What I meant is when the installed system memory is 3.9GB we only take 
into account 3GB here because we always truncate.

>>>> +        vm_size = min(max(phys_ram_gb * 3, min_vm_size), max_size);
>> Mhm, "phys_ram_gb * 3"? Maybe add a comment with the rational for that.
> Well, the long comment above was meant to justify the factor 3. Maybe I
> didn't make that clear enough. 1x is system memory itself, 2x is a wild
> guess of VRAM on all GPUs. 3x is room for a second aperture for MTYPE
> control, fragmentation and guard pages.

Ah! Yeah that wasn't obvious.

Christian.

>
> Regards,
>    Felix
>
>> Christian.
>>
>>>>        }
>>>>          adev->vm_manager.max_pfn = (uint64_t)vm_size << 18;
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
>>>> index 1162c2b..ab1d23e 100644
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
>>>> @@ -345,7 +345,7 @@ struct amdgpu_bo_va_mapping
>>>> *amdgpu_vm_bo_lookup_mapping(struct amdgpu_vm *vm,
>>>>    void amdgpu_vm_bo_trace_cs(struct amdgpu_vm *vm, struct
>>>> ww_acquire_ctx *ticket);
>>>>    void amdgpu_vm_bo_rmv(struct amdgpu_device *adev,
>>>>                  struct amdgpu_bo_va *bo_va);
>>>> -void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t
>>>> vm_size,
>>>> +void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t
>>>> min_vm_size,
>>>>                   uint32_t fragment_size_default, unsigned max_level,
>>>>                   unsigned max_bits);
>>>>    int amdgpu_vm_ioctl(struct drm_device *dev, void *data, struct
>>>> drm_file *filp);
>>> _______________________________________________
>>> amd-gfx mailing list
>>> amd-gfx at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx



More information about the amd-gfx mailing list