diff options
author | Tvrtko Ursulin <tvrtko.ursulin@intel.com> | 2018-02-07 12:24:24 +0000 |
---|---|---|
committer | Tvrtko Ursulin <tvrtko.ursulin@intel.com> | 2018-02-07 16:24:26 +0000 |
commit | 8a9ac203853b3150a608122226910a1218fa654c (patch) | |
tree | 8cc18d43f171a8b592ecea2f927ab30143ddfc66 /tests/perf_pmu.c | |
parent | 2baf7ece5b6d2faccedc56527ec91623f41a85e4 (diff) |
tests/perf_pmu: Use perf timestamps when calculating average frequency
We can use perf reported timestamps to potentially get a more accurate
frequency average.
Lets see if this improves the situation for sporadic failures like on APL:
Frequency: min=100, max=750, boost=750 MHz
Min frequency: requested 90.0, actual 90.0
Max frequency: requested 749.8, actual 647.9
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/perf_pmu.c')
-rw-r--r-- | tests/perf_pmu.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/tests/perf_pmu.c b/tests/perf_pmu.c index 407ca58c..b72642e9 100644 --- a/tests/perf_pmu.c +++ b/tests/perf_pmu.c @@ -106,7 +106,7 @@ static uint64_t pmu_read_single(int fd) return __pmu_read_single(fd, NULL); } -static void pmu_read_multi(int fd, unsigned int num, uint64_t *val) +static uint64_t pmu_read_multi(int fd, unsigned int num, uint64_t *val) { uint64_t buf[2 + num]; unsigned int i; @@ -115,6 +115,8 @@ static void pmu_read_multi(int fd, unsigned int num, uint64_t *val) for (i = 0; i < num; i++) val[i] = buf[2 + i]; + + return buf[1]; } #define assert_within_epsilon(x, ref, tolerance) \ @@ -1136,9 +1138,8 @@ static void test_frequency(int gem_fd) { uint32_t min_freq, max_freq, boost_freq; - uint64_t val[2], start[2]; + uint64_t val[2], start[2], slept; double min[2], max[2]; - unsigned long slept; igt_spin_t *spin; int fd, sysfs; @@ -1169,11 +1170,11 @@ test_frequency(int gem_fd) gem_quiescent_gpu(gem_fd); /* Idle to be sure the change takes effect */ spin = igt_spin_batch_new(gem_fd, 0, I915_EXEC_RENDER, 0); - pmu_read_multi(fd, 2, start); - slept = measured_usleep(batch_duration_ns / 1000); + slept = pmu_read_multi(fd, 2, start); + measured_usleep(batch_duration_ns / 1000); + slept = pmu_read_multi(fd, 2, val) - slept; - pmu_read_multi(fd, 2, val); min[0] = 1e9*(val[0] - start[0]) / slept; min[1] = 1e9*(val[1] - start[1]) / slept; @@ -1195,11 +1196,11 @@ test_frequency(int gem_fd) gem_quiescent_gpu(gem_fd); spin = igt_spin_batch_new(gem_fd, 0, I915_EXEC_RENDER, 0); - pmu_read_multi(fd, 2, start); - slept = measured_usleep(batch_duration_ns / 1000); + slept = pmu_read_multi(fd, 2, start); + measured_usleep(batch_duration_ns / 1000); + slept = pmu_read_multi(fd, 2, val) - slept; - pmu_read_multi(fd, 2, val); max[0] = 1e9*(val[0] - start[0]) / slept; max[1] = 1e9*(val[1] - start[1]) / slept; |