Plan: BO move throttling for visible VRAM evictions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 28.03.2017 um 08:00 schrieb Michel Dänzer:
> On 28/03/17 12:50 PM, zhoucm1 wrote:
>> On 2017å¹´03æ??28æ?¥ 10:40, Michel Dänzer wrote:
>>> On 27/03/17 04:53 PM, Zhou, David(ChunMing) wrote:
>>>> For APU special case, can we prevent eviction happening between VRAM
>>>> <----> GTT?
>>> We can, if we can close the performance gap between VRAM and GTT. We
>>> measured around 30% gap a while ago, though right now I'm only measuring
>>> ~5%, but the test system has slower RAM now (still dual channel though).
>> My impression VRAM and GTT have no much difference for APU case, if I'm
>> wrong, pls correct me.
> The Mesa patch below makes radeonsi use mostly GTT instead of mostly
> VRAM, and slows down Unigine Valley by about 5% on my desktop Kaveri.
> You can try it for yourself.

Additional to that you still need the stolen VRAM on APUs for page 
tables and DCE.

So we need to keep the eviction from VRAM to GTT enabled, but what we 
don't do is swapping them back in because Marek added the GTT flags on 
APUs as extra domain to look into.

In other word once BOs are removed from VRAM they are only swapped back 
in if the hardware needs it.

Regards,
Christian.

>
>
> diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c
> index da6f0206d7..47661cab76 100644
> --- a/src/gallium/drivers/radeon/r600_buffer_common.c
> +++ b/src/gallium/drivers/radeon/r600_buffer_common.c
> @@ -175,9 +175,11 @@ void r600_init_resource_fields(struct r600_common_screen *rscreen,
>           * placements even with a low amount of stolen VRAM.
>           */
>          if (!rscreen->info.has_dedicated_vram &&
> -           (rscreen->info.drm_major < 3 || rscreen->info.drm_minor < 6) &&
> -           res->domains == RADEON_DOMAIN_VRAM)
> -               res->domains = RADEON_DOMAIN_VRAM_GTT;
> +           res->domains == RADEON_DOMAIN_VRAM &&
> +           !(res->b.b.bind & PIPE_BIND_SCANOUT)) {
> +          res->domains = RADEON_DOMAIN_GTT;
> +          res->flags |= RADEON_FLAG_GTT_WC;
> +       }
>
>          if (rscreen->debug_flags & DBG_NO_WC)
>                  res->flags &= ~RADEON_FLAG_GTT_WC;
>
>
>



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux