[Intel-gfx] [PATCH] drm/i915/selftests: Disable C-states when measuring RPS frequency response
Mika Kuoppala
mika.kuoppala at linux.intel.com
Tue Apr 21 14:45:25 UTC 2020
Chris Wilson <chris at chris-wilson.co.uk> writes:
> Let's isolate the impact of cpu frequency selection on determing the GPU
> throughput in response to selection of RPS frequencies.
>
> For real systems, we do have to be concerned with the impact of
> integrating c-states, p-states and rp-states, but for the sake of
> proving whether or not RPS works, one baby step at a time.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> ---
> drivers/gpu/drm/i915/gt/selftest_rps.c | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/gt/selftest_rps.c b/drivers/gpu/drm/i915/gt/selftest_rps.c
> index 395265121e43..e2afc2003caa 100644
> --- a/drivers/gpu/drm/i915/gt/selftest_rps.c
> +++ b/drivers/gpu/drm/i915/gt/selftest_rps.c
> @@ -3,6 +3,7 @@
> * Copyright © 2020 Intel Corporation
> */
>
> +#include <linux/pm_qos.h>
> #include <linux/sort.h>
>
> #include "intel_engine_pm.h"
> @@ -14,6 +15,9 @@
> #include "selftests/igt_spinner.h"
> #include "selftests/librapl.h"
>
> +/* Try to isolate the impact of cstates from determing frequency response */
> +#define CPU_LATENCY 0 /* -1 to disable pm_qos, 0 to disable cstates */
> +
> static void dummy_rps_work(struct work_struct *wrk)
> {
> }
> @@ -406,6 +410,7 @@ int live_rps_frequency_cs(void *arg)
> struct intel_gt *gt = arg;
> struct intel_rps *rps = >->rps;
> struct intel_engine_cs *engine;
> + struct pm_qos_request qos;
> enum intel_engine_id id;
> int err = 0;
>
> @@ -421,6 +426,9 @@ int live_rps_frequency_cs(void *arg)
> if (INTEL_GEN(gt->i915) < 8) /* for CS simplicity */
> return 0;
>
> + if (CPU_LATENCY >= 0)
> + cpu_latency_qos_add_request(&qos, CPU_LATENCY);
> +
> intel_gt_pm_wait_for_idle(gt);
> saved_work = rps->work.func;
> rps->work.func = dummy_rps_work;
> @@ -527,6 +535,9 @@ int live_rps_frequency_cs(void *arg)
> intel_gt_pm_wait_for_idle(gt);
> rps->work.func = saved_work;
>
> + if (CPU_LATENCY >= 0)
> + cpu_latency_qos_remove_request(&qos);
> +
> return err;
> }
>
> @@ -536,6 +547,7 @@ int live_rps_frequency_srm(void *arg)
> struct intel_gt *gt = arg;
> struct intel_rps *rps = >->rps;
> struct intel_engine_cs *engine;
> + struct pm_qos_request qos;
> enum intel_engine_id id;
> int err = 0;
>
> @@ -551,6 +563,9 @@ int live_rps_frequency_srm(void *arg)
> if (INTEL_GEN(gt->i915) < 8) /* for CS simplicity */
> return 0;
>
> + if (CPU_LATENCY >= 0)
> + cpu_latency_qos_add_request(&qos, CPU_LATENCY);
> +
> intel_gt_pm_wait_for_idle(gt);
> saved_work = rps->work.func;
> rps->work.func = dummy_rps_work;
> @@ -656,6 +671,9 @@ int live_rps_frequency_srm(void *arg)
> intel_gt_pm_wait_for_idle(gt);
> rps->work.func = saved_work;
>
> + if (CPU_LATENCY >= 0)
> + cpu_latency_qos_remove_request(&qos);
> +
> return err;
> }
>
> --
> 2.20.1
More information about the Intel-gfx
mailing list