summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2011-03-27 15:25:12 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2011-03-27 15:25:12 +0200
commit294c78f4ab3fea90cf8a09ec08095b200103b6e3 (patch)
tree84af056780d2d1252caddf88af41346b7c8f1e71 /tests
parent22fe098bf5468931278e68c42280a583c3f714f2 (diff)
gem_stress: variable gpu busy load
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'tests')
-rw-r--r--tests/gem_stress.c31
1 files changed, 27 insertions, 4 deletions
diff --git a/tests/gem_stress.c b/tests/gem_stress.c
index adec64be..79bd104f 100644
--- a/tests/gem_stress.c
+++ b/tests/gem_stress.c
@@ -109,6 +109,7 @@ drm_intel_bo *busy_bo;
static struct {
unsigned scratch_buf_size;
int no_hw;
+ int gpu_busy_load;
} options;
#define MAX_BUFS 4096
@@ -128,6 +129,7 @@ static unsigned num_total_tiles = 0;
#define TILES_PER_BUF (num_total_tiles / num_buffers)
static int fence_storm = 0;
+static int gpu_busy_load = 10;
static void tile2xy(struct scratch_buf *buf, unsigned tile, unsigned *x, unsigned *y)
{
@@ -137,10 +139,11 @@ static void tile2xy(struct scratch_buf *buf, unsigned tile, unsigned *x, unsigne
}
/* All this gem trashing wastes too much cpu time, so give the gpu something to
- * do to increase changes for races. TODO: Should be autotuned. */
+ * do to increase changes for races. */
static void keep_gpu_busy(void)
{
uint32_t src_pitch, dst_pitch, cmd_bits;
+ int tmp;
src_pitch = 4096;
dst_pitch = 4096;
@@ -157,6 +160,8 @@ static void keep_gpu_busy(void)
cmd_bits |= XY_SRC_COPY_BLT_DST_TILED;
}
#endif
+ tmp = 1 << gpu_busy_load;
+ assert(tmp <= 1024);
/* copy lower half to upper half */
BEGIN_BATCH(8);
@@ -168,7 +173,7 @@ static void keep_gpu_busy(void)
(0xcc << 16) | /* copy ROP */
dst_pitch);
OUT_BATCH(128 << 16 | 0);
- OUT_BATCH(256 << 16 | 1024);
+ OUT_BATCH(256 << 16 | tmp);
OUT_RELOC(busy_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0);
OUT_BATCH(0 << 16 | 0);
OUT_BATCH(src_pitch);
@@ -446,6 +451,13 @@ static void init_set(unsigned set)
permute_array(buffers[set], num_buffers, exchange_buf);
+ if (current_set == 1 && options.gpu_busy_load == 0) {
+ gpu_busy_load++;
+ if (gpu_busy_load > 10)
+ gpu_busy_load = 6;
+ }
+
+
for (i = 0; i < num_buffers; i++) {
r = random();
if ((r & 3) != 0)
@@ -552,13 +564,15 @@ static void parse_options(int argc, char **argv)
int option_index = 0;
static struct option long_options[] = {
{"no-hw", 0, 0, 'd'},
- {"buf-size", 1, 0, 's'}
+ {"buf-size", 1, 0, 's'},
+ {"gpu-busy-load", 1, 0, 'g'}
};
options.scratch_buf_size = 256*4096;
options.no_hw = 0;
+ options.gpu_busy_load = 0;
- while((c = getopt_long(argc, argv, "ns:",
+ while((c = getopt_long(argc, argv, "ns:g:",
long_options, &option_index)) != -1) {
switch(c) {
case 'd':
@@ -577,6 +591,15 @@ static void parse_options(int argc, char **argv)
options.scratch_buf_size = tmp;
}
break;
+ case 'g':
+ tmp = atoi(optarg);
+ if (tmp < 0 || tmp > 10)
+ printf("gpu busy load needs to be bigger than 0 and smaller than 10\n");
+ else {
+ printf("gpu busy load factor set to %i\n", tmp);
+ gpu_busy_load = options.gpu_busy_load = tmp;
+ }
+ break;
default:
printf("unkown command options\n");
break;