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
Why not just use auto? The hw will switch between the performance levels automatically on demand.
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
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.
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.
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)
(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.
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!