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

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

 



Hi!

On Thu, May 31, 2012 at 1:13 PM, Eduardo Valentin
<eduardo.valentin@xxxxxx> 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@xxxxxx> 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@xxxxxxxxxxxxxxxxxxxxxxxxxx
>> >> > https://lists.linuxfoundation.org/mailman/listinfo/linux-pm
>> >>
>> >>
>> >> _______________________________________________
>> >> linux-pm mailing list
>> >> linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx
>> >> https://lists.linuxfoundation.org/mailman/listinfo/linux-pm
>> >
>> > All best,
>> >
>> > ---
>> > Eduardo Valentin
> _______________________________________________
> linux-pm mailing list
> linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx
> 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@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux