Solve AMD Ryzen CPU Throttling Issues on Ubuntu After Sleep Mode with This Easy Fix

feature image 2025 05 18 00 53 55

If you’re using an AMD Ryzen processor like the Ryzen 7 4800H on Ubuntu ( which i currently have on my personal laptop ), you might have experienced severe CPU throttling after resuming from suspend mode. This issue is particularly noticeable during CPU-intensive tasks when the processor is stuck at a much lower frequency, typically around 1.4 GHz, even though it is capable of reaching up to 4.3 GHz.

Most users are not even aware of this throttling issue because they are not actively monitoring the CPU frequency. If you are experiencing severe lag, poor responsiveness, and overall slowness after resuming from suspend, these symptoms are the result of your CPU being locked to a lower frequency, which dramatically impacts the performance of course.

This solution should work on other related AMD Ryzen processors as well, including models from the Ryzen 4000, 5000, and even 7000 series. The root cause is linked to ACPI (Advanced Configuration and Power Interface) limitations imposed after suspend, which restrict the processor’s max frequency.

Diagnosing the Problem

First, let’s confirm the issue by running the following commands:

# Check CPU model
lscpu | grep 'Model name'

# Check current CPU frequencies
cat /proc/cpuinfo | grep 'cpu MHz'

# Check CPU governor status
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor | sort | uniq

If you notice the frequencies are stuck below the max potential, the next step is to verify the imposed limits:

# Max frequency limit
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

# Hardware max frequency
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

# BIOS imposed limit
cat /sys/devices/system/cpu/cpu0/cpufreq/bios_limit

If your BIOS limit is lower than the hardware max frequency, you are experiencing ACPI throttling.

Implementing the Fix

To resolve this, follow the steps below:

Step 1: Create a Fix Script

Create a shell script to override the BIOS limitations:

#!/bin/bash
# Fix CPU frequency scaling after suspend

# Get the maximum hardware frequency
MAX_FREQ=$(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq)

# Override BIOS limit if it exists
if [ -f /sys/devices/system/cpu/cpu0/cpufreq/bios_limit ]; then
    echo "BIOS limit detected, attempting to override..."
    echo $MAX_FREQ | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/bios_limit > /dev/null || true
fi

# Set maximum frequency for all CPUs
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq; do
    echo $MAX_FREQ | sudo tee $cpu > /dev/null
done

# Set performance governor for better scaling
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    echo performance | sudo tee $cpu > /dev/null
done

echo "CPU frequency scaling fixed. Max frequency set to $MAX_FREQ Hz with performance governor."

Make the script executable:

chmod +x ~/cpu_frequency_fix.sh

Step 2: Automate the Fix with Systemd

To make the fix persistent after every suspend cycle, create a systemd service:

sudo nano /etc/systemd/system/cpu_frequency_fix.service

Paste the following configuration:

[Unit]
Description=Fix CPU frequency scaling after suspend
After=suspend.target hibernate.target hybrid-sleep.target

[Service]
Type=oneshot
ExecStart=/home/your_username/cpu_frequency_fix.sh

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target

Enable the service:

sudo systemctl enable cpu_frequency_fix.service
sudo systemctl start cpu_frequency_fix.service

Step 3: Kernel Parameter Modifications

To permanently disable ACPI-based throttling, update your GRUB configuration:

sudo nano /etc/default/grub

Add the following parameters:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_pstate=disable processor.ignore_ppc=1 acpi_cpufreq.enable_pcc=false intel_pstate=disable"

Update GRUB:

sudo update-grub

Testing and Monitoring

You can monitor the CPU frequencies using:

watch -n1 "grep 'cpu MHz' /proc/cpuinfo"

To stress-test and verify performance:

stress-ng --cpu $(nproc) --timeout 10s

Conclusion

After applying these steps, your AMD Ryzen CPU should scale correctly even after suspend, unlocking its full performance potential. This solution not only optimizes your Ubuntu experience but also ensures that your processor’s capabilities are fully utilized.

This method has been tested successfully on Ubuntu 25.04 with ASUS TUF Gaming A17 but should work with other AMD-powered systems as well.