RE: [PATCH] omap-pm: Fixes behaviour of some shared resource framework functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>
Texas Instruments France SA, 821 Avenue Jack Kilby, 06270 Villeneuve Loubet. 036 420 040 R.C.S Antibes. Capital de EUR 753.920

-----Original Message-----

> From: Kevin Hilman [mailto:khilman@xxxxxxxxxxxxxxxxxxx]
> Sent: Friday, October 30, 2009 12:33 AM
> To: Chikkature Rajashekar, Madhusudhan
> Cc: Turquette, Mike; Dasgupta, Romit; Cousson, Benoit; 'Paul Walmsley';
> linux-omap@xxxxxxxxxxxxxxx; Titiano, Patrick
> Subject: Re: [PATCH] omap-pm: Fixes behaviour of some shared resource
> framework functions
>
> "Madhusudhan" <madhu.cr@xxxxxx> writes:
>
> >> -----Original Message-----
> >> From: Mike Turquette [mailto:mturquette@xxxxxx]
> >> Sent: Thursday, October 29, 2009 4:38 PM
> >> To: Kevin Hilman
> >> Cc: Dasgupta, Romit; Cousson, Benoit; Chikkature Rajashekar,
> Madhusudhan;
> >> 'Paul Walmsley'; linux-omap@xxxxxxxxxxxxxxx; Titiano, Patrick
> >> Subject: Re: [PATCH] omap-pm: Fixes behaviour of some shared resource
> >> framework functions
> >>
> >> Kevin Hilman wrote:
> >> > "Dasgupta, Romit" <romit@xxxxxx> writes:
> >> >
> >> >> Hello Benoit,
> >> >>                         One comment below:
> >> >>> In fact, this is Mike who started that analysis. We discussed that
> >> internally and
> >> >>> our point is that if the CPUFreq ondemand or conservative heuristic
> is
> >> not able
> >> >>> to increase quickly enough the CPU need to handle correctly the UI,
> we
> >> have
> >> >>> to somehow improve or modify the governor in order to provide it a
> >> extra
> >> >>> information in term of constraint maybe in order to increase
> >> immediately the
> >> >>> frequency.
> >> >> The information as you mention needs to be supplied by the
> >> >> driver. The governor would then act on behalf of the driver!  This
> >> >> begs for a new governor API or a signature change to an existing
> >> >> governor API.
> >> >>
> >> >>> This should not be done in the low level omap_pm code; this is not
> >> >>> the right level to do that. The issue is in the ondemand and must
> >> >>> be fixed there.
> >> >> At the end of the day it would still be the driver making the
> >> >> decision!
> >> >
> >> > No.  The drivers can give hints about their requirements, but the
> >> > drivers don't make decisions that are system wide.  The govenor acts
> >> > on behalf of the entire system based on multiple inputs, not any one
> >> > driver.
> >> >
> >> > Benoit's point (and I agree with) is that this is a *system wide*
> >> > problem that needs a *system wide* solution.  I agree that tweaked or
> >> > new governor is the right approach to solving this for the long term,
> >>
> >> An assumption in this thread is that ondemand/conservative can't scale
> >> fast enough, but that is not true.  The Android UI sluggishness
> >> mentioned by Benoit was solved by lowering the cpufreq
> >> transition_latency time from 10 million ns to 300,000ns.  I have not
> >> gotten the exact worst case time that it takes for voltage to scale up
> >> and down from the hardware guys, but through some email exchanges it
> was
> >> agreed that this value is safe.
> >>
> >> I've pushed the patch that fixed transition_latency to the list.
> Please
> >> see thread "decrease cpufreq transition latency".  This should
> hopefully
> >> cure a lot of performance/user experience pain and help us remove
> policy
> >> from drivers.
> >>
> > Hi Kevin, Mike,
> >
> > Let us consider the MMC scenario. Below are the throughput numbers with
> > different governors.
> >
> > Performance:
> > Write: 5.47MB/Sec
> > Read: 15.3MB/Sec
> >
> > Ondemand:
> > Write: 4.2 MB/Sec
> > Read: 9.8 MB/Sec
> >
> > Conservative:
> > Write: 4.9MB/Sec
> > Read: 12.16MB/Sec
> >
> > These numbers show that "conservative" is better than ondemand but the
> > throughput numbers are still less than "performance".
>
> No surprises there.
>
> > Instead, if the driver holds the vdd1 opp to opp3 the throughput numbers
> > were relatively close to "performance" governor. The logic I am talking
> > about is that the drivers should be intelligent enough to hold the opp
> at
> > Opp3 only when there is an active transfer. Once the transfer is done
> > release it back to opp1. Does this make sense?
>
> I think you're missing my point.
>
> What you're trying to do is to allow a driver to make a power
> vs. performance policy decision.  You're assuming that the user (or
> system integrator) will always choose performance over power.  What if
> the user is willing to accept a slightly slower system if it extends
> battery life?
>
> The point I'm trying to make is that these kinds of policy decisions
> simply do not belong in drivers.
>
> Kevin

Kevin, this is absolutely correct. I think this is our number one issue in terms of PM policy.
Today we enterely rely on a single "default" governor (ondemand) and expect it to always take the best decision in any circumstances, solely based on the monitored CPU load. This is quite unrealistic.
I see 4 missing points in our PM SW Framework today:

1/ Hints from low-level drivers to PM policy so that it knows runtime platform activities and how to react accordingly.
E.g:
 - I am DMA-driven, my CPU load is low but I need low latencies (e.g. USB/MMC transfers, etc ...)
 - I am generating huge data transfers, I need high bus speed (e.g. CAMERA)
 - I do not support DVFS
 - I do not support OFF-mode
 - ...

2/ System-wide PM policy, taking other parameters than CPU load to take decisions (i.e hints from low-level drivers, etc).
Note that it may be multiple policies, not only one.
Also note that OPP is not the only one parameter to control. There is also the CPU C-State, directly impacting system latencies, to be dynamically controlled by some PM policy.

3/ Hints from user side to decide whether or not to prefer performances over power.

4/ Fine-tuned PM Poliy. We use ondemand default configuration, develop on a different platform and probably configured to react "good-enough" on any platform. Can't expect it to perform perfectly on our platform (that's what Mike showed).

Patrick.



>
> > Otherwise, do you guys think there is room to improve conservative
> governor
> > further?
> >
> > Regards,
> > Madhu
> >
> >
> >> > In the mean time, I have a couple ideas for experimentation.
> >> >
> >> > Ultimately, we're still talking about a power vs. perfomance tradeoff,
> >> > which is a system wide choice that should be left to the system
> >> > integrator (or maybe even end user.)  If performance is desired over
> >> > power (like maybe when the UI is active), there are couple things
> that
> >> > could be done
> >> >
> >> > 1) Switch to performance governor,
> >> >
> >> > 2) or better, keep ondemand but use with CPUfreq policy changes
> >> >
> >> > With CPUfreq policies, you can change which OPPs are available to the
> >> > system.
> >> >
> >> > To see the currently available OPPs and the min/max settings:
> >> >
> >> > /sys/devices/system/cpu/cpu0/cpufreq # cat
> scaling_available_frequencies
> >> > 600000 550000 500000 250000 125000
> >> > /sys/devices/system/cpu/cpu0/cpufreq # cat scaling_max_freq
> >> > 600000
> >> > /sys/devices/system/cpu/cpu0/cpufreq # cat scaling_min_freq
> >> > 125000
> >> >
> >> > To make OPP3 the minimum OPP, all that's needed is:
> >> >
> >> > /sys/devices/system/cpu/cpu0/cpufreq # echo 500000 > scaling_min_freq
> >> >
> >> > Changing the min freq is what you are trying to do from the MMC
> >> > driver.  The difference here is that since this is a system wide
> >> > policy decision, it should be done a system wide level.
> >> >
> >> > Kevin
> >> >


--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux