Laptop CPU dropping to unusably slow frequency on battery

I upgraded my laptop to Fedora 33, and just noticed the CPU is extremely slow and being capped at only ~380 MHz when on battery, which is not normal. On AC it is normal.

CPU governor is ondemand, as expected.

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
ondemand
ondemand
ondemand
ondemand

cpupower shows how the CPU is running below the nominal hardware limits. Great for battery life, terrible for usability:

$ cpupower frequency-info 
analyzing CPU 0:
  driver: intel_cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 20.0 us
  hardware limits: 500 MHz - 2.90 GHz
  available cpufreq governors: conservative userspace powersave ondemand performance schedutil
  current policy: frequency should be within 500 MHz and 2.90 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 375 MHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes

Since I have tlp installed I also tried changing it to AC mode while on battery, but it made no difference. Plugging in the AC is the only action I’ve found which unleashes the CPU to the full frequency range.

I think the issue is/was hardware-related, and the Fedora upgrade just coincidence. After removing the battery and cleaning the physical contacts, the laptop and Fedora seem to be working normally, at least for now.

The hint was that that battery indicator starting flashing a code (4 amber, 1 white) which on this Dell E7250 indicates no battery detected. That is odd since it was running on only battery, though at a very low frequency (only 3.8 multiplier).

The onboard diagnostic (accessed by powering the laptop while holding the FN key) indicated error code 2000-0131 and warned that the battery is not installed. Again even though it was running on battery. The BIOS nevertheless reported the battery is in excellent condition.

I used alcohol, a cotton swab, and a small flat precision screwdriver to gently clean the narrow contacts on the battery, the laptop itself, and the power adapter plug (after unplugging from the wall of course).

Now, on battery the frequency multiplier is in the normal range, fluctuating with load up to the maximum:

$ cpupower frequency-info 
analyzing CPU 0:
  driver: intel_cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 20.0 us
  hardware limits: 500 MHz - 2.90 GHz
  available cpufreq governors: conservative userspace powersave ondemand performance schedutil
  current policy: frequency should be within 500 MHz and 2.90 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 1.25 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes

I will now cycle the battery by discharging it completely and recharging it (capped to 80% in BIOS for longevity).

Hopefully this was just a freak case of poor contact.

1 Like

Here was a similar post, just in case the loose contact to your battery wasn’t actually fixing the cpufreq issue

It would be worthwile checking if someone has reported this as a bug already.

(Simpy disabling thermald.service doesn’t appear to be the best solution)

2 Likes

Interesting. Of note, in that case the CPU is stuck to the minimum frequency, while in my case it was below the minimum (and yet somehow still functioning).

It will be interesting to follow the bug report, but I’m guess and hoping that isn’t the issue with my laptop.

So far since cleaning the contacts, all is well.

1 Like