0

CPU:

$ cat /proc/cpuinfo
processor   : 11
vendor_id   : AuthenticAMD
cpu family  : 23
model       : 96
model name  : AMD Ryzen 5 4600H with Radeon Graphics
stepping    : 1
microcode   : 0x8600104
cpu MHz     : 1397.266
cache size  : 512 KB
physical id : 0
siblings    : 12
core id     : 6
cpu cores   : 6
apicid      : 13
initial apicid  : 13
fpu     : yes
fpu_exception   : yes
cpuid level : 16
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rdpru wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overflow_recov succor smca
bugs        : sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips    : 5988.99
TLB size    : 3072 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm hwpstate cpb eff_freq_ro [13] [14]

OS:

Xubuntu 20.10, everything is updated to latest and greatest as of 01/06.

Kernel:

$ uname -r
5.8.0-34-generic

With this linux distro and CPU combo, I have these available frequencies: 3.00 GHz, 1.70 GHz, 1.40 GHz. Example:

$ cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 1.40 GHz - 3.00 GHz
  available frequency steps:  3.00 GHz, 1.70 GHz, 1.40 GHz
  available cpufreq governors: conservative userspace powersave ondemand performance schedutil
  current policy: frequency should be within 1.40 GHz and 3.00 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency: 3.00 GHz (asserted by call to hardware)
  boost state support:
    Supported: yes
    Active: yes
    Boost States: 0
    Total States: 3
    Pstate-P0:  3000MHz
    Pstate-P1:  1700MHz
    Pstate-P2:  1400MHz

I can't run a frequency of.. lets say 2.9GHz or even 800MHz for example. I want granularity on what frequency my CPU is running at.

I've tried ZenStates:

$ ./zenstates.py -p 2 -f 20 -d 8 -v 66 --enable
$ ./zenstates.py -l
P0 - Enabled - FID = 78 - DID = 8 - VID = 35 - Ratio = 30.00 - vCore = 1.21875
P1 - Enabled - FID = 66 - DID = C - VID = 60 - Ratio = 17.00 - vCore = 0.95000
P2 - Enabled - FID = 20 - DID = 8 - VID = 66 - Ratio = 8.00 - vCore = 0.91250
P3 - Disabled
P4 - Disabled
P5 - Disabled
P6 - Disabled
P7 - Disabled
C6 State - Package - Enabled
C6 State - Core - Enabled

Which works according to cpupower (not really):

analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 1.40 GHz - 3.00 GHz
  available frequency steps:  3.00 GHz, 1.70 GHz, 1.40 GHz
  available cpufreq governors: conservative userspace powersave ondemand performance schedutil
  current policy: frequency should be within 1.40 GHz and 3.00 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency: 1.70 GHz (asserted by call to hardware)
  boost state support:
    Supported: yes
    Active: yes
    Boost States: 0
    Total States: 3
    Pstate-P0:  3000MHz
    Pstate-P1:  1700MHz
    Pstate-P2:  800MHz

But you can't actually change to 800MHz with cpupower. Lowest you can go is 1.4GHz.

I've also tried cpufrequtils, it does nothing.

I've tried ignore_ppc.

I am currently experiencing an interesting bug relating to CPU frequency:

My CPU is running at 400MHz after waking up from a days long suspend. How is that possible?

Current CPU frequency says 3GHz, which is wrong. I know this because of two reasons:

1.

watch -n.1 'cat /proc/cpuinfo|grep MHz'

$ cat /proc/cpuinfo|grep MHz cpu MHz : 399.221 cpu MHz : 399.183 cpu MHz : 399.007 cpu MHz : 399.201 cpu MHz : 399.221 cpu MHz : 399.216 cpu MHz : 399.113 cpu MHz : 399.198 cpu MHz : 398.940 cpu MHz : 399.163 cpu MHz : 399.199 cpu MHz : 399.072

  1. My computer is running sluggish and I'm not running anything that could cause the computer to run slower than normal.

Attempts to go back to normal:

1.

cpupower frequency-set --max 3GHz
cpupower frequency-set --governor ondemand

and

cpupower frequency-set --governor performance

According to cpupower, the commands worked. But my computer was still running at 400MHz.

  1. I rebooted into BIOS, made no changes, exited BIOS, booted into Xubuntu, CPU frequency was still 400MHz.

This below fixed the problem:

I rebooted into windows, rebooted back into Xubuntu, and CPU frequencies were back to normal.

It may be tlp's fault. Heres my tlp config /etc/tlp.conf, I'm only listing whats not commented:

TLP_ENABLE=1
TLP_PERSISTENT_DEFAULT=1
SCHED_POWERSAVE_ON_AC=1
WIFI_PWR_ON_AC=on
WIFI_PWR_ON_BAT=on
USB_AUTOSUSPEND=1

Here is a guy who had the same CPU suspend bug. Here is another guy, same bug.

  • This question sounds like two questions: 1 ⇢ You want to control the frequency your CPU runs at and 2 ⇢ Your CPU runs at a fixed, low frequency after waking from suspend. Is this correct? –  Jan 07 '21 at 06:04
  • Its just #1. I mentioned #2 because the bug magically achieved #1 (but without control over the frequency). – Jeff Luyet Jan 07 '21 at 06:08

1 Answers1

0

If the goal is to have the CPU cores run at very specific speeds, you might be able to use the solution to this question over here. Basically, it works like this:

  1. Install cpufreq from Ubuntu’s repository
  2. Run cpufreq-info to see what governors and limits are in place already
  3. Call cpufreq-set --cpu 0 —min 800MHz --max 800MHz for each CPU core on your machine, setting the MHz (or GHz) value to your desired limit

I have never tried to govern the CPU with a hard minimum, so do not know for certain if you can limit your system with the level of granularity that you are looking for.

  • Is there a difference between the 'Ubuntu Repository' website as opposed to synaptic? The version on the website is the same as the version in synaptic. Version 008-2. I installed the version from synaptic, tried your suggestion (I've never specified --cpu before) and it didn't work. – Jeff Luyet Jan 07 '21 at 16:55
  • 1
    @JeffLuyet Both are the same. Synaptic is a graphical interface to access the Ubuntu repository (and other repositories manually added by the user) – Archisman Panigrahi Jan 12 '21 at 06:58