[Intel-gfx] [PATCH] drm/i915: Enable runtime pm

David Weinehall david.weinehall at linux.intel.com
Thu Nov 16 18:24:02 UTC 2017


On Wed, Nov 08, 2017 at 04:25:42PM +0200, David Weinehall wrote:
> On Tue, Nov 07, 2017 at 05:18:21PM +0100, Daniel Vetter wrote:
> > Now that we have CI, and that pm_rpm fully passes (I guess the audio
> > folks have implemented proper runtime pm for snd-hda, hooray, pls
> > confirm) it's time to enable this again by default.
> > 
> > Real goal here is to have 1 configuration only that we fully support,
> > instead of tons of different codes with every user/customer tuning it
> > differently. And really, power stuff should work by default, and
> > should be enabled by everywhere where it is save to do so.
> > 
> > v2: Completely new commit message, a few years passed since v1 ...
> > 
> > Cc: Takashi Iwai <tiwai at suse.de>
> > Cc: Liam Girdwood <liam.r.girdwood at intel.com>
> > Cc: "Yang, Libin" <libin.yang at intel.com>
> > Cc: "Lin, Mengdong" <mengdong.lin at intel.com>
> > Cc: "Li, Jocelyn" <jocelyn.li at intel.com>
> > Cc: "Kaskinen, Tanu" <tanu.kaskinen at intel.com>
> > Cc: "Zanoni, Paulo R" <paulo.r.zanoni at intel.com>
> > Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
> 
> lgtm,
> 
> Reviewed-by: David Weinehall <david.weinehall at linux.intel.com>

Been testing a bit; test results are a bit discouraging when it comes to
idle power consumption.

Our nightly test suite logs idle power consumption before running any
tests, after running all tests, and then finally after running
powertop --auto-tune.

The before and after cases are similar with and without patch,
but not so for the auto-tune case.

Without this patch, powertop --auto-tune yields a massive improvement
(on NUC6i5 the power consumption drops with more than a factor of 3),
while with this patch the power consumption just drops with 10% or so.

Judging by the powertop output it seems as though we're getting a lot of
interrupts from i915.

 *  *  *   Top 10 Power Consumers   *  *  *

With patch:

Usage;Events/s;Category;Description
  0,5%; 75,1;Interrupt;[124] i915
  0,3%; 48,4;Process;/usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
  0,1%; 42,8;Timer;hrtimer_wakeup
  0,0%; 34,9;Timer;tick_sched_timer
  4,2%;  1,1;kWork;i915_hpd_poll_init_work
  0,1%; 14,0;Process;python2 /opt/scripts/dut/dutlaunch/launch2.py --workspace=/opt/jenkins/workspace/Custom_test --iterations=1 idlepower_before un
  0,0%; 13,3;Process;[rcu_preempt]
  0,8%;  1,7;Process;python /opt/scripts/dut/perf-meter.py --avgskip 1 --name perf-meter --infofile /tmp/testname GLBenchmark testfw_app synmark2 he
  0,0%;  3,0;Process;compiz
  0,7%; 0,11;kWork;output_poll_execute

Without the patch:

Usage;Events/s;Category;Description
  0,0%; 29,1;Timer;tick_sched_timer
  0,1%; 19,9;Process;python2 /opt/scripts/dut/dutlaunch/launch.py --workspace=/opt/jenkins/workspace/Nightly_kernel_test/kernel/1510773665/SKL_6260U
  0,0%; 13,2;Process;[rcu_preempt]
  0,8%;  1,6;Process;python /opt/scripts/dut/perf-meter.py --avgskip 1 --name perf-meter --infofile /tmp/testname GLBenchmark testfw_app synmark2 he
  0,0%;  2,5;Process;compiz
  0,0%;  1,5;Process;java -jar slave.jar
  0,0%;  1,2;Interrupt;[3] net_rx(softirq)
  0,0%;  1,0;kWork;pci_pme_list_scan
  0,0%;  0,9;Interrupt;[121] xhci_hcd
  0,1%;  0,5;Process;perf-meter

As can be seen the i915 driver doesn't even show up without the patch,
while it's the main culprit with the patch.

Just to eliminate DMC issues I'm going to do another run, but with DMC
v1.27 instead of v1.26.


Kind regards, David

> 
> > ---
> >  drivers/gpu/drm/i915/intel_runtime_pm.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
> > index 8315499452dc..dc24d008d8d4 100644
> > --- a/drivers/gpu/drm/i915/intel_runtime_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
> > @@ -3232,7 +3232,7 @@ void intel_runtime_pm_enable(struct drm_i915_private *dev_priv)
> >  	struct pci_dev *pdev = dev_priv->drm.pdev;
> >  	struct device *kdev = &pdev->dev;
> >  
> > -	pm_runtime_set_autosuspend_delay(kdev, 10000); /* 10s */
> > +	pm_runtime_set_autosuspend_delay(kdev, 100);
> >  	pm_runtime_mark_last_busy(kdev);
> >  
> >  	/*
> > @@ -3251,6 +3251,8 @@ void intel_runtime_pm_enable(struct drm_i915_private *dev_priv)
> >  		pm_runtime_use_autosuspend(kdev);
> >  	}
> >  
> > +	pm_runtime_allow(kdev);
> > +
> >  	/*
> >  	 * The core calls the driver load handler with an RPM reference held.
> >  	 * We drop that here and will reacquire it during unloading in
> > -- 
> > 2.15.0.rc2
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


More information about the Intel-gfx mailing list