[PATCH 1/3] drm/amdgpu: add AMDGPU_GEM_CREATE_DISCARDABLE

Christian König ckoenig.leichtzumerken at gmail.com
Fri May 13 11:24:27 UTC 2022


Well the best placement is guaranteed as long as the application doesn't 
do any nonsense (e.g. trying to allocate a buffer larger than available 
VRAM).

The VM_ALWAYS_VALID flag doesn't affect any of that handling.

Regards,
Christian.

Am 13.05.22 um 00:17 schrieb Marek Olšák:
> Would it be better to set the VM_ALWAYS_VALID flag to have a greater 
> guarantee that the best placement will be chosen?
>
> See, the main feature is getting the best placement, not being 
> discardable. The best placement is a hw design requirement due to 
> using memory for uses that are expected to have performance similar to 
> onchip SRAMs. We need to make sure the best placement is guaranteed if 
> it's VRAM.
>
> Marek
>
> On Thu., May 12, 2022, 03:26 Christian König, 
> <ckoenig.leichtzumerken at gmail.com> wrote:
>
>     Am 12.05.22 um 00:06 schrieb Marek Olšák:
>>     3rd question: Is it worth using this on APUs?
>
>     It makes memory management somewhat easier when we are really OOM.
>
>     E.g. it should also work for GTT allocations and when the core
>     kernel says "Hey please free something up or I will start the
>     OOM-killer" it's something we can easily throw away.
>
>     Not sure how many of those buffers we have, but marking everything
>     which is temporary with that flag is probably a good idea.
>
>>
>>     Thanks,
>>     Marek
>>
>>     On Wed, May 11, 2022 at 5:58 PM Marek Olšák <maraeo at gmail.com> wrote:
>>
>>         Will the kernel keep all discardable buffers in VRAM if VRAM
>>         is not overcommitted by discardable buffers, or will other
>>         buffers also affect the placement of discardable buffers?
>>
>
>     Regarding the eviction pressure the buffers will be handled like
>     any other buffer, but instead of preserving the content it is just
>     discarded on eviction.
>
>>
>>         Do evictions deallocate the buffer, or do they keep an
>>         allocation in GTT and only the copy is skipped?
>>
>
>     It really deallocates the backing store of the buffer, just keeps
>     a dummy page array around where all entries are NULL.
>
>     There is a patch set on the mailing list to make this a little bit
>     more efficient, but even using the dummy page array should only
>     have a few bytes overhead.
>
>     Regards,
>     Christian.
>
>>
>>         Thanks,
>>         Marek
>>
>>         On Wed, May 11, 2022 at 3:08 AM Marek Olšák
>>         <maraeo at gmail.com> wrote:
>>
>>             OK that sounds good.
>>
>>             Marek
>>
>>             On Wed, May 11, 2022 at 2:04 AM Christian König
>>             <ckoenig.leichtzumerken at gmail.com> wrote:
>>
>>                 Hi Marek,
>>
>>                 Am 10.05.22 um 22:43 schrieb Marek Olšák:
>>>                 A better flag name would be:
>>>                 AMDGPU_GEM_CREATE_BEST_PLACEMENT_OR_DISCARD
>>
>>                 A bit long for my taste and I think the best
>>                 placement is just a side effect.
>>
>>>
>>>                 Marek
>>>
>>>                 On Tue, May 10, 2022 at 4:13 PM Marek Olšák
>>>                 <maraeo at gmail.com> wrote:
>>>
>>>                     Does this really guarantee VRAM placement? The
>>>                     code doesn't say anything about that.
>>>
>>
>>                 Yes, see the code here:
>>
>>>
>>>                         diff --git
>>>                         a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>>>                         b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>>>                         index 8b7ee1142d9a..1944ef37a61e 100644
>>>                         --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>>>                         +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>>>                         @@ -567,6 +567,7 @@ int
>>>                         amdgpu_bo_create(struct amdgpu_device *adev,
>>>                                         bp->domain;
>>>                                 bo->allowed_domains =
>>>                         bo->preferred_domains;
>>>                                 if (bp->type != ttm_bo_type_kernel &&
>>>                         +           !(bp->flags &
>>>                         AMDGPU_GEM_CREATE_DISCARDABLE) &&
>>>                                     bo->allowed_domains ==
>>>                         AMDGPU_GEM_DOMAIN_VRAM)
>>>                         bo->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
>>>
>>
>>                 The only case where this could be circumvented is
>>                 when you try to allocate more than physically
>>                 available on an APU.
>>
>>                 E.g. you only have something like 32 MiB VRAM and
>>                 request 64 MiB, then the GEM code will catch the
>>                 error and fallback to GTT (IIRC).
>>
>>                 Regards,
>>                 Christian.
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20220513/2a3a7678/attachment-0001.htm>


More information about the amd-gfx mailing list