How to use AMD P-State in Linux

I dont’t think so. Dissapointed

https://www.phoronix.com/forums/forum/phoronix/latest-phoronix-articles/1376620-linux-6-3-features-amd-auto-ibrs-to-steam-deck-controller-interface-ipv4-big-tcp-more

I still think so:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/Documentation/admin-guide/pm/amd-pstate.rst?id=v6.3-rc1&id2=v6.2

EPP is added in 6.3, autonomous mode is something else

the new state “active” enables EPP when running 6.3. autonomous/guided state EPP is yet another expansion that is still to come.

1 Like

oh thanks

Has anyone encounter the issue of using Pstate in 6.1 resulting in worse battery life compared to acpi-cpufreq

mode guided State EPP v3 for linux 6.4

1 Like

with Kernel 6.3, we can now set amd-pstate=active via Kernel boot parameter, passive still works.

the default EPP mode is performance:

cat /sys/devices/system/cpu/cpufreq/policy0/energy_performance_preference
performance

and the available ones can be checked with

cat /sys/devices/system/cpu/cpufreq/policy0/energy_performance_available_preferences 
default performance balance_performance balance_power power

those sysfs parameters can then be changed like every other sysfs interface (be aware that you need to change it per thread!).

but CPU has to stay in powersave governor for EPP to work:

cpupower frequency-info                                                             
analyzing CPU 2:
  driver: amd_pstate_epp
  CPUs which run at the same hardware frequency: 2
  CPUs which need to have their frequency coordinated by software: 2
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 400 MHz - 5.57 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 400 MHz and 5.57 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 4.46 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: no

Here are some benchmarks, each and everyone can set the value more towards performance or powersaving that they think fits best for their system:

Edit: I will try balance_power first and see if it has issues. So far CPU - frequencies are between 400MHz and 5.5GHz like expected.

2 Likes

I set amd-pstate=active to test. Using zen3 CPU here.
I’m using all the defaults and it seems to be ok.

cpupower.service shows amd_pstate_epp driver with powersave governor.
/sys/devices/system/cpu/cpufreq/policy0/energy_performance_preference shows balance_performance.

cpu frequency
cpu MHz         : 550.000
cpu MHz         : 3966.583
cpu MHz         : 3709.286
cpu MHz         : 550.000
cpu MHz         : 550.000
cpu MHz         : 550.000
cpu MHz         : 550.000
cpu MHz         : 550.000
cpu MHz         : 550.000
cpu MHz         : 550.000
cpu MHz         : 550.000
cpu MHz         : 550.000
cpu MHz         : 3578.267
cpu MHz         : 550.000
cpu MHz         : 550.000
cpu MHz         : 550.000
2 Likes

yes, for some reason, they changed the default to the more sane balance_performance - I still use balance_power though

1 Like

I just set mine to amd-pstate=active but cpu power service won’t start. Not sure why as i had this working before.

Edit:

[ricklinux@eos-plasma ~]$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
amd_pstate_epp
[ricklinux@eos-plasma ~]$ cpupower frequency-info   
analyzing CPU 3:
  driver: amd_pstate_epp
  CPUs which run at the same hardware frequency: 3
  CPUs which need to have their frequency coordinated by software: 3
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 550 MHz - 4.56 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 550 MHz and 4.56 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 550 MHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: no
[ricklinux@eos-plasma ~]$ 
[ricklinux@eos-plasma ~]$ systemctl status cpupower.service
× cpupower.service - Apply cpupower configuration
     Loaded: loaded (/usr/lib/systemd/system/cpupower.service; enabled; preset: disabled)
     Active: failed (Result: exit-code) since Sat 2023-05-06 11:19:36 EDT; 8min ago
    Process: 3564 ExecStart=/usr/lib/systemd/scripts/cpupower (code=exited, status=1/FAILURE)
   Main PID: 3564 (code=exited, status=1/FAILURE)
        CPU: 3ms

May 06 11:19:36 eos-plasma systemd[1]: Starting Apply cpupower configuration...
May 06 11:19:36 eos-plasma systemd[1]: cpupower.service: Main process exited, code=exited, status=1/FAILURE
May 06 11:19:36 eos-plasma systemd[1]: cpupower.service: Failed with result 'exit-code'.
May 06 11:19:36 eos-plasma systemd[1]: Failed to start Apply cpupower configuration.
[ricklinux@eos-plasma ~]$ 

what do you want to set with cpu-power?

That tool lost its value when using epp for me as we shouldn’t change governor anyway and frequencies are mostly non-relevant numbers anyway (the power level that the CPU uses doesn’t depend on frequencies for some generations now)

So we shouldn’t be using cpu power anymore?

depends on what you want to achieve - but most options it offers are non-relevant now.

It can’t change the energy_performance_preference which is the only value that makes sense to modify now. I use a self-written systemd-service with a self-written bash script for that:

cat /etc/systemd/system/set_pstate_epp_preference.service             
[Unit]
Description=Set AMD P-State-EPP preference

[Service]
ExecStart=/usr/bin/set_balance_power.sh

[Install]
WantedBy=multi-user.target
cat /usr/bin/set_balance_power.sh                        
#!/usr/bin/env bash

sleep 5
echo balance_power > /sys/devices/system/cpu/cpufreq/policy0/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy1/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy2/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy3/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy4/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy5/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy6/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy7/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy8/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy9/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy10/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy11/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy12/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy13/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy14/energy_performance_preference
echo balance_power > /sys/devices/system/cpu/cpufreq/policy15/energy_performance_preference

I know that there are better ways to set those values, but I didn’t have time to write them.

that said - it does not make that much of a difference so using the default is ok, too.

1 Like

Mine shows the same as @mcury balance_performance

[ricklinux@eos-plasma ~]$ cat /sys/devices/system/cpu/cpufreq/policy0/energy_performance_preference 
balance_performance

So i can just uninstall cpupower?

How are you getting it to show the cpu frequency? I set mine and cpupower service doesn’t seem to work.

I’m using cpupower to check the driver and the governor being used.
You can leave it installed and disabled just to check these values in case you need.

To check it, issue the following command: cpupower frequency-info

As you can see below, cpupower doesn’t provide the options such as, balance_power balance_performance…

$ cat /etc/default/cpupower
# Define CPUs governor
# valid governors: ondemand, performance, powersave, conservative, userspace.
#governor='ondemand'

Based on @BS686 posts, you would need to use another method to change the values, such as the script he provided.

To check the CPU frequency, I used:

watch -n1 "grep \"^[c]pu MHz\" /proc/cpuinfo"
1 Like

So i should leave this commented then because it’s now controlled by the kernel?

Edit: I get this when run.

[ricklinux@eos-plasma ~]$ cpupower frequency-info
analyzing CPU 12:
  driver: amd_pstate_epp
  CPUs which run at the same hardware frequency: 12
  CPUs which need to have their frequency coordinated by software: 12
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 550 MHz - 4.56 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 550 MHz and 4.56 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 3.46 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: no
[ricklinux@eos-plasma ~]$ 

Does power-profiles-daemon show those options? Just being curios :cat:

powerprofilesctl list

My CPU or firmware on this laptop doesn’t support amd_pstate so I couldn’t check.

I’m not using it… I would leave it commented since governor “ondemand” is not available anymore for amd_pstate_epp, Actually, cpupower does not even show the options we are using now as available in that config file…

I suppose that cpupower.service is failing to launch because of that… You probably set a governor that amd_pstate_epp doesn’t support.

I had it set to ondemand before. But i commented it out now.

Not sure if this is what you asked

$ powerprofilesctl list
  performance:
    Driver:     amd_pstate
    Degraded:   no

* balanced:
    Driver:     amd_pstate

  power-saver:
    Driver:     amd_pstate
1 Like