[PATCH] cpufreq: powernv: Export frequency throttle state of the chip through sysfs

Subsystems: cpu frequency scaling framework, the rest

STALE3996d

3 messages, 2 authors, 2015-08-27 · open the first message on its own page

[PATCH] cpufreq: powernv: Export frequency throttle state of the chip through sysfs

From: Shilpasri G Bhat <hidden>
Date: 2015-08-27 09:13:39

Create a sysfs 'throttle' attribute per-chip(per-numa-node) to reflect
the throttle state of the chip. The usersapce programs can poll on
this attribute to keep an eye on the throttle state. Currently we
print a log message to notify the user of throttling event. The
performance-sensitive applications can monitor the throttle state
using this attribute.

Following file is created in sysfs:
/sys/devices/system/node/nodeN/throttle
'throttle' attribute has the following values:
0 : frequency is unthrottled
1 : frequency is throttled

Suggested-by: Stewart Smith <redacted>
Signed-off-by: Shilpasri G Bhat <redacted>
---
This patch is based on top of linux-next/master 

 drivers/cpufreq/powernv-cpufreq.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c
index 64994e1..aed6c34 100644
--- a/drivers/cpufreq/powernv-cpufreq.c
+++ b/drivers/cpufreq/powernv-cpufreq.c
@@ -28,6 +28,8 @@
 #include <linux/of.h>
 #include <linux/reboot.h>
 #include <linux/slab.h>
+#include <linux/device.h>
+#include <linux/node.h>
 
 #include <asm/cputhreads.h>
 #include <asm/firmware.h>
@@ -413,6 +415,23 @@ static struct notifier_block powernv_cpufreq_reboot_nb = {
 	.notifier_call = powernv_cpufreq_reboot_notifier,
 };
 
+static ssize_t throttle_show(struct device *dev,
+			     struct device_attribute *attr, char *buf)
+{
+	int i;
+
+	for (i = 0; i < nr_chips; i++)
+		if (chips[i].id == dev->id) {
+			smp_call_function_any(&chips[i].mask,
+					      powernv_cpufreq_throttle_check,
+					      NULL, 1);
+			return sprintf(buf, "%d\n", throttled ||
+						    chips[i].throttled);
+		}
+}
+
+static DEVICE_ATTR(throttle, 0400, throttle_show, NULL);
+
 void powernv_cpufreq_work_fn(struct work_struct *work)
 {
 	struct chip *chip = container_of(work, struct chip, throttle);
@@ -570,6 +589,8 @@ static int init_chip_info(void)
 		cpumask_copy(&chips[i].mask, cpumask_of_node(chip[i]));
 		INIT_WORK(&chips[i].throttle, powernv_cpufreq_work_fn);
 		chips[i].restore = false;
+		device_create_file(&node_devices[chip[i]]->dev,
+				   &dev_attr_throttle);
 	}
 
 	return 0;
-- 
1.9.3

Re: [PATCH] cpufreq: powernv: Export frequency throttle state of the chip through sysfs

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2015-08-27 09:31:34

On Thu, 2015-08-27 at 14:43 +0530, Shilpasri G Bhat wrote:
Create a sysfs 'throttle' attribute per-chip(per-numa-node) to reflect
the throttle state of the chip. The usersapce programs can poll on
this attribute to keep an eye on the throttle state. Currently we
print a log message to notify the user of throttling event. The
performance-sensitive applications can monitor the throttle state
using this attribute.
Performance sensitive applications can *poll* on a sysfs file, which does a
loop over all chips and potentially spams the console with pr_crit() messages ?

That does not sound like a recipe for success.

What problem are we actually trying to solve here?

cheers

Re: [PATCH] cpufreq: powernv: Export frequency throttle state of the chip through sysfs

From: Shilpasri G Bhat <hidden>
Date: 2015-08-27 10:20:08


On 08/27/2015 03:01 PM, Michael Ellerman wrote:
On Thu, 2015-08-27 at 14:43 +0530, Shilpasri G Bhat wrote:
quoted
Create a sysfs 'throttle' attribute per-chip(per-numa-node) to reflect
the throttle state of the chip. The usersapce programs can poll on
this attribute to keep an eye on the throttle state. Currently we
print a log message to notify the user of throttling event. The
performance-sensitive applications can monitor the throttle state
using this attribute.
Performance sensitive applications can *poll* on a sysfs file, which does a
loop over all chips and potentially spams the console with pr_crit() messages ?

That does not sound like a recipe for success.
Okay.
What problem are we actually trying to solve here?
How to export the throttle information to the user space, such that it is
consumable by the applications (for example to discard the benchmark run if the
frequency was throttled)?

We already print the throttle information to console. Can we extend this to
notify/broadcast as an event to the applications?

Thanks and Regards,
Shilpa
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help