[PATCH] CHROMIUM: drm/i915: Don't evict bound object in the shrinker

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

 



From: Stéphane Marchesin <marcheu@xxxxxxxxxxxx>

Before swapping, the shrinker gets called on all drivers to try
and reclaim some memory before resorting to disk access. For
i915, the shrinker will eventually try to move objects out of
the GTT to make them swappable. However when this happens too
often, this will have two negative effects:

- once we have exhausted all the purgeable objects, the
  remaining objects will start bouncing in and out of the GTT
  as the rendering drags them in and the shrinker pulls them out

- the i915 shrinker needs to wait on the CPU for the GPU to
  complete pending rendering, which kills all asynchronicity

Those two things will slow down the system significantly as soon
as we start hitting the shrinker. So in this patch, we change
the shrinker to stop evicting in-use GTT objects. This avoids
both issues.

BUG=none
TEST=compiles and runs, seems to behave better under memory pressure

Change-Id: Iadb3c28575aae015f0f4b7c16f02e1e7ec6ef95a
Reviewed-on: https://gerrit.chromium.org/gerrit/57367
Reviewed-by: Luigi Semenzato <semenzato@xxxxxxxxxxxx>
Tested-by: Stéphane Marchesin <marcheu@xxxxxxxxxxxx>
Commit-Queue: Stéphane Marchesin <marcheu@xxxxxxxxxxxx>
---
 drivers/gpu/drm/i915/i915_gem.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index de45b60..3a72002 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4402,8 +4402,14 @@ i915_gem_inactive_shrink(struct shrinker *shrinker, struct shrink_control *sc)
 		if (nr_to_scan > 0)
 			nr_to_scan -= __i915_gem_shrink(dev_priv, nr_to_scan,
 							false);
-		if (nr_to_scan > 0)
-			i915_gem_shrink_all(dev_priv);
+
+		/* We don't want to shrink all objects. When the shrinker is
+		 * called too often, this causes bouncing of GEM objects in
+		 * and out of the GTT, as well as GPU synchronization which
+		 * slows the system to a crawl.
+		 */
+		/*if (nr_to_scan > 0)
+			i915_gem_shrink_all(dev_priv);*/
 	}
 
 	cnt = 0;
-- 
1.8.3.2

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx





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