diff mbox

[i-g-t,v2] tests/gem_fence_thrash.c: Reduce memory usage

Message ID 1435074352-19241-1-git-send-email-derek.j.morton@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Derek Morton June 23, 2015, 3:45 p.m. UTC
On android platforms with 1Gb RAM gem_fence_thrash was failing
with an out of memory error.
This patch causes gem_close() to be called when a handle is
no longer required rather than relying on the cleanup when
the fd is closed. This greatly improves the memory footprint
of the test allowing it to run on 1Mb systems.

Also fixed a leak of the 'threads' variable.

v2: Simplified as per Chris Wilson's suggestion.

Signed-off-by: Derek Morton <derek.j.morton@intel.com>
---
 tests/gem_fence_thrash.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Chris Wilson June 23, 2015, 3:58 p.m. UTC | #1
On Tue, Jun 23, 2015 at 04:45:52PM +0100, Derek Morton wrote:
> On android platforms with 1Gb RAM gem_fence_thrash was failing
> with an out of memory error.
> This patch causes gem_close() to be called when a handle is
> no longer required rather than relying on the cleanup when
> the fd is closed. This greatly improves the memory footprint
> of the test allowing it to run on 1Mb systems.

Urm. We allocate the surfaces from the test.fd, and we close(test.fd) at
the end of every test. We munmap all the pointers (except bo_copy has a
leak of the mmaps), so we should not have been leaking any bo between
tests. This should not be improving the memory footprint at all, but
suggests something is wrong in your kernel.

Did you track the kernel objects throughout the test runs?
-Chris
diff mbox

Patch

diff --git a/tests/gem_fence_thrash.c b/tests/gem_fence_thrash.c
index 6447e13..e2ed024 100644
--- a/tests/gem_fence_thrash.c
+++ b/tests/gem_fence_thrash.c
@@ -63,7 +63,7 @@  static void *
 bo_create (int fd, int tiling)
 {
 	void *ptr;
-	int handle;
+	uint32_t handle;
 
 	handle = gem_create(fd, OBJECT_SIZE);
 
@@ -80,6 +80,7 @@  bo_create (int fd, int tiling)
 
 	/* XXX: mmap_gtt pulls the bo into the GTT read domain. */
 	gem_sync(fd, handle);
+	gem_close(fd, handle);
 
 	return ptr;
 }
@@ -188,6 +189,8 @@  static int run_test(int threads_per_fence, void *f, int tiling,
 
 		for (n = 0; n < num_threads; n++)
 			pthread_join (threads[n], NULL);
+
+		free(threads);
 	} else {
 		void *(*func)(void *) = f;
 		igt_assert(func(&t) == (void *)0);