public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [RFC] tests/gem_ring_sync_copy: reduce memory usage
@ 2014-11-28 14:46 tim.gore
  2014-11-28 15:39 ` Damien Lespiau
  0 siblings, 1 reply; 11+ messages in thread
From: tim.gore @ 2014-11-28 14:46 UTC (permalink / raw)
  To: intel-gfx

From: Tim Gore <tim.gore@intel.com>

gem_ring_sync_copy uses a lot of memory and gets OOM
killed on smaller systems (eg android devices).
Most of the allocation is for "busy work" to keep the
render rings busy and for this we can just re-use the
same few buffers over and over. This enables the test
to be run on low end devices.

Signed-off-by: Tim Gore <tim.gore@intel.com>
---
 tests/gem_ring_sync_copy.c | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/tests/gem_ring_sync_copy.c b/tests/gem_ring_sync_copy.c
index 4a732d2..7257188 100644
--- a/tests/gem_ring_sync_copy.c
+++ b/tests/gem_ring_sync_copy.c
@@ -57,6 +57,7 @@
 
 #define WIDTH	512
 #define HEIGHT	512
+#define NUM_BUSY_BUFFERS 32
 
 typedef struct {
 	int drm_fd;
@@ -163,11 +164,13 @@ static void render_busy(data_t *data)
 	size_t array_size;
 	int i;
 
-	array_size = data->n_buffers_load * sizeof(struct igt_buf);
+	/* allocate 32 buffer objects and re-use them as needed */
+	array_size = NUM_BUSY_BUFFERS * sizeof(struct igt_buf);
+
 	data->render.srcs = malloc(array_size);
 	data->render.dsts = malloc(array_size);
 
-	for (i = 0; i < data->n_buffers_load; i++) {
+	for (i = 0; i < NUM_BUSY_BUFFERS; i++) {
 		scratch_buf_init(data, &data->render.srcs[i], WIDTH, HEIGHT,
 				 0xdeadbeef);
 		scratch_buf_init(data, &data->render.dsts[i], WIDTH, HEIGHT,
@@ -177,10 +180,10 @@ static void render_busy(data_t *data)
 	for (i = 0; i < data->n_buffers_load; i++) {
 		data->render.copy(data->batch,
 				  NULL,			/* context */
-				  &data->render.srcs[i],
+				  &data->render.srcs[i % NUM_BUSY_BUFFERS],
 				  0, 0,			/* src_x, src_y */
 				  WIDTH, HEIGHT,
-				  &data->render.dsts[i],
+				  &data->render.dsts[i % NUM_BUSY_BUFFERS],
 				  0, 0			/* dst_x, dst_y */);
 	}
 }
@@ -189,7 +192,7 @@ static void render_busy_fini(data_t *data)
 {
 	int i;
 
-	for (i = 0; i < data->n_buffers_load; i++) {
+	for (i = 0; i < NUM_BUSY_BUFFERS; i++) {
 		drm_intel_bo_unreference(data->render.srcs[i].bo);
 		drm_intel_bo_unreference(data->render.dsts[i].bo);
 	}
@@ -225,11 +228,13 @@ static void blitter_busy(data_t *data)
 	size_t array_size;
 	int i;
 
-	array_size = data->n_buffers_load * sizeof(drm_intel_bo *);
+	/* allocate 32 buffer objects and re-use them as needed */
+	array_size = NUM_BUSY_BUFFERS * sizeof(drm_intel_bo *);
+
 	data->blitter.srcs = malloc(array_size);
 	data->blitter.dsts = malloc(array_size);
 
-	for (i = 0; i < data->n_buffers_load; i++) {
+	for (i = 0; i < NUM_BUSY_BUFFERS; i++) {
 		data->blitter.srcs[i] = bo_create(data,
 						  WIDTH, HEIGHT,
 						  0xdeadbeef);
@@ -240,8 +245,8 @@ static void blitter_busy(data_t *data)
 
 	for (i = 0; i < data->n_buffers_load; i++) {
 		intel_copy_bo(data->batch,
-			      data->blitter.srcs[i],
-			      data->blitter.dsts[i],
+			      data->blitter.srcs[i % NUM_BUSY_BUFFERS],
+			      data->blitter.dsts[i % NUM_BUSY_BUFFERS],
 			      WIDTH*HEIGHT*4);
 	}
 }
@@ -250,7 +255,7 @@ static void blitter_busy_fini(data_t *data)
 {
 	int i;
 
-	for (i = 0; i < data->n_buffers_load; i++) {
+	for (i = 0; i < NUM_BUSY_BUFFERS; i++) {
 		drm_intel_bo_unreference(data->blitter.srcs[i]);
 		drm_intel_bo_unreference(data->blitter.dsts[i]);
 	}
-- 
2.1.3

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

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2014-11-28 18:49 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-28 14:46 [RFC] tests/gem_ring_sync_copy: reduce memory usage tim.gore
2014-11-28 15:39 ` Damien Lespiau
2014-11-28 15:47   ` Gore, Tim
2014-11-28 16:04     ` Damien Lespiau
2014-11-28 16:19       ` Chris Wilson
2014-11-28 16:34         ` Gore, Tim
2014-11-28 16:47           ` Chris Wilson
2014-11-28 17:05             ` Gore, Tim
2014-11-28 17:34               ` Chris Wilson
2014-11-28 18:24                 ` Daniel Vetter
2014-11-28 18:49                   ` Ville Syrjälä

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox