Score:1

Laptop slow, missing Performance Power Mode & unable to change cpu governor

ru flag

I recently noticed one of my Ubuntu Laptops had started to run very slow. After doing some searching here for tools to check CPU status and comparing with another PC with the same version I can see the slow laptop is only running at minimum CPU speed.

When I go to Settings -> Power I only see Balanced and Power Saver there is no Performance mode. Other PCs running the same Ubuntu show a Performance mode. Any ideas why it is missing? power-profiles-daemon is installed and running/active.

I installed cpufrequtils and running cpufreq-info I can see all threads are using the governor ondemand but always running at 798 MHz (the CPU minimum=800 Mhz) regardless of the power setting of Balanced or Power Saver:

analyzing CPU 7:
  driver: intel_cpufreq
  CPUs which run at the same hardware frequency: 7
  CPUs which need to have their frequency coordinated by software: 7
  maximum transition latency: 20.0 us.
  hardware limits: 800 MHz - 3.50 GHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance, schedutil
  current policy: frequency should be within 800 MHz and 3.50 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 798 MHz.

Also, When I run sudo cpufreq-set -r -g performance to supposedly set all cores to performance governor, it has no affect on the results above.

The laptop is HP Omen 15-5000na Intel Core i7-4710HQ @ 2.50Ghz x 8 running Ubuntu 22.04.1 LTS This laptop has always been running BIOS version F.40 without issues in the past. There is a newer BIOS (F.48 Rev.A) but HP only supply a Windows .exe

EDIT 1:

The echo performance... command suggested below does make a change to the output of cpufreq-info in that it now says The governor "performance" may decide which speed to use but the CPU frequency is still set to the minimum all the time. And the suggested grep shows ondemand for all threads, until the echo performance then it shows performance for all threads.

Results of sudo turbostat --Summary --show Busy%,Bzy_MHz,IRQ,PkgWatt,PkgTmp,RAMWatt,GFXWatt,CorWatt --interval 5:

turbostat version 21.05.04 - Len Brown <lenb@kernel.org>
CPUID(0): GenuineIntel 0xd CPUID levels
CPUID(1): family:model:stepping 0x6:3c:3 (6:60:3) microcode 0x28
CPUID(0x80000000): max_extended_levels: 0x80000008
CPUID(1): SSE3 MONITOR - EIST TM2 TSC MSR ACPI-TM HT TM
CPUID(6): APERF, TURBO, DTS, PTM, No-HWP, No-HWPnotify, No-HWPwindow, No-HWPepp, No-HWPpkg, EPB
cpu2: MSR_IA32_MISC_ENABLE: 0x00850089 (TCC EIST MWAIT PREFETCH TURBO)
CPUID(7): No-SGX
cpu2: MSR_MISC_PWR_MGMT: 0x00400000 (ENable-EIST_Coordination DISable-EPB DISable-OOB)
RAPL: 5578 sec. Joule Counter Range, at 47 Watts
cpu2: MSR_PLATFORM_INFO: 0x80838f3011900
8 * 100.0 = 800.0 MHz max efficiency frequency
25 * 100.0 = 2500.0 MHz base frequency
cpu2: MSR_IA32_POWER_CTL: 0x0004005d (C1E auto-promotion: DISabled)
cpu2: MSR_TURBO_RATIO_LIMIT: 0x21212223
33 * 100.0 = 3300.0 MHz max turbo 4 active cores
33 * 100.0 = 3300.0 MHz max turbo 3 active cores
34 * 100.0 = 3400.0 MHz max turbo 2 active cores
35 * 100.0 = 3500.0 MHz max turbo 1 active cores
cpu2: MSR_CONFIG_TDP_NOMINAL: 0x00000019 (base_ratio=25)
cpu2: MSR_CONFIG_TDP_LEVEL_1: 0x00000000 ()
cpu2: MSR_CONFIG_TDP_LEVEL_2: 0x00000000 ()
cpu2: MSR_CONFIG_TDP_CONTROL: 0x80000000 ( lock=1)
cpu2: MSR_TURBO_ACTIVATION_RATIO: 0x00000000 (MAX_NON_TURBO_RATIO=0 lock=0)
cpu2: MSR_PKG_CST_CONFIG_CONTROL: 0x1e008405 (UNdemote-C3, UNdemote-C1, demote-C3, demote-C1, locked, pkg-cstate-limit=5 (pc7s))
/dev/cpu_dma_latency: 2000000000 usec (default)
current_driver: intel_idle
current_governor: menu
current_governor_ro: menu
cpu2: POLL: CPUIDLE CORE POLL IDLE
cpu2: C1: MWAIT 0x00
cpu2: C1E: MWAIT 0x01
cpu2: C3: MWAIT 0x10
cpu2: C6: MWAIT 0x20
cpu2: C7s: MWAIT 0x32
cpu2: cpufreq driver: intel_cpufreq
cpu2: cpufreq governor: performance
cpufreq intel_pstate no_turbo: 0
cpu2: MSR_MISC_FEATURE_CONTROL: 0x00000000 (L2-Prefetch L2-Prefetch-pair L1-Prefetch L1-IP-Prefetch)
cpu0: EPB: 4 (custom)
cpu0: MSR_CORE_PERF_LIMIT_REASONS, 0x3d210001 (Active: PROCHOT, ) (Logged: Transitions, MultiCoreTurbo, PkgPwrL2, PkgPwrL1, Amps, Auto-HWP, PROCHOT, )
cpu0: MSR_GFX_PERF_LIMIT_REASONS, 0x0c010000 (Active: ) (Logged: PROCHOT, PkgPwrL1, PkgPwrL2, )
cpu0: MSR_RING_PERF_LIMIT_REASONS, 0x09010000 (Active: ) (Logged: PROCHOT, Amps, PkgPwrL2, )
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x00000178 (47 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x804281d600dc8178 (locked)
cpu0: PKG Limit #1: ENabled (47.000000 Watts, 28.000000 sec, clamp DISabled)
cpu0: PKG Limit #2: ENabled (58.750000 Watts, 0.002441* sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 0
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 0
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x04641000 (100 C)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x8827080c (61 C)
cpu0: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x00000003 (100 C, 100 C)
cpu2: MSR_PKGC3_IRTL: 0x00008842 (valid, 67584 ns)
cpu2: MSR_PKGC6_IRTL: 0x0000886a (valid, 108544 ns)
cpu2: MSR_PKGC7_IRTL: 0x00008891 (valid, 148480 ns)
Busy%   Bzy_MHz IRQ PkgTmp  PkgWatt CorWatt GFXWatt
29.84   800 17045   60  12.01   2.78    0.49
23.35   800 11239   62  11.89   2.54    0.43
33.84   800 18221   61  12.51   3.07    0.72
28.59   800 13540   61  12.39   2.80    0.82
29.03   800 16247   60  12.15   2.85    0.62
18.48   800 12915   58  11.90   1.77    1.44

EDIT 2 / UPDATE / SOLVED:

The answer below regarding PROCHOT flag being set by my hardware was indeed the reason for the CPU throttling. So marked as correct. Many thanks.

As for why the hardware was setting the flag - a bit more information in case it helps others in future as I did the two things below and so far no more PROCHOT. So one of the below things seemed to do the trick I am just not sure which:

(1) I opened up the case to check fans and remove any dust. The two fans were working fine and some dust but not too much. I also sat the laptop on something to sit it higher and hopefully improve airflow underneath as that's where the air intakes are.

(2) My laptop battery had died over a year ago and since then Ubuntu power stats was not even showing a battery was present. But as I use it as a desktop on AC it was not a problem, and no slowdown until recently. However, I had seen some posts where people said that failing/failed battery can sometimes cause PROCHOT so I thought I would actually physically remove the battery from the laptop.

Doug Smythies avatar
gn flag
Please do this command: `sudo turbostat --Summary --show Busy%,Bzy_MHz,IRQ,PkgWatt,PkgTmp,RAMWatt,GFXWatt,CorWatt --interval 5` and post the initial spew of information and a few cycles of print out to your question. I think `turbostat` is included in the linux tools common package. Something seems to be setting your governor back to `ondemand`. Try the primitive method `echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor` and check it `grep . /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor` .
codlord avatar
ru flag
@DougSmythies thanks, I edited my post with the requested info.
Doug Smythies avatar
gn flag
Please see this: `cpu0: MSR_CORE_PERF_LIMIT_REASONS, 0x3d210001 (Active: PROCHOT, )` which tells us the `PROCHOT` bit is active. This is the reason for your limited CPU frequency. Why it is asserted is a function of your hardware. Also notice several logged throttle bits that are no longer asserted.
codlord avatar
ru flag
@DougSmythies o.k. thanks that is very useful. I have done some reading on what PROCHOT means and why it may be set but I think I need to do more. When you say other bits are no longer logged do you mean they have been logged in the past? If so is there a way to clear these logs so that if I find and solve the underlying issue I can see if any throttle bits are subsequently logged? Also if you change your comment to an answer I will mark as the correct answer.
Doug Smythies avatar
gn flag
Yes, the log bits are "sticky" revealing conditions that have occurred in the past, but might not be active at the time. Yes, they can be reset, have a look [here](https://ubuntuforums.org/showthread.php?t=2447564), where I posted a program to reset the log bits, along with some other comments. Note that since then write access to MSRs has been restricted, requiring a boot parameter: `msr.allow_writes=on` or enabling write access later via some command which I forget. I'll convert my previous comment to an answer later.
Doug Smythies avatar
gn flag
After boot MSR write access control is via "/sys/module/msr/parameters/allow_writes", [on/off/default].
Score:0
gn flag

The performance limiting (throttling) reasons are listed in the turbostat startup spew of information when the --quiet command line parameter is not specified. So the lines relevant to this question are:

cpu0: MSR_CORE_PERF_LIMIT_REASONS, 0x3d210001 (Active: PROCHOT, ) (Logged: Transitions, MultiCoreTurbo, PkgPwrL2, PkgPwrL1, Amps, Auto-HWP, PROCHOT, )
cpu0: MSR_GFX_PERF_LIMIT_REASONS, 0x0c010000 (Active: ) (Logged: PROCHOT, PkgPwrL1, PkgPwrL2, )
cpu0: MSR_RING_PERF_LIMIT_REASONS, 0x09010000 (Active: ) (Logged: PROCHOT, Amps, PkgPwrL2, )

And the most relevant part is Active: PROCHOT indicating that the processor external PROCHOT bit was active when the sample was taken, and is the reason the processor CPU clock frequency was throttled to minimum.

The implementation of the PROCHOT bit and what is asserting it is hardware dependant.

It is also interesting that both power limit bits show as logged, but not currently active, and the processor temperature seems a little high for minimum CPU clock frequency.

codlord avatar
ru flag
Just another update from my original question. Although my PROCHOT flag went away, after a couple of months it came back again regardless of temp/CPU load. All my temperature readings were not showing any high temps so although it's possibly risking my hardware I had almost no choice but to disable BD PROCHOT by using the script here: https://askubuntu.com/questions/1120085/how-to-disable-bd-prochot
Doug Smythies avatar
gn flag
@codlord : Thanks for the update.
I sit in a Tesla and translated this thread with Ai:

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.