benchmarks/gem_syslatency: Prevent CPU sleeps (C-states)

In order to keep the latency as low as possible for the idle load, we
need to keep the CPU awake. Otherwise we end up with the busy workload
having lower latency than the idle workload!

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2016-03-10 09:27:32 +00:00
parent c084c2b88b
commit 2a41c4b183
2 changed files with 14 additions and 1 deletions

View File

@ -8,6 +8,7 @@ gem_latency
gem_mmap
gem_prw
gem_set_domain
gem_syslatency
gem_userptr_benchmark
intel_upload_blit_large
intel_upload_blit_large_gtt

View File

@ -75,6 +75,16 @@ static void bind_cpu(pthread_t thread, int cpu)
pthread_setaffinity_np(thread, sizeof(mask), &mask);
}
static void force_low_latency(void)
{
int32_t target = 0;
int fd = open("/dev/cpu_dma_latency", O_RDWR);
if (fd < 0 || write(fd, &target, sizeof(target)) < 0)
fprintf(stderr,
"Unable to prevent CPU sleeps and force low latency using /dev/cpu_dma_latency: %s\n",
strerror(errno));
}
#define LOCAL_I915_EXEC_NO_RELOC (1<<11)
#define LOCAL_I915_EXEC_HANDLE_LUT (1<<12)
@ -246,9 +256,11 @@ int main(int argc, char **argv)
default:
break;
}
}
/* Prevent CPU sleeps so that busy and idle loads are consistent. */
force_low_latency();
busy = calloc(ncpus, sizeof(*busy));
if (enable_gem_sysbusy) {
for (n = 0; n < ncpus; n++) {