Bug 85021 - radeon: Allow one to set "mid" to power_dpm_force_performance_level
Summary: radeon: Allow one to set "mid" to power_dpm_force_performance_level
Status: NEW
Alias: None
Product: Drivers
Classification: Unclassified
Component: Video(DRI - non Intel) (show other bugs)
Hardware: All Linux
: P1 enhancement
Assignee: drivers_video-dri
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-09-23 02:14 UTC by higuita
Modified: 2016-03-23 18:54 UTC (History)
3 users (show)

See Also:
Kernel Version: 3.16.2
Subsystem:
Regression: No
Bisected commit-id:


Attachments
Script showing some information on the gpu (337 bytes, application/x-shellscript)
2014-09-24 01:28 UTC, Alexandre Demers
Details

Description higuita 2014-09-23 02:14:15 UTC
On a radeon module with dpm enable, one can set the power_dpm_force_performance_level to auto, low and high. All fine, but my card have a mid performance setup and is very useful, as the low is too slow when i have some contant graphic usage (usually tvtime running), but auto and high are too fast and hot for that usage, wasting energy and overheating the system without need.

If i could setup the mid profile, the performance would be good, but not the card maximum.

So the current setup is good for "little"/"a lot" GPU usage, but is missing the mid support for those "moderate" GPU usage where the low is too litle and the high is too much.

[    9.411247] switching to power state:
[    9.411343] 	ui class: performance
[    9.411480] 	internal class: ovrdrv 
[    9.411664] 	caps: video 
[    9.411848] 	uvd    vclk: 0 dclk: 0
[    9.411943] 		power level 0    sclk: 15000 mclk: 42000 vddc: 1000
[    9.412047] 		power level 1    sclk: 30000 mclk: 60000 vddc: 1080
[    9.412144] 		power level 2    sclk: 80000 mclk: 70000 vddc: 1160
[    9.412241] 	status: r
Comment 1 Alex Deucher 2014-09-23 13:12:38 UTC
Why not just use auto?  The hw will switch between the performance levels automatically on demand.
Comment 2 higuita 2014-09-23 23:03:37 UTC
Auto will jump from level 0 to level 2, i never see level 1 being used in any place/app other than a maximized glxgears.

tvtime or chrome+youtube+thml5 will jump the level from 0 to 2, but if i force low i see no problem at all, no drop frames, no lag. Only if i try to open more things at same time (many terminals doing dmesg, many videos playing, some 3d game) it starts to get slower. 
so clearly the high is too much, low is enough for most use cases and mid would be perfect.  Auto will not put it in mid.

That is why i wanted to manually setup the mid level, the computer keeps cool and the gpu power is good enough for almost all load (other than heavy 3D games)

also, its a little strange that low and high is supported in dpm setting, but not the mid... profile setting had the low, mid, high and the auto
Comment 3 Alexandre Demers 2014-09-24 01:25:47 UTC
By curiousity, how do you monitor the level your GPU is using. And what GPU are you using?

I'll share a small script I'm using to loop through information about my GPU (Cayman) where I can clearly all three levels being used. Maybe you could try it and see if you can catch a mid level being used.
Comment 4 Alexandre Demers 2014-09-24 01:28:13 UTC
Created attachment 151651 [details]
Script showing some information on the gpu

you will have to run this script using "sudo" or somthing similar. It shows all information on sensors and the current level the GPU is using. If you can some errors using it, don't worry, you maybe missing a tool or two (about sensors), but you'll be able to track your gpu's power level.
Comment 5 higuita 2014-09-24 02:49:31 UTC
The gpu is one old ATI HD2600XP AGP:

01:00.0 VGA compatible controller: AMD/ATI [Advanced Micro Devices, Inc.] RV630 XT [Radeon HD 2600 XT AGP]

I usually use this command to see what level the gpu is:

cat /sys/kernel/debug/dri/64/radeon_pm_info

I run your script and got the same result. Using auto i get the low level on normal desktop use, high on tvtime, youtube and 3D games, mid i can only get if i do a maximized glxgears or a "while true; do dmesg; sleep .3; done"... and on this last one, after a few seconds, it jumps to high. Also, stopping the applications and wait a few seconds, the GPU will downgrade from level 2, to level 1 for 1 second, then level 0

here one example to the leve downgrade:

balanced
uvd    vclk: 0 dclk: 0
power level 1    sclk: 30000 mclk: 60000 vddc: 1080
53000
balanced
auto
uvd    vclk: 0 dclk: 0
power level 1    sclk: 30000 mclk: 60000 vddc: 1080
k8temp-pci-00c3
Adapter: PCI adapter
temp-Core0:   +30.0°C  
temp-Core1:   +34.0°C  

radeon-pci-0100
Adapter: PCI adapter
temp-GPU:     +52.0°C  (crit = +120.0°C, hyst = +90.0°C)

w83627thf-isa-0290
Adapter: ISA adapter
in0:          +1.34 V  (min =  +1.10 V, max =  +1.55 V)
in1:          +2.99 V  (min =  +2.85 V, max =  +3.15 V)
in2:          +3.33 V  (min =  +3.14 V, max =  +3.47 V)
+5V:          +4.96 V  (min =  +4.51 V, max =  +5.49 V)
in4:          +4.08 V  (min =  +4.08 V, max =  +4.08 V)
5VSB:         +5.04 V  (min =  +4.51 V, max =  +5.49 V)
Vbat:         +3.30 V  (min =  +2.40 V, max =  +3.60 V)
fan-CPU:     1360 RPM  (min =  998 RPM, div = 8)
fan-Power:    774 RPM  (min =  664 RPM, div = 8)
fan-Case:    1298 RPM  (min =  799 RPM, div = 8)
temp-M/B:     +27.0°C  (high = +40.0°C, hyst = +37.0°C)  sensor = thermistor
temp-CPU:     +36.5°C  (high = +53.0°C, hyst = +50.0°C)  sensor = thermistor
temp-Case:    +30.7°C  (high = +37.1°C, hyst = +36.0°C)  sensor = thermistor
cpu0_vid:    +1.475 V
beep_enable: enabled

balanced
uvd    vclk: 0 dclk: 0
power level 0    sclk: 15000 mclk: 42000 vddc: 1000
52000
balanced
auto
uvd    vclk: 0 dclk: 0
power level 0    sclk: 15000 mclk: 42000 vddc: 1000
k8temp-pci-00c3
Adapter: PCI adapter
temp-Core0:   +30.0°C  
temp-Core1:   +33.0°C

By the way, on 3D games, the GPU can reach 80-84ºC, but with tvtime it only goes to 60-65ºC (both on level 2)
Comment 6 Alex Deucher 2014-09-24 03:00:20 UTC
(In reply to higuita from comment #2)
> Auto will jump from level 0 to level 2, i never see level 1 being used in
> any place/app other than a maximized glxgears.
> 
> tvtime or chrome+youtube+thml5 will jump the level from 0 to 2, but if i
> force low i see no problem at all, no drop frames, no lag. Only if i try to
> open more things at same time (many terminals doing dmesg, many videos
> playing, some 3d game) it starts to get slower. 
> so clearly the high is too much, low is enough for most use cases and mid
> would be perfect.  Auto will not put it in mid.
> 

It's all based on GPU load.  The hw steps through the performance levels based on demand.

> That is why i wanted to manually setup the mid level, the computer keeps
> cool and the gpu power is good enough for almost all load (other than heavy
> 3D games)
> 
> also, its a little strange that low and high is supported in dpm setting,
> but not the mid... profile setting had the low, mid, high and the auto

The problem is twofold:

1. Most asics do not provide an easy way to lock the performance level to just the mid state.

2. Only relatively old asics support a real mid performance level.  The last few generations only support low and high limits and the hw changes through a large number of dynamically generated states in between.

The only way to do that would be to dynamically generate a new state with mid being the high state (e.g., low mid mid, or low mid, etc. depending on the asic) and then switch to that state and lock it into the "high" performance level of that state.  Unforunately, a full state change is a relatively heavy operation compared to just locking the performane level of an already loaded state.
Comment 7 higuita 2014-09-24 22:53:55 UTC
Ok, so if "mid" would work for old cards and is not easy to implement, probably is not worth the trouble as most people don't manually set the power level.

i will try to solve my problem another way or maybe finally get a new computer :)

If you also agree, this can be closed

thanks!

Note You need to log in before you can comment on or make changes to this bug.