diff options
author | Michał Winiarski <michal.winiarski@intel.com> | 2018-06-11 17:31:11 +0200 |
---|---|---|
committer | Michał Winiarski <michal.winiarski@intel.com> | 2018-06-13 12:43:23 +0200 |
commit | 30e501adedf2c89839ef1d654a0281155cfbc589 (patch) | |
tree | 7b44e7da62f132e5c4106a7569e77798df849803 /tests/drv_suspend.c | |
parent | e94ce40798e35d2e3c4494f50b617908066bbf8b (diff) |
lib: Extract mlock probing
We already have the routine we need in drv_suspend. Let's move it to lib
and use it in the mlocking tests. We can also make it a bit faster if we
tweak the initial step and initial amount.
(I think it's safe to assume that we should be able to lock 3/4
of RAM, this cuts the probe time on my 32G SKL - from ~530s to ~180s)
v2: Use available mem, amend step, also lock outside of fork,
early exit if the assumption is wrong (Chris)
Update the function name in doc (Ewelina)
v3: Total for pin, available for initial lock (Chris)
Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Ewelina Musial <ewelina.musial@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Ewelina Musial <ewelina.musial@intel.com>
Diffstat (limited to 'tests/drv_suspend.c')
-rw-r--r-- | tests/drv_suspend.c | 44 |
1 files changed, 11 insertions, 33 deletions
diff --git a/tests/drv_suspend.c b/tests/drv_suspend.c index 9a9ff200..b4212dca 100644 --- a/tests/drv_suspend.c +++ b/tests/drv_suspend.c @@ -163,52 +163,30 @@ test_sysfs_reader(bool hibernate) static void test_shrink(int fd, unsigned int mode) { - uint64_t *can_mlock, pin; + void *mem; + size_t size; gem_quiescent_gpu(fd); intel_purge_vm_caches(fd); - pin = (intel_get_total_ram_mb() + 1) << 20; - - igt_debug("Total memory %'"PRIu64" B (%'"PRIu64" MiB)\n", - pin, pin >> 20); - can_mlock = mmap(NULL, pin, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); - igt_require(can_mlock != MAP_FAILED); - - /* Lock all the system memory, forcing the driver into swap and OOM */ - for (uint64_t inc = 64 << 20; inc >= 4 << 10; inc >>= 1) { - igt_debug("Testing+ %'"PRIu64" B (%'"PRIu64" MiB)\n", - *can_mlock, *can_mlock >> 20); - - igt_fork(child, 1) { - for (uint64_t bytes = *can_mlock; - bytes <= pin; - bytes += inc) { - if (mlock(can_mlock, bytes)) - break; - - *can_mlock = bytes; - __sync_synchronize(); - } - } - __igt_waitchildren(); - } + size = intel_get_total_pinnable_mem(); + igt_require(size > 64 << 20); + size -= 64 << 20; - intel_purge_vm_caches(fd); + mem = mmap(NULL, size, PROT_READ, MAP_SHARED | MAP_ANON, -1, 0); - igt_require(*can_mlock > 64 << 20); - *can_mlock -= 64 << 20; + intel_purge_vm_caches(fd); igt_debug("Locking %'"PRIu64" B (%'"PRIu64" MiB)\n", - *can_mlock, *can_mlock >> 20); - igt_assert(!mlock(can_mlock, *can_mlock)); + size, size >> 20); + igt_assert(!mlock(mem, size)); igt_info("Locked %'"PRIu64" B (%'"PRIu64" MiB)\n", - *can_mlock, *can_mlock >> 20); + size, size >> 20); intel_purge_vm_caches(fd); igt_system_suspend_autoresume(mode, SUSPEND_TEST_NONE); - munmap(can_mlock, pin); + munmap(mem, size); } static void |