From 6ec897c6102a20b93ec8c8e5245d3bf61dde511e Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 7 May 2016 21:26:56 +0100 Subject: benchmarks: Add some contention tests for object/context creation Signed-off-by: Chris Wilson --- benchmarks/gem_create.c | 62 +++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 22 deletions(-) (limited to 'benchmarks/gem_create.c') diff --git a/benchmarks/gem_create.c b/benchmarks/gem_create.c index d0634bbe..519ab92c 100644 --- a/benchmarks/gem_create.c +++ b/benchmarks/gem_create.c @@ -83,9 +83,10 @@ int main(int argc, char **argv) int size = 0; int busy = 0; int reps = 13; + int ncpus = 1; int c, n, s; - while ((c = getopt (argc, argv, "bs:r:")) != -1) { + while ((c = getopt (argc, argv, "bs:r:f")) != -1) { switch (c) { case 's': size = atoi(optarg); @@ -97,6 +98,10 @@ int main(int argc, char **argv) reps = 1; break; + case 'f': + ncpus = sysconf(_SC_NPROCESSORS_ONLN); + break; + case 'b': busy = true; break; @@ -138,28 +143,41 @@ int main(int argc, char **argv) igt_stats_fini(&stats); } } else { + double *shared; + + shared = mmap(0, 4096, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0); for (n = 0; n < reps; n++) { - struct timespec start, end; - uint64_t count = 0; - - clock_gettime(CLOCK_MONOTONIC, &start); - do { - for (c = 0; c < 1000; c++) { - uint32_t handle; - - handle = gem_create(fd, size); - gem_set_domain(fd, handle, - I915_GEM_DOMAIN_GTT, - I915_GEM_DOMAIN_GTT); - if (busy) - make_busy(fd, handle); - gem_close(fd, handle); - } - count += c; - clock_gettime(CLOCK_MONOTONIC, &end); - } while (end.tv_sec - start.tv_sec < 2); - - printf("%f\n", count / elapsed(&start, &end)); + memset(shared, 0, 4096); + + igt_fork(child, ncpus) { + struct timespec start, end; + uint64_t count = 0; + + clock_gettime(CLOCK_MONOTONIC, &start); + do { + for (c = 0; c < 1000; c++) { + uint32_t handle; + + handle = gem_create(fd, size); + gem_set_domain(fd, handle, + I915_GEM_DOMAIN_GTT, + I915_GEM_DOMAIN_GTT); + if (busy) + make_busy(fd, handle); + gem_close(fd, handle); + } + count += c; + clock_gettime(CLOCK_MONOTONIC, &end); + } while (end.tv_sec - start.tv_sec < 2); + + shared[child] = count / elapsed(&start, &end); + } + igt_waitchildren(); + + for (int child = 0; child < ncpus; child++) + shared[ncpus] += shared[child]; + + printf("%7.3f\n", shared[ncpus] / ncpus); } } -- cgit v1.2.3