summaryrefslogtreecommitdiff
path: root/benchmarks/gem_create.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-05-07 21:26:56 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2016-05-07 22:06:57 +0100
commit6ec897c6102a20b93ec8c8e5245d3bf61dde511e (patch)
treedf7efde7c46fad91ce74234a94c03a1537b9d673 /benchmarks/gem_create.c
parent4b0f3bfc2edd4228ec469327ab9fe53e8b9722e9 (diff)
benchmarks: Add some contention tests for object/context creation
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'benchmarks/gem_create.c')
-rw-r--r--benchmarks/gem_create.c62
1 files changed, 40 insertions, 22 deletions
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);
}
}