All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Brooks <john-xq/Ko7C6e2Bl57MIdRCFDg@public.gmane.org>
To: "Michel Dänzer" <michel-otUistvHUpPR7s880joybQ@public.gmane.org>
Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: Re: [PATCH 3/3] drm/amdgpu: Try evicting from CPU visible to invisible VRAM first
Date: Thu, 18 May 2017 15:43:46 +0000	[thread overview]
Message-ID: <20170518154346.GA5730@kitsune.fastquake.com> (raw)
In-Reply-To: <20170518090809.15916-4-michel-otUistvHUpPR7s880joybQ@public.gmane.org>

On Thu, May 18, 2017 at 06:08:09PM +0900, Michel Dänzer wrote:
> From: Michel Dänzer <michel.daenzer@amd.com>
> 
> In exchange, move BOs with the AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED
> flag set to CPU visible VRAM with more force.
> 
> For other BOs, this gives another chance to stay in VRAM if they
> happened to lie in the CPU visible part and another BO needs to go
> there.
> 
> This should allow BOs to stay in VRAM longer in some cases.
> 
> Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 19 ++++++++++++++-----
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    | 27 +++++++++++++++++++++++++++
>  2 files changed, 41 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index 41ee353b22c8..d45c2325c61a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -963,11 +963,20 @@ int amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object *bo)
>  					 AMDGPU_GEM_DOMAIN_GTT);
>  	abo->placements[0].lpfn = adev->mc.visible_vram_size >> PAGE_SHIFT;
>  
> -	/* Only set GTT as busy placement; if there is no space in CPU visible
> -	 * VRAM, move this BO to GTT instead of evicting other BOs
> -	 */
> -	abo->placement.busy_placement = &abo->placements[1];
> -	abo->placement.num_busy_placement = 1;
> +	if (abo->flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
> +		/* Only set VRAM as normal placement; if there is no space in
> +		 * CPU visible VRAM, evict other BOs, only fall back to GTT as
> +		 * last resort
> +		 */
> +		abo->placement.num_placement = 1;
> +	} else {
> +		/* Only set GTT as busy placement; if there is no space in CPU
> +		 * visible VRAM, move this BO to GTT instead of evicting other
> +		 * BOs
> +		 */
> +		abo->placement.busy_placement = &abo->placements[1];
> +		abo->placement.num_busy_placement = 1;
> +	}
>  
>  	return ttm_bo_validate(bo, &abo->placement, false, false);
>  }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 57789b860768..d5ed85026542 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -206,7 +206,34 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo,
>  		    adev->mman.buffer_funcs_ring &&
>  		    adev->mman.buffer_funcs_ring->ready == false) {
>  			amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_CPU);
> +		} else if (adev->mc.visible_vram_size < adev->mc.real_vram_size) {
> +			unsigned fpfn = adev->mc.visible_vram_size >> PAGE_SHIFT;
> +			struct drm_mm_node *node = bo->mem.mm_node;
> +			unsigned long pages_left;
> +
> +			for (pages_left = bo->mem.num_pages;
> +			     pages_left;
> +			     pages_left -= node->size, node++) {
> +				if (node->start < fpfn)
> +					break;
> +			}
> +
> +			if (!pages_left)
> +				goto gtt;
> +
> +			/* Try evicting to the CPU inaccessible part of VRAM
> +			 * first, but only set GTT as busy placement, so this
> +			 * BO will be evicted to GTT rather than causing other
> +			 * BOs to be evicted from VRAM
> +			 */
> +			amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_VRAM |
> +							 AMDGPU_GEM_DOMAIN_GTT);
> +			abo->placements[0].fpfn = fpfn;
> +			abo->placements[0].lpfn = 0;
> +			abo->placement.busy_placement = &abo->placements[1];

Are you sure you want to hardcode the placements index? It'll be dependent on
the order set up in amdgpu_ttm_placement_init.

> +			abo->placement.num_busy_placement = 1;
>  		} else {
> +gtt:
>  			amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_GTT);
>  			/* Set an upper limit to force directly allocating
>  			 * address space for the BO.
> -- 
> 2.11.0
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx

--
John Brooks
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

  parent reply	other threads:[~2017-05-18 15:43 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-18  9:08 [PATCH 0/3] drm/amdgpu: Tweaks for high pressure on CPU visible VRAM Michel Dänzer
     [not found] ` <20170518090809.15916-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-18  9:08   ` [PATCH 1/3] drm/amdgpu: Drop useless loops for placement restrictions Michel Dänzer
     [not found]     ` <20170518090809.15916-2-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-18  9:17       ` Christian König
     [not found]         ` <6c3e7a55-d3b0-fc3f-39f4-e85934119e29-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2017-05-18  9:47           ` Michel Dänzer
2017-05-18  9:08   ` [PATCH 2/3] drm/amdgpu: Don't evict other BOs from VRAM for page faults Michel Dänzer
2017-05-18  9:08   ` [PATCH 3/3] drm/amdgpu: Try evicting from CPU visible to invisible VRAM first Michel Dänzer
     [not found]     ` <20170518090809.15916-4-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-18 15:43       ` John Brooks [this message]
     [not found]         ` <20170518154346.GA5730-6hIufAJW0g7Gr8qjsLp7YGXnswh1EIUO@public.gmane.org>
2017-05-19  1:20           ` Michel Dänzer
     [not found]             ` <b65d8565-47e6-39d7-12f7-f7b60cf9787e-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-19  1:43               ` John Brooks
     [not found]                 ` <20170519014314.GA29857-6hIufAJW0g7Gr8qjsLp7YGXnswh1EIUO@public.gmane.org>
2017-05-19  1:50                   ` Michel Dänzer
2017-05-19  3:04   ` [PATCH 0/3] drm/amdgpu: Tweaks for high pressure on CPU visible VRAM John Brooks
     [not found]     ` <1495163086-4747-1-git-send-email-john-xq/Ko7C6e2Bl57MIdRCFDg@public.gmane.org>
2017-05-19  3:04       ` [PATCH] drm/amdgpu: Place new CPU-accessbile BOs in GTT if visible VRAM is full John Brooks
     [not found]         ` <1495163086-4747-2-git-send-email-john-xq/Ko7C6e2Bl57MIdRCFDg@public.gmane.org>
2017-05-19  5:37           ` zhoucm1
2017-05-19  7:03           ` Michel Dänzer
     [not found]             ` <b2ecb0f8-cd1b-9a00-6ba6-082674fde776-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-19 15:52               ` Marek Olšák
     [not found]                 ` <CAAxE2A7DjWR8x1WYE=Fgqn7vZ7hyRdQHA3wKo_HcNdZ14KdmkA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-20  1:22                   ` Michel Dänzer
2017-05-19 19:23               ` John Brooks
     [not found]                 ` <20170519192352.GA21642-6hIufAJW0g7Gr8qjsLp7YGXnswh1EIUO@public.gmane.org>
2017-05-20  1:27                   ` Michel Dänzer
     [not found]                     ` <d0535946-a10d-3b77-0d94-c52098dce021-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-20  3:21                       ` John Brooks
     [not found]                         ` <20170520032101.GA16371-6hIufAJW0g7Gr8qjsLp7YGXnswh1EIUO@public.gmane.org>
2017-05-22  1:30                           ` Michel Dänzer
2017-05-19 15:24       ` [PATCH 0/3] drm/amdgpu: Tweaks for high pressure on CPU visible VRAM Marek Olšák
     [not found]         ` <CAAxE2A6pcm8EiXDRO2kO64TWJRR4BVrzbpiVrLdzhh3uERzTUg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-19 15:27           ` John Brooks
     [not found]             ` <20170519152732.GA11484-6hIufAJW0g7Gr8qjsLp7YGXnswh1EIUO@public.gmane.org>
2017-05-19 15:47               ` Marek Olšák
     [not found]                 ` <CAAxE2A77Yu9c02Mu-wK3HD_gAKvPbN8q7aEtHcxrcOUhGG4Pfw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-19 15:49                   ` Marek Olšák
2017-05-19 16:14   ` Marek Olšák
     [not found]     ` <CAAxE2A65deE+hue7oPMQ+=K5s8TEGZE+bJMNVOdp=LQuq_RnMQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-20  1:26       ` Michel Dänzer
     [not found]         ` <CAAxE2A6ZiNSswhArstqHpYnm30ieoDZj=j_-aFvZz1_ByXLOGA@mail.gmail.com>
     [not found]           ` <CAAxE2A4zdgFRh-GDqyDRrXmEWqjSrkfCo=Z41hfo-UNY0E5FhA@mail.gmail.com>
     [not found]             ` <CAAxE2A4zdgFRh-GDqyDRrXmEWqjSrkfCo=Z41hfo-UNY0E5FhA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-20  9:26               ` Marek Olšák
     [not found]                 ` <CAAxE2A67T3Mhw68thNewFtcdua3ufSP-FDX_RN153x-aLKUh1Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-20  9:35                   ` Michel Dänzer
2017-05-22 10:00                   ` Michel Dänzer
     [not found]                     ` <7649341f-6407-1a12-9674-fb65076125fc-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-22 10:09                       ` Marek Olšák
     [not found]                         ` <CAAxE2A446KFb+CiwdZusvdgRSfQS8jLgsCy4K7L0_tc00pvWKA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-22 18:20                           ` John Brooks
2017-05-23  0:45                           ` Michel Dänzer
     [not found]                             ` <c3dfa73a-e0c1-c6e9-0264-3c52e444c297-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-23 10:38                               ` Marek Olšák
     [not found]                                 ` <CAAxE2A7tKvvmZ+qf8f06FJODWNLgHcv-XPiJJgLana-PcXBR_g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-24  7:56                                   ` Michel Dänzer
     [not found]                                     ` <f04e8239-e8cb-1c6c-a0ae-581facadb3cf-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-24 11:03                                       ` Marek Olšák
     [not found]                                         ` <CAAxE2A5uha-MPx4B=ZeW9kf2qQXOTNcK7sxMJDtEk54S=us47g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-24 11:27                                           ` Christian König
     [not found]                                             ` <eafd4ca6-fbbf-2bb4-be97-16f54fe402dd-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2017-05-25  3:31                                               ` Michel Dänzer
     [not found]                                                 ` <0535f00f-9095-6209-72e9-e6bb46569a63-otUistvHUpPR7s880joybQ@public.gmane.org>
2017-05-25 11:24                                                   ` Marek Olšák
     [not found]                                                     ` <CAAxE2A6YFjK1VPuxW=HROqKX+-ejvVJ=YneULp+cDkj033YAbA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-05-26  0:46                                                       ` Michel Dänzer

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=20170518154346.GA5730@kitsune.fastquake.com \
    --to=john-xq/ko7c6e2bl57midrcfdg@public.gmane.org \
    --cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=michel-otUistvHUpPR7s880joybQ@public.gmane.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.