Mesa (master): swr: Limit memory held by defer deleted resources.

Tim Rowley torowley at kemper.freedesktop.org
Sun Jul 2 22:40:10 UTC 2017


Module: Mesa
Branch: master
Commit: 32c1a54bd01465e77a8e26b9cc8d2487b31509c5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=32c1a54bd01465e77a8e26b9cc8d2487b31509c5

Author: Bruce Cherniak <bruce.cherniak at intel.com>
Date:   Fri Jun 30 22:24:46 2017 -0500

swr: Limit memory held by defer deleted resources.

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>

Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

---

 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 b7f06c0719..53b5dadec9 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);




More information about the mesa-commit mailing list