diff mbox series

drm/lima: add governor data with pre-defined thresholds

Message ID 20210125081804.13016-1-christianshewitt@gmail.com (mailing list archive)
State Superseded
Headers show
Series drm/lima: add governor data with pre-defined thresholds | expand

Commit Message

Christian Hewitt Jan. 25, 2021, 8:18 a.m. UTC
This patch adapts the panfrost pre-defined thresholds change [0] to the
lima driver to improve real-world performance. The upthreshold value has
been set to ramp GPU frequency to max freq faster (compared to panfrost)
to compensate for the lower overall performance of utgard devices.

[0] https://patchwork.kernel.org/project/dri-devel/patch/20210121170445.19761-1-lukasz.luba@arm.com/

Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
---
I have been using Kodi as my test application. If you scroll in library
views with hundreds of list items and the panfrost values the slow GPU
ramp up is quite noticeable and the GUI feels sluggish. As everything
lima runs on is inherently slower than panfrost using devices I believe
it's better to ramp up to max freq quicker.

 drivers/gpu/drm/lima/lima_devfreq.c | 10 +++++++++-
 drivers/gpu/drm/lima/lima_devfreq.h |  2 ++
 2 files changed, 11 insertions(+), 1 deletion(-)

Comments

Lukasz Luba Jan. 27, 2021, 10:24 a.m. UTC | #1
Hi Christian,

On 1/25/21 8:18 AM, Christian Hewitt wrote:
> This patch adapts the panfrost pre-defined thresholds change [0] to the
> lima driver to improve real-world performance. The upthreshold value has
> been set to ramp GPU frequency to max freq faster (compared to panfrost)
> to compensate for the lower overall performance of utgard devices.
> 
> [0] https://patchwork.kernel.org/project/dri-devel/patch/20210121170445.19761-1-lukasz.luba@arm.com/
> 
> Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
> ---
> I have been using Kodi as my test application. If you scroll in library
> views with hundreds of list items and the panfrost values the slow GPU
> ramp up is quite noticeable and the GUI feels sluggish. As everything
> lima runs on is inherently slower than panfrost using devices I believe
> it's better to ramp up to max freq quicker.

It's quite low value for the upthreshold, but I believe you have
experimented and observed that a bit higher (30, 40?) don't work well.
I don't know the Kodi system, though.

You can check if the other frequencies are also used in statistics for
devfreq device:
cat /sys/class/devfreq/<your_gpu>/trans_stats

If they are also used, then it OK (better than stuck at min freq).

Regards,
Lukasz
Lukasz Luba Jan. 27, 2021, 11:11 a.m. UTC | #2
On 1/27/21 10:24 AM, Lukasz Luba wrote:
> Hi Christian,
> 
> On 1/25/21 8:18 AM, Christian Hewitt wrote:
>> This patch adapts the panfrost pre-defined thresholds change [0] to the
>> lima driver to improve real-world performance. The upthreshold value has
>> been set to ramp GPU frequency to max freq faster (compared to panfrost)
>> to compensate for the lower overall performance of utgard devices.
>>
>> [0] 
>> https://patchwork.kernel.org/project/dri-devel/patch/20210121170445.19761-1-lukasz.luba@arm.com/ 
>>
>>
>> Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
>> ---
>> I have been using Kodi as my test application. If you scroll in library
>> views with hundreds of list items and the panfrost values the slow GPU
>> ramp up is quite noticeable and the GUI feels sluggish. As everything
>> lima runs on is inherently slower than panfrost using devices I believe
>> it's better to ramp up to max freq quicker.
> 
> It's quite low value for the upthreshold, but I believe you have
> experimented and observed that a bit higher (30, 40?) don't work well.
> I don't know the Kodi system, though.
> 
> You can check if the other frequencies are also used in statistics for
> devfreq device:
> cat /sys/class/devfreq/<your_gpu>/trans_stats
> 
> If they are also used, then it OK (better than stuck at min freq).

I've just realized that your board might suffer a another issue.
Please apply this patch [1] and run your experiments with upthresholds.


[1] https://lore.kernel.org/lkml/20210127105121.20345-1-lukasz.luba@arm.com/
Christian Hewitt Jan. 27, 2021, 7:35 p.m. UTC | #3
> On 27 Jan 2021, at 3:11 pm, Lukasz Luba <lukasz.luba@arm.com> wrote:
> 
> On 1/27/21 10:24 AM, Lukasz Luba wrote:
>> Hi Christian,
>> On 1/25/21 8:18 AM, Christian Hewitt wrote:
>>> This patch adapts the panfrost pre-defined thresholds change [0] to the
>>> lima driver to improve real-world performance. The upthreshold value has
>>> been set to ramp GPU frequency to max freq faster (compared to panfrost)
>>> to compensate for the lower overall performance of utgard devices.
>>> 
>>> [0] https://patchwork.kernel.org/project/dri-devel/patch/20210121170445.19761-1-lukasz.luba@arm.com/ 
>>> 
>>> Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
>>> ---
>>> I have been using Kodi as my test application. If you scroll in library
>>> views with hundreds of list items and the panfrost values the slow GPU
>>> ramp up is quite noticeable and the GUI feels sluggish. As everything
>>> lima runs on is inherently slower than panfrost using devices I believe
>>> it's better to ramp up to max freq quicker.
>> It's quite low value for the upthreshold, but I believe you have
>> experimented and observed that a bit higher (30, 40?) don't work well.
>> I don't know the Kodi system, though.
>> You can check if the other frequencies are also used in statistics for
>> devfreq device:
>> cat /sys/class/devfreq/<your_gpu>/trans_stats
>> If they are also used, then it OK (better than stuck at min freq).
> 
> I've just realized that your board might suffer a another issue.
> Please apply this patch [1] and run your experiments with upthresholds.
> 
> [1] https://lore.kernel.org/lkml/20210127105121.20345-1-lukasz.luba@arm.com/

I’ve included the patch and with unscientific testing it feels snappier with a larger value than
before. I did revert back to 45 first, but again this feels sluggish when navigating around the
Kodi GUI. My main test is to enter ‘Movies’ in Kodi then start scrolling in a long list. When
the GPU ramps up quickly the experience is snappy, but when it ramps more conservatively
scrolling feels like it stutters, then (once you hit max freq) it becomes fluid.

WP2:~ # cat /sys/class/devfreq/d00c0000.gpu/trans_stat 
     From  :   To
           : 125000000 250000000 285714285 400000000 500000000 666666666 744000000   time(ms)
* 125000000:         0         0         0         0         0         0       264     52720
  250000000:         9         0         0         0         0         0        36      3404
  285714285:         9         3         0         0         0         0        32      2628
  400000000:        18        20        13         0         0         0       191     21140
  500000000:        12        12         8        63         0         0        31     10068
  666666666:       179         5        16       133        66         0        24     29360
  744000000:        37         5         7        46        60       423         0     46016

I’ll send v2 with the value set to 30.

Christian
Lukasz Luba Jan. 28, 2021, 10:01 a.m. UTC | #4
On 1/27/21 7:35 PM, Christian Hewitt wrote:
> 
>> On 27 Jan 2021, at 3:11 pm, Lukasz Luba <lukasz.luba@arm.com> wrote:
>>
>> On 1/27/21 10:24 AM, Lukasz Luba wrote:
>>> Hi Christian,
>>> On 1/25/21 8:18 AM, Christian Hewitt wrote:
>>>> This patch adapts the panfrost pre-defined thresholds change [0] to the
>>>> lima driver to improve real-world performance. The upthreshold value has
>>>> been set to ramp GPU frequency to max freq faster (compared to panfrost)
>>>> to compensate for the lower overall performance of utgard devices.
>>>>
>>>> [0] https://patchwork.kernel.org/project/dri-devel/patch/20210121170445.19761-1-lukasz.luba@arm.com/
>>>>
>>>> Signed-off-by: Christian Hewitt <christianshewitt@gmail.com>
>>>> ---
>>>> I have been using Kodi as my test application. If you scroll in library
>>>> views with hundreds of list items and the panfrost values the slow GPU
>>>> ramp up is quite noticeable and the GUI feels sluggish. As everything
>>>> lima runs on is inherently slower than panfrost using devices I believe
>>>> it's better to ramp up to max freq quicker.
>>> It's quite low value for the upthreshold, but I believe you have
>>> experimented and observed that a bit higher (30, 40?) don't work well.
>>> I don't know the Kodi system, though.
>>> You can check if the other frequencies are also used in statistics for
>>> devfreq device:
>>> cat /sys/class/devfreq/<your_gpu>/trans_stats
>>> If they are also used, then it OK (better than stuck at min freq).
>>
>> I've just realized that your board might suffer a another issue.
>> Please apply this patch [1] and run your experiments with upthresholds.
>>
>> [1] https://lore.kernel.org/lkml/20210127105121.20345-1-lukasz.luba@arm.com/
> 
> I’ve included the patch and with unscientific testing it feels snappier with a larger value than
> before. I did revert back to 45 first, but again this feels sluggish when navigating around the
> Kodi GUI. My main test is to enter ‘Movies’ in Kodi then start scrolling in a long list. When
> the GPU ramps up quickly the experience is snappy, but when it ramps more conservatively
> scrolling feels like it stutters, then (once you hit max freq) it becomes fluid.
> 
> WP2:~ # cat /sys/class/devfreq/d00c0000.gpu/trans_stat
>       From  :   To
>             : 125000000 250000000 285714285 400000000 500000000 666666666 744000000   time(ms)
> * 125000000:         0         0         0         0         0         0       264     52720
>    250000000:         9         0         0         0         0         0        36      3404
>    285714285:         9         3         0         0         0         0        32      2628
>    400000000:        18        20        13         0         0         0       191     21140
>    500000000:        12        12         8        63         0         0        31     10068
>    666666666:       179         5        16       133        66         0        24     29360
>    744000000:        37         5         7        46        60       423         0     46016
> 
> I’ll send v2 with the value set to 30.

Thank you Christian for re-testing it and attaching the stats. It looks
good. I'll add my reviewed-by for v2 patch.

Regards,
Lukasz
diff mbox series

Patch

diff --git a/drivers/gpu/drm/lima/lima_devfreq.c b/drivers/gpu/drm/lima/lima_devfreq.c
index 5686ad4aaf7c..c9854315a0b5 100644
--- a/drivers/gpu/drm/lima/lima_devfreq.c
+++ b/drivers/gpu/drm/lima/lima_devfreq.c
@@ -163,8 +163,16 @@  int lima_devfreq_init(struct lima_device *ldev)
 	lima_devfreq_profile.initial_freq = cur_freq;
 	dev_pm_opp_put(opp);
 
+	/*
+	 * Setup default thresholds for the simple_ondemand governor.
+	 * The values are chosen based on experiments.
+	 */
+	ldevfreq->gov_data.upthreshold = 20;
+	ldevfreq->gov_data.downdifferential = 5;
+
 	devfreq = devm_devfreq_add_device(dev, &lima_devfreq_profile,
-					  DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
+					  DEVFREQ_GOV_SIMPLE_ONDEMAND,
+					  &ldevfreq->gov_data);
 	if (IS_ERR(devfreq)) {
 		dev_err(dev, "Couldn't initialize GPU devfreq\n");
 		ret = PTR_ERR(devfreq);
diff --git a/drivers/gpu/drm/lima/lima_devfreq.h b/drivers/gpu/drm/lima/lima_devfreq.h
index 2d9b3008ce77..b0c7c736e81a 100644
--- a/drivers/gpu/drm/lima/lima_devfreq.h
+++ b/drivers/gpu/drm/lima/lima_devfreq.h
@@ -4,6 +4,7 @@ 
 #ifndef __LIMA_DEVFREQ_H__
 #define __LIMA_DEVFREQ_H__
 
+#include <linux/devfreq.h>
 #include <linux/spinlock.h>
 #include <linux/ktime.h>
 
@@ -18,6 +19,7 @@  struct lima_devfreq {
 	struct opp_table *clkname_opp_table;
 	struct opp_table *regulators_opp_table;
 	struct thermal_cooling_device *cooling;
+	struct devfreq_simple_ondemand_data gov_data;
 
 	ktime_t busy_time;
 	ktime_t idle_time;