[Intel-gfx] [PATCH igt 1/3] igt/perf_pmu: Idle the GPU before starting to measure busyness
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Wed Nov 22 20:12:54 UTC 2017
On 22/11/2017 18:05, Chris Wilson wrote:
> Make sure the HW is idle before we start sampling the GPU for busyness.
> If we do not rest for long enough between tests, we may carry the
> sampling over.
Hm.. not sure about this one. New PMU client is supposed to start with a
counter relative to the current value at counter enable. How did you
come to this being a problem?
If I am missing something faster alternative would be to read the
counter twice. But.. I don't think it should be necessary. I'll
investigate tomorrow.
Regards,
Tvrtko
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
> tests/perf_pmu.c | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/tests/perf_pmu.c b/tests/perf_pmu.c
> index 8585ed7b..420eb6c9 100644
> --- a/tests/perf_pmu.c
> +++ b/tests/perf_pmu.c
> @@ -142,6 +142,9 @@ single(int gem_fd, const struct intel_execution_engine2 *e, bool busy)
> uint64_t val;
> int fd;
>
> + /* Ensure the HW is idle before being BUSY measurements */
> + gem_quiescent_gpu(gem_fd);
> +
> fd = open_pmu(I915_PMU_ENGINE_BUSY(e->class, e->instance));
>
> if (busy) {
> @@ -192,6 +195,9 @@ busy_check_all(int gem_fd, const struct intel_execution_engine2 *e,
> igt_spin_t *spin;
> unsigned int busy_idx, i;
>
> + /* Ensure the HW is idle before being BUSY measurements */
> + gem_quiescent_gpu(gem_fd);
> +
> i = 0;
> fd[0] = -1;
> for_each_engine_class_instance(fd, e_) {
> @@ -237,6 +243,9 @@ most_busy_check_all(int gem_fd, const struct intel_execution_engine2 *e,
> igt_spin_t *spin[num_engines];
> unsigned int idle_idx, i;
>
> + /* Ensure the HW is idle before being BUSY measurements */
> + gem_quiescent_gpu(gem_fd);
> +
> gem_require_engine(gem_fd, e->class, e->instance);
>
> i = 0;
> @@ -292,6 +301,9 @@ all_busy_check_all(int gem_fd, const unsigned int num_engines)
> igt_spin_t *spin[num_engines];
> unsigned int i;
>
> + /* Ensure the HW is idle before being BUSY measurements */
> + gem_quiescent_gpu(gem_fd);
> +
> i = 0;
> fd[0] = -1;
> for_each_engine_class_instance(fd, e) {
> @@ -628,6 +640,9 @@ multi_client(int gem_fd, const struct intel_execution_engine2 *e)
> uint64_t val[2];
> int fd[2];
>
> + /* Ensure the HW is idle before being BUSY measurements */
> + gem_quiescent_gpu(gem_fd);
> +
> fd[0] = open_pmu(config);
>
> /*
> @@ -742,6 +757,9 @@ static void cpu_hotplug(int gem_fd)
> uint64_t val, ref;
> int fd;
>
> + /* Ensure the HW is idle before being BUSY measurements */
> + gem_quiescent_gpu(gem_fd);
> +
> igt_require(cpu0_hotplug_support());
>
> fd = perf_i915_open(I915_PMU_ENGINE_BUSY(I915_ENGINE_CLASS_RENDER, 0));
>
More information about the Intel-gfx
mailing list