From: "Pandruvada, Srinivas" <srinivas.pandruvada@intel.com>
To: "rafael@kernel.org" <rafael@kernel.org>,
"daniel.lezcano@linaro.org" <daniel.lezcano@linaro.org>
Cc: "lukasz.luba@arm.com" <lukasz.luba@arm.com>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
"quic_manafm@quicinc.com" <quic_manafm@quicinc.com>
Subject: Re: [PATCH v2 0/7] Add thermal thresholds support
Date: Wed, 21 Aug 2024 20:04:34 +0000 [thread overview]
Message-ID: <1942ed0b96419621583d4a0928883aafd8c2f7f2.camel@intel.com> (raw)
In-Reply-To: <20240816081241.1925221-1-daniel.lezcano@linaro.org>
Hi Daniel,
On Fri, 2024-08-16 at 10:12 +0200, Daniel Lezcano wrote:
> The trip points are a firmware description of the temperature limits
> of a specific thermal zone where we associate an action which is done
> by the kernel. The time resolution is low.
>
> The userspace has to deal with a more complex thermal management
> based
> on heuristics from different information coming from different
> places. The logic is much more complex but based on a bigger time
> resolution, usually one second based.
>
> The purpose of the userspace is to monitor the temperatures from
> different places and take actions. However, it can not be constantly
> reading the temperature to detect when a temperature threshold has
> been reached. This is especially bad for mobile or embedded system as
> that will lead to an unacceptable number of wakeup to check the
> temperature with nothing to do.
>
> On the other side, the sensors are now most of the time interrupt
> driven. That means the thermal framework will use the temperature
> trip
> points to program the sensor to trigger an interrupt when a
> temperature limit is crossed.
>
> Unfortunately, the userspace can not benefit this feature and current
> solutions found here and there, iow out-of-tree, are to add fake trip
> points in the firmware and enable the writable trip points.
>
> This is bad for different reasons, the trip points are for in-kernel
> actions, the semantic of their types is used by the thermal framework
> and by adding trip points in the device tree is a way to overcome the
> current limitation but tampering with how the thermal framework is
> supposed to work. The writable trip points is a way to adjust a
> temperature limit given a specific platform if the firmware is not
> accurate enough and TBH it is more a debug feature from my POV.
>
> The thresholds mechanism is a way to have the userspace to tell
> thermal framework to send a notification when a temperature limit is
> crossed. There is no id, no hysteresis, just the temperature and the
> direction of the limit crossing. That means we can be notified when a
> threshold is crossed the way up only, or the way down only or both
> ways. That allows to create hysteresis values if it is needed.
>
> A threshold can be added, deleted or flushed. The latter means all
> thresholds belonging to a thermal zone will be deleted.
>
So you are proposing to add threshold via netlink, not adding any new
sysfs attribute? That is not clear here.
I think you are adding"
THERMAL_GENL_CMD_THRESHOLD_GET
THERMAL_GENL_CMD_THRESHOLD_ADD
THERMAL_GENL_CMD_THRESHOLD_DELETE
THERMAL_GENL_CMD_THRESHOLD_FLUSH
We need to document our netlink messages including old ones.
Also we should add "MODIFY" as we tend to change them quite often.
Also no hysteresis, that is practically we can't use. Temperature
changes so much that that will flood user space. You will get 100s of
events on CPU temperature if you set temperature threshold in CPU.
We have a whole filtering in driver to avoid this.
You need a rate limit here.
There are multiple user processes can add threshold and there is no
ownership. So one process can cause too much noise to others as it is
multicast.
We worked on a change to filer these as discussed during last LPC, but
not posted yet. This will really need this as this will be too many
messages.
Thanks,
Srinivas
> When a threshold is added:
>
> - if the same threshold (temperature and direction) exists, an error
> is returned
>
> - if a threshold is specified with the same temperature but a
> different direction, the specified direction is added
>
> - if there is no threshold with the same temperature then it is
> created
>
> When a threshold is deleted:
>
> - if the same threshold (temperature and direction) exists, it is
> deleted
>
> - if a threshold is specified with the same temperature but a
> different direction, the specified direction is removed
>
> - if there is no threshold with the same temperature, then an error
> is returned
>
> When the threshold are flushed:
>
> - All thresholds related to a thermal zone are deleted
>
> When a threshold is crossed:
>
> - the userspace does not need to know which threshold(s) have been
> crossed, it will be notified with the thermal zone identifier, the
> current temperature and the previous temperature
>
> - if multiple thresholds have been crossed between two updates only
> one notification will be send to the userspace, it is pointless to
> send a notification per thresholds crossed as the userspace can
> handle that easily when it has the temperature delta information
>
> All aforementioned actions and events lead to a notification to the
> userspace. A threshold change (add, delete and flush) is notified to
> the userspace with the process id responsible of the action.
>
> Along with the kernel changes, the thermal library has been extended
> to provide the different API to deal with the new threshold netlink
> events and commands.
>
> In addition, the thermal-engine skeleton uses these new API by
> flushing and adding thresholds as well as getting the notification
> about these actions.
>
> Overall the series has been tested with the thermal-engine skeleton
> and some selftests which are not part of this series.
>
> Changelog:
> V2:
> - Compute min and max in thermal_zone_device_update() but keep
> the loop as it is (Rafael)
>
> - Include slab.h to fix compilation warnings on some
> architectures
> with kmalloc and kfree (kernel test robot)
>
> Daniel Lezcano (7):
> thermal/core: Compute low and high boundaries in
> thermal_zone_device_update()
> thermal/core: Add thresholds support
> thermal/core: Connect the threshold with the core
> thermal/netlink: Add the commands and the events for the thresholds
> tools/lib/thermal: Make more generic the command encoding function
> tools/lib/thermal: Add the threshold netlink ABI
> tools/thermal/thermal-engine: Take into account the thresholds API
>
> drivers/thermal/Kconfig | 15 ++
> drivers/thermal/Makefile | 3 +
> drivers/thermal/thermal_core.c | 21 +-
> drivers/thermal/thermal_core.h | 6 +-
> drivers/thermal/thermal_netlink.c | 239
> ++++++++++++++++-
> drivers/thermal/thermal_netlink.h | 7 +
> drivers/thermal/thermal_thresholds.c | 247
> ++++++++++++++++++
> drivers/thermal/thermal_thresholds.h | 54 ++++
> drivers/thermal/thermal_trip.c | 27 +-
> include/linux/thermal.h | 3 +
> include/uapi/linux/thermal.h | 30 ++-
> tools/lib/thermal/commands.c | 167 +++++++++++-
> tools/lib/thermal/events.c | 58 +++-
> tools/lib/thermal/include/thermal.h | 40 +++
> tools/lib/thermal/libthermal.map | 5 +
> tools/lib/thermal/thermal.c | 17 ++
> tools/thermal/lib/Makefile | 2 +-
> tools/thermal/thermal-engine/thermal-engine.c | 109 +++++++-
> 18 files changed, 972 insertions(+), 78 deletions(-)
> create mode 100644 drivers/thermal/thermal_thresholds.c
> create mode 100644 drivers/thermal/thermal_thresholds.h
>
next prev parent reply other threads:[~2024-08-21 20:04 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-16 8:12 [PATCH v2 0/7] Add thermal thresholds support Daniel Lezcano
2024-08-16 8:12 ` [PATCH v2 1/7] thermal/core: Compute low and high boundaries in thermal_zone_device_update() Daniel Lezcano
2024-08-16 11:34 ` Rafael J. Wysocki
2024-08-16 12:06 ` Daniel Lezcano
2024-08-19 14:07 ` Rafael J. Wysocki
2024-08-16 8:12 ` [PATCH v2 2/7] thermal/core: Add thresholds support Daniel Lezcano
2024-08-21 20:05 ` Rafael J. Wysocki
2024-08-22 11:30 ` Rafael J. Wysocki
2024-09-04 8:43 ` Daniel Lezcano
2024-08-22 17:20 ` Daniel Lezcano
2024-08-22 20:09 ` Rafael J. Wysocki
2024-08-16 8:12 ` [PATCH v2 3/7] thermal/core: Connect the threshold with the core Daniel Lezcano
2024-08-16 8:12 ` [PATCH v2 4/7] thermal/netlink: Add the commands and the events for the thresholds Daniel Lezcano
2024-08-16 8:12 ` [PATCH v2 5/7] tools/lib/thermal: Make more generic the command encoding function Daniel Lezcano
2024-08-16 8:12 ` [PATCH v2 6/7] tools/lib/thermal: Add the threshold netlink ABI Daniel Lezcano
2024-08-16 8:12 ` [PATCH v2 7/7] tools/thermal/thermal-engine: Take into account the thresholds API Daniel Lezcano
2024-08-21 19:06 ` [PATCH v2 0/7] Add thermal thresholds support Rafael J. Wysocki
2024-08-21 20:04 ` Pandruvada, Srinivas [this message]
2024-08-21 20:20 ` Rafael J. Wysocki
2024-08-21 22:16 ` Pandruvada, Srinivas
2024-08-22 9:41 ` Rafael J. Wysocki
2024-08-22 12:11 ` Pandruvada, Srinivas
2024-08-22 12:52 ` Pandruvada, Srinivas
2024-08-22 13:01 ` Rafael J. Wysocki
2024-08-22 17:08 ` Daniel Lezcano
2024-08-22 18:12 ` Pandruvada, Srinivas
2024-08-22 16:51 ` Daniel Lezcano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1942ed0b96419621583d4a0928883aafd8c2f7f2.camel@intel.com \
--to=srinivas.pandruvada@intel.com \
--cc=daniel.lezcano@linaro.org \
--cc=linux-pm@vger.kernel.org \
--cc=lukasz.luba@arm.com \
--cc=quic_manafm@quicinc.com \
--cc=rafael@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox