panfrost: Try to evict unused BOs from the cache
authorBoris Brezillon <boris.brezillon@collabora.com>
Thu, 7 Nov 2019 08:32:31 +0000 (09:32 +0100)
committerBoris Brezillon <boris.brezillon@collabora.com>
Fri, 8 Nov 2019 10:26:47 +0000 (11:26 +0100)
commitee82f9f07e16cc6d8134f70496731f1743423834
tree4ec9c826fe7f85d9820aba6466578a70b2c3af0c
parent25059cc41ff17ae2b04e44fef2c1d4863bc104c2
panfrost: Try to evict unused BOs from the cache

The panfrost BO cache can only grow since all newly allocated BOs are
returned to the cache (unless they've been exported).

With the MADVISE ioctl that's not a big issue because the kernel can
come and reclaim this memory, but MADVISE will only be available on 5.4
kernels. This means an app can currently allocate a lot memory without
ever releasing it, leading to some situations where the OOM-killer kicks
in and kills the app (or even worse, kills another process consuming
more memory than the GL app) to get some of this memory back.

Let's try to limit the amount of BOs we keep in the cache by evicting
entries that have not been used for more than one second (if the app
stopped allocating BOs of this size, it's likely to not allocate
similar BOs in a near future).

This solution is based on the VC4/V3D implementation.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/pan_bo.c
src/gallium/drivers/panfrost/pan_bo.h
src/gallium/drivers/panfrost/pan_screen.c
src/gallium/drivers/panfrost/pan_screen.h