summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2020-12-08 10:06:52 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2020-12-13 12:01:30 +0000
commit47d1d7ff11665027156506bae46c15078c7f8db4 (patch)
tree99951838831a199bced659feb2f5fe6428d640c5
parent4bb895036e49dcdee7338e530b3cef9f95b51ab3 (diff)
i915/gem_shrink: Refactor allocation sizing based on available memory
Refactor the allocation such that we utilise just enough memory pressure to invoke the shrinker, and just enough processes to spread across the CPUs and contend on the shrinker. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--tests/i915/gem_shrink.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/tests/i915/gem_shrink.c b/tests/i915/gem_shrink.c
index 023db8c5..e8a814fe 100644
--- a/tests/i915/gem_shrink.c
+++ b/tests/i915/gem_shrink.c
@@ -426,6 +426,7 @@ igt_main
int num_processes = 0;
igt_fixture {
+ const int ncpus = sysconf(_SC_NPROCESSORS_ONLN);
uint64_t mem_size = intel_get_total_ram_mb();
int fd;
@@ -434,16 +435,16 @@ igt_main
/*
* Spawn enough processes to use all memory, but each only
- * uses half the available mappable aperture ~128MiB.
+ * uses half of the available per-cpu memory.
* Individually the processes would be ok, but en masse
* we expect the shrinker to start purging objects,
* and possibly fail.
*/
- alloc_size = gem_mappable_aperture_size(fd) / 2;
- num_processes = 1 + (mem_size / (alloc_size >> 20));
+ alloc_size = (mem_size + ncpus - 1) / ncpus / 2;
+ num_processes = ncpus + (mem_size / alloc_size);
- igt_info("Using %d processes and %'lluMiB per process\n",
- num_processes, (long long)(alloc_size >> 20));
+ igt_info("Using %d processes and %'"PRIu64"MiB per process\n",
+ num_processes, alloc_size);
intel_require_memory(num_processes, alloc_size,
CHECK_SWAP | CHECK_RAM);