All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian König" <deathsimple@vodafone.de>
To: Alex Deucher <alexdeucher@gmail.com>
Cc: Maling list - DRI developers <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH 1/2] drm/amdgpu: group BOs by log2 of the size on the LRU
Date: Thu, 14 Apr 2016 16:25:08 +0200	[thread overview]
Message-ID: <570FA844.4010103@vodafone.de> (raw)
In-Reply-To: <CADnq5_NnPJ+EnCSE-ujqJ1y3=kvzRuqDUU0n0wQYRDRjag_Wvw@mail.gmail.com>

Am 14.04.2016 um 16:23 schrieb Alex Deucher:
> On Thu, Apr 14, 2016 at 8:54 AM, Christian König
> <deathsimple@vodafone.de> wrote:
>> From: Christian König <christian.koenig@amd.com>
>>
>> This allows us to have small BOs on the LRU before big ones.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
> Have you done any benchmarking to see how much this helps when there
> is memory contention?

Still working on this. Marek could you help with that? You usually have 
the Unigin benchmarks ready at hand.

Christian.

>
> For the series:
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu.h     | 11 ++++++
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 59 +++++++++++++++++++++++++++++++--
>>   2 files changed, 68 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> index c4a21c6..7b90323 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>> @@ -391,6 +391,14 @@ unsigned amdgpu_fence_count_emitted(struct amdgpu_ring *ring);
>>   /*
>>    * TTM.
>>    */
>> +
>> +#define AMDGPU_TTM_LRU_SIZE    20
>> +
>> +struct amdgpu_mman_lru {
>> +       struct list_head                *lru[TTM_NUM_MEM_TYPES];
>> +       struct list_head                *swap_lru;
>> +};
>> +
>>   struct amdgpu_mman {
>>          struct ttm_bo_global_ref        bo_global_ref;
>>          struct drm_global_reference     mem_global_ref;
>> @@ -408,6 +416,9 @@ struct amdgpu_mman {
>>          struct amdgpu_ring                      *buffer_funcs_ring;
>>          /* Scheduler entity for buffer moves */
>>          struct amd_sched_entity                 entity;
>> +
>> +       /* custom LRU management */
>> +       struct amdgpu_mman_lru                  log2_size[AMDGPU_TTM_LRU_SIZE];
>>   };
>>
>>   int amdgpu_copy_buffer(struct amdgpu_ring *ring,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> index fefaa9b..b58a445 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> @@ -910,6 +910,50 @@ uint32_t amdgpu_ttm_tt_pte_flags(struct amdgpu_device *adev, struct ttm_tt *ttm,
>>          return flags;
>>   }
>>
>> +static void amdgpu_ttm_lru_removal(struct ttm_buffer_object *tbo)
>> +{
>> +       struct amdgpu_device *adev = amdgpu_get_adev(tbo->bdev);
>> +       unsigned i;
>> +
>> +       for (i = 0; i < AMDGPU_TTM_LRU_SIZE; ++i) {
>> +               struct amdgpu_mman_lru *lru = &adev->mman.log2_size[i];
>> +
>> +               if (&tbo->lru == lru->lru[tbo->mem.mem_type])
>> +                       lru->lru[tbo->mem.mem_type] = tbo->lru.prev;
>> +
>> +               if (&tbo->swap == lru->swap_lru)
>> +                       lru->swap_lru = tbo->swap.prev;
>> +       }
>> +}
>> +
>> +static struct amdgpu_mman_lru *amdgpu_ttm_lru(struct ttm_buffer_object *tbo)
>> +{
>> +       struct amdgpu_device *adev = amdgpu_get_adev(tbo->bdev);
>> +       unsigned log2_size = min(ilog2(tbo->num_pages), AMDGPU_TTM_LRU_SIZE);
>> +
>> +       return &adev->mman.log2_size[log2_size];
>> +}
>> +
>> +static struct list_head *amdgpu_ttm_lru_tail(struct ttm_buffer_object *tbo)
>> +{
>> +       struct amdgpu_mman_lru *lru = amdgpu_ttm_lru(tbo);
>> +       struct list_head *res = lru->lru[tbo->mem.mem_type];
>> +
>> +       lru->lru[tbo->mem.mem_type] = &tbo->lru;
>> +
>> +       return res;
>> +}
>> +
>> +static struct list_head *amdgpu_ttm_swap_lru_tail(struct ttm_buffer_object *tbo)
>> +{
>> +       struct amdgpu_mman_lru *lru = amdgpu_ttm_lru(tbo);
>> +       struct list_head *res = lru->swap_lru;
>> +
>> +       lru->swap_lru = &tbo->swap;
>> +
>> +       return res;
>> +}
>> +
>>   static struct ttm_bo_driver amdgpu_bo_driver = {
>>          .ttm_tt_create = &amdgpu_ttm_tt_create,
>>          .ttm_tt_populate = &amdgpu_ttm_tt_populate,
>> @@ -923,12 +967,14 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
>>          .fault_reserve_notify = &amdgpu_bo_fault_reserve_notify,
>>          .io_mem_reserve = &amdgpu_ttm_io_mem_reserve,
>>          .io_mem_free = &amdgpu_ttm_io_mem_free,
>> -       .lru_tail = &ttm_bo_default_lru_tail,
>> -       .swap_lru_tail = &ttm_bo_default_swap_lru_tail,
>> +       .lru_removal = &amdgpu_ttm_lru_removal,
>> +       .lru_tail = &amdgpu_ttm_lru_tail,
>> +       .swap_lru_tail = &amdgpu_ttm_swap_lru_tail,
>>   };
>>
>>   int amdgpu_ttm_init(struct amdgpu_device *adev)
>>   {
>> +       unsigned i, j;
>>          int r;
>>
>>          r = amdgpu_ttm_global_init(adev);
>> @@ -946,6 +992,15 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
>>                  DRM_ERROR("failed initializing buffer object driver(%d).\n", r);
>>                  return r;
>>          }
>> +
>> +       for (i = 0; i < AMDGPU_TTM_LRU_SIZE; ++i) {
>> +               struct amdgpu_mman_lru *lru = &adev->mman.log2_size[i];
>> +
>> +               for (j = 0; j < TTM_NUM_MEM_TYPES; ++j)
>> +                       lru->lru[j] = &adev->mman.bdev.man[j].lru;
>> +               lru->swap_lru = &adev->mman.bdev.glob->swap_lru;
>> +       }
>> +
>>          adev->mman.initialized = true;
>>          r = ttm_bo_init_mm(&adev->mman.bdev, TTM_PL_VRAM,
>>                                  adev->mc.real_vram_size >> PAGE_SHIFT);
>> --
>> 2.5.0
>>

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2016-04-14 14:25 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-14 12:54 [PATCH 1/2] drm/amdgpu: group BOs by log2 of the size on the LRU Christian König
2016-04-14 12:54 ` [PATCH 2/2] drm/amdgpu: remove sorting of CS BOs Christian König
2016-04-15  5:21   ` Ayyappa Ch
2016-04-14 14:23 ` [PATCH 1/2] drm/amdgpu: group BOs by log2 of the size on the LRU Alex Deucher
2016-04-14 14:25   ` Christian König [this message]
2016-04-14 15:53     ` Christian König

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=570FA844.4010103@vodafone.de \
    --to=deathsimple@vodafone.de \
    --cc=alexdeucher@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.