Re: [linux-pm] [RFC] the generic thermal layer enhancement

Jean Pihet
2012-06-01T09:05:32Z

Hi!

On Thu, May 31, 2012 at 1:13 PM, Eduardo Valentin
<eduardo.valentin@ti.com> wrote:
> Hello,
>
> On Thu, May 31, 2012 at 01:16:37PM +0800, Amit Kachhap wrote:
>> On 30 May 2012 18:30, Eduardo Valentin <eduardo.valentin@ti.com> wrote:
>> > Hello Rui,
>> >
>> > Now I copied Amit, for real :-)
>> >
>> > I like your proposal, some comments as follow.
>> >
>> > On Wed, May 30, 2012 at 04:51:00PM +0800, Zhang Rui wrote:
>> >> On 三, 2012-05-30 at 16:49 +0800, Zhang Rui wrote:
>> >> > Hi, all,
>> >> >
>> >> > It is great to see more and more users of the generic thermal layer.
>> >> > But as we know, the original design of the generic thermal layer comes
>> >> > from ACPI thermal management, and some of its implementation seems to be
>> >> > too ACPI specific nowadays.
>> >
>> >
>> > Good. We have also basic OMAP support, on top of Amit's work. I sent
>> > recently a very basic support.  I will be pushing them, while they evolve.
>> >
>> >> >
>> >> > Recently I'm thinking of enhance the generic thermal layer so that it
>> >> > works well for more platforms.
>> >
>> > As you said, for non-ACPI support, the "generic" layer needs some
>> > extension and refactoring to be more generic :-).
>> >
>> >> >
>> >> > Below are some thoughts of mine, after reading the patches from Amit
>> >> > Daniel Kachhap, and ACPI 3.0 thermal model. Actually, I have started
>> >> > coding some RFC patches. But I do really want to get feedback from you
>> >> > before going on.
>> >
>> > OK.
>> >
>> >> >
>> >> > G1. supporting multiple cooling states for active cooling devices.
>> >> >
>> >> >     The current active cooling device supports two cooling states only,
>> >> >     please refer to the code below, in driver/thermal/thermal_sys.c
>> >> >                 case THERMAL_TRIP_ACTIVE:
>> >> >                         ...
>> >> >                         if (temp >= trip_temp)
>> >> >                                 cdev->ops->set_cur_state(cdev, 1);
>> >> >                         else
>> >> >                                 cdev->ops->set_cur_state(cdev, 0);
>> >> >                         break;
>> >> >
>> >> >     This is an ACPI specific thing, as our ACPI FAN used to support
>> >> >     ON/OFF only.
>> >> >     I think it is reasonable to support multiple active cooling states
>> >> >     as they are common on many platforms, and note that this is also
>> >> >     true for ACPI 3.0 FAN device (_FPS).
>> >> >
>> >> > G2. introduce cooling states range for a certain trip point
>> >> >
>> >> >     This problem comes with the first one.
>> >> >     If the cooling devices support multiple cooling states, and surely
>> >> >     we may want only several cooling states for a certain trip point,
>> >> >     and other cooling states for other active trip points.
>> >> >     To do this, we should be able to describe the cooling device
>> >> >     behavior for a certain trip point, rather than for the entire
>> >> >     thermal zone.
>> >
>> > For G1+G2, I agree with your proposal. I had some discussion with Amit
>> > regarding this. In his series of patches we increase / decrease the cooling
>> > device state linearly and steadily.
>> >
>> > But if we would have what you are saying, we could bind cooling device
>> > set of states with trip points.
>> >
>> >> >
>> >> > G3. kernel thermal passive cooling algorithm
>> >> >
>> >> >     Currently, tc1 and tc2 are hard requirements for kernel passive
>> >> >     cooling. But non-ACPI platforms do not have this information
>> >> >     (please correct me if I'm wrong).
>> >> >     Say, for the patches here
>> >> >     http://marc.info/?l=linux-acpi&m=133681581305341&w=2
>> >>
>> >> Sorry, forgot to cc Amit, the author of this patch set.
>> >>
>> >> thanks,
>> >> rui
>> >> >     They just want to slow down the processor when current temperature
>> >> >     is higher than the trip point and speed up the processor when the
>> >> >     temperature is lower than the trip point.
>> >> >
>> >> >     According to Matthew, the platform drivers are responsible to
>> >> >     provide proper tc1 and tc2 values to use kernel passive cooling.
>> >> >     But I'm just wondering if we can use something instead.
>> >> >     Say, introduce .get_trend() in thermal_zone_device_ops.
>> >> >     And we set cur_state++ or cur_state-- based on the value returned
>> >> >     by .get_trend(), instead of using tc1 and tc2.
>> >
>> > I fully support this option and could cook up something on this.
>> > The TC1 and TC2 should go inside the .get_trend() callbacks for ACPI.
>> > Should probably go away from the registration function that we have
>> > currently.
>> >
>> > We could have generic trending computation though. Based on timestamping
>> > and temperature reads, and make it available for zones that want to used it.
>> >
>> >> >
>> >> > G4. Multiple passive trip points
>> >> >
>> >> >     I get this idea also from the patches at
>> >> >     http://marc.info/?l=linux-acpi&m=133681581305341&w=2
>> >> >
>> >> >     IMO, they want to get an acceptable performance at a tolerable
>> >> >     temperature.
>> >> >     Say, a platform with four P-states. P3 is really low.
>> >> >     And I'm okay with the temperature at 60C, but 80C? No.
>> >> >     With G2 resolved, we can use processor P0~P2 for Passive trip point
>> >> >     0 (50C), and P3 for Passive trip point 1 (70C). And then the
>> >> >     temperature may be jumping at around 60C or even 65C, without
>> >> >     entering P3.
>> >
>> > Yeah, I guess we need to solve G1+G2 first to allow this. But I also agree
>> > that ideally, there should be possibility to have multiple passive trip points.
>> >
>> >> >
>> >> >     Further more, IMO, this also works for ACPI platforms.
>> >> >     Say, we can easily change p-state to cool the system, but using
>> >> >     t-state is definitely what we do not want to see. The current
>> >> >     implementation does not expose this difference to the generic
>> >> >     thermal layer, but if we can have two passive trip points, and use
>> >> >     p-state for the first one only... (this works if we start polling
>> >> >     after entering passive cooling mode, without hardware notification)
>> >> >
>> >> > G5. unify active cooling and passive cooling code
>> >> >
>> >> >     If G4 and G5 are resolved, a new problem to me is that there is no
>> >> >     difference between passive cooling and active cooling except the
>> >> >     cooling policy.
>> >
>> > OK...
>> >
>> >> >     Then we can share the same code for both active and passive cooling.
>> >> >     maybe something like:
>> >> >
>> >> >     case THERMAL_TRIP_ACTIVE:
>> >> >     case THERMAL_TRIP_PASSIVE:
>> >> >          ...
>> >> >          tz->ops->get_trend();
>> >
>> > Would the get_trend take into account if we are cooling with active or passive
>> > cooling device?
>> >
>> >> >          if (trend == HEATING)
>> >> >                  cdev->ops->set_cur_state(cdev, cur_state++);
>> >> >          else if (trend == COOLING)
>> >> >                  cdev->ops->set_cur_state(cdev, cur_state--);
>> >> >          break;
>> >
>> > I believe we should have something for temperature stabilization there as well.
>> I also agree that thermal stablization is important. I have observed
>> that too much state change is happening around the trip point. But yes
>>  the trend callback may take care of this and set the COOLING trend
>> different from HEATING trend.
>> >
>> > Besides, if we go with this generic policy, then the zone update would be much
>> > simpler no?
>> >
>> >> >
>> >> > Here are the gaps in my point of view, I'd like to get your ideas about
>> >> > which are reasonable and which are not.
>> >
>> > Here are some other thoughts:
>> > G6. Another point is, would it make sense to allow for policy extension? Meaning,
>> > the zone update would call a callback to request for update from the zone
>> > device driver?
>> This may a simple work with adding notifiers like done for CRITICAL,
>> HOT trip type.
>> >
>> > G7. How do we solve cooling devices being shared between different thermal zones?
>> > Should we have a better cooling device constraint management?
>> >
>> > G8. On same topic as G7, how are we currently making sure that thermal constraints
>> > don't get overwritten by, let's say, userspace APIs? I guess the generic CPU cooling
>> > propose by Amit suffers of an issue. If user sets cpufreq governor to userspace
>> > and sets the frequency to its maximum, say in a busy loop, the thermal cooling
>> > could potentially be ruined.
>> Yes I agree that is a problem in my implementation but I guess the
>> current cpufreq framework does not have anything to stop this. May be
>> with cpufreq_max pmqos patches this will be taken care.
>
> Just a clarification here. I didn't really mean that this is a problem on your implementation.
> But a general problem. And needs to be dealt properly.
>
> And to be frank, assuming that just because we selected userspace at cpufreq level it is
> userland problem, it is a weak solution. Specially considering that this may lead to
> potentially harmful situations.
>
> Not sure this needs to be solved at the generic thermal framework, but at least
> the thermal framework should be aware of who is dealing with the constraint management.
>
> The pmqos patch is a good direction to go, IMO.
Agree! There is a real need to have a framework for the following:
- per-device PM QoS,
- devices throughput,
- thermal constraints and cooling devices,
- min/max performance constraint,
- ...

However for good reasons the current PM QoS framework cannot address
all those requirements at once.

From the code submissions and discussions on the MLs Mark Gross came
with the very good idea of organizing a specific micro-conference
around the constraints framework at LPC [1]. The topics starting with
'lpc2012-cf-' are part of this micro-conference. Most of the topics
-if not all- are about thermal management integration.

[1] https://blueprints.launchpad.net/lpc

I have big expectations from the LPC. Meeting face to face and discuss
the proposals is a good way to make progress, which is not so
efficient on the MLs.

Regards,
Jean

>
>> >
>> > G9. Is there any possibility to have multiple sensors per thermal zone?
>> >
>> > G10. Do we want to represent other sensing stimuli other that temperature? Say,
>> > current sensing?
>> Yes this is good field to look into.
>> >
>> > G11. Do we want to allow for cross zoning policies? Sometimes a policy may use
>> > temperature from different thermal zone in order to better represent what
>> > is going on in its thermal zone.
>> >
>> >> >
>> >> > Any comments are appreciated! Thanks!
>> >
>> >
>> > Thanks to you for starting this up! The above are points that come to my mind now.
>> > I will keep updating the list if something else come to my mind.
>> >
>> >> >
>> >> > -rui
>> >> >
>> >> > _______________________________________________
>> >> > linux-pm mailing list
>> >> > linux-pm@lists.linux-foundation.org
>> >> > https://lists.linuxfoundation.org/mailman/listinfo/linux-pm
>> >>
>> >>
>> >> _______________________________________________
>> >> linux-pm mailing list
>> >> linux-pm@lists.linux-foundation.org
>> >> https://lists.linuxfoundation.org/mailman/listinfo/linux-pm
>> >
>> > All best,
>> >
>> > ---
>> > Eduardo Valentin
> _______________________________________________
> linux-pm mailing list
> linux-pm@lists.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/linux-pm
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html