[Mesa-dev] [PATCH] swr: Limit memory held by defer deleted resources.
Ilia Mirkin
imirkin at alum.mit.edu
Sat Jul 1 14:39:52 UTC 2017
FWIW I added the exact same workaround in nouveau. I think I even also used 64:
https://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/drivers/nouveau/nouveau_fence.c#n270
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
On Fri, Jun 30, 2017 at 11:24 PM, Bruce Cherniak
<bruce.cherniak at intel.com> wrote:
> This patch limits the number of items on the fence work queue (the
> deferred deletion list) by submitting a sync fence when the queue size
> exceeds a threshold. This initiates deferred deletion of all resources
> on the list and decreases the total amount of memory held waiting for
> "deferred deletion".
>
> This resolves bug 101467 filed against swr for the piglit
> streaming-texture-leak test. For those running on smaller memory
> (16GB?) systems, this will prevent oom-killer.
>
> Thus far, we have not seen any real world applications that exhibit
> behavior like the streaming-texture-leak test; as any form of pipeline
> flush will trigger the defer queue and properly free any retained
> allocations. But, this addresses those as well.
>
> Cc: "17.1" <mesa-stable at lists.freedesktop.org>
> ---
> src/gallium/drivers/swr/swr_screen.cpp | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp
> index a80ec2adba..16a314c28a 100644
> --- a/src/gallium/drivers/swr/swr_screen.cpp
> +++ b/src/gallium/drivers/swr/swr_screen.cpp
> @@ -992,6 +992,12 @@ swr_resource_destroy(struct pipe_screen *p_screen, struct pipe_resource *pt)
> swr_fence_work_free(screen->flush_fence, spr->swr.pBaseAddress, true);
> swr_fence_work_free(screen->flush_fence,
> spr->secondary.pBaseAddress, true);
> +
> + /* If work queue grows too large, submit a fence to force queue to
> + * drain. This is mainly to decrease the amount of memory used by the
> + * piglit streaming-texture-leak test */
> + if (screen->pipe && swr_fence(screen->flush_fence)->work.count > 64)
> + swr_fence_submit(swr_context(screen->pipe), screen->flush_fence);
> }
>
> FREE(spr);
> --
> 2.11.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list