[TRACKING] Suspend on linux drains a lot of battery compared to other laptop

Honestly, those are great numbers. Curious if you do anything special there.

I have a 12th gen on Fedora and I usually drain a little more than that overnight if I leave it in suspend. Better than the initial ~8 - 10% when I bought it with no additional set up, but not as good as 1 - 2%.

I use all USB-C expansion cards and recommended TLP settings.

Thank you everyone for your comments. @nadb - just to answer your question of why it is important, it’s a big convenience. This laptop is for non-work related projects and my usage cycle is usually to quickly open it up, do a little work, then put it down. It’s been a while but I recall, hibernate required me to type in my password twice, once to unlock the swap partition, then once to log into Gnome.

In any case, it looks like my mileage may vary. I’ll see how it does once I get my laptop (13" ryzen) and I’ll report back on this thread.

2 Likes

I applied all there recommended setting in the TLP for ubuntu doc.

It does seem to have helped. I now have about 10% loss when suspended for a day. My experience when on battery does not seem to have been impacted… still very responsive. I am running Mint 21.2.

I’m going to keep tracking and report back after a few days.

Cheers,
Rich

1 Like

Hey @Ricardo , by “with battery saver power profile and powertop enabled”, do you mean that you’re just using powertop to monitor the situation, or that you used it to tune any settings? If it’s the latter, do you mind sharing what you changed?

Also - I little off-topic - how’s Pop!_OS been for you, on the FW13 AMD? I’m running it on my System76, but am a little concerned that it might not have the best support for the AMD.

I meant using system 76 power profiles (Battery Life option). I installed powertop and enabled the service, also did the calibrate and auto-tune option before enabling the service. Didn’t do anything else. This morning I noticed it lost 3% overnight, not bad either. I think Pop OS does have support for AMD, they also sell laptops with AMD. I do not game on it (but tempted to try), for now I just use Firefox, 1password, visual code, terminal and discord and it works fine and get between 8 and 10 hours. I think it could be better, yesterday noticed Pop Shop uses a lot of ram and resources in the background so I’m thinking on maybe remove it.

1 Like

So, the recommended TLP tweaks seem to have helped my battery life while awake. Still seeing a 30% drain when on suspend for a full day - 6 AM - 6 PM.

Does it help to be running on battery before suspending?

Cheers,
Rich

Suspending to RAM, this sound about right. We are working to continue to drill this down to a better drain rate, however it’s still a work in progress.

2 Likes

If automatic suspend to hibernation (when the battery reaches a certain threshold) would work that would make things much better. How can I achieve that in Fedora ?

@Geert_Schuring If you used btrfs you’ll need to setup a subvol for swap set a swapfile of size ram+zram and then set the resume uuid and resume offset of the subvol and add the resume module into dracut and edit the systemd sleep config to enable hyrbid sleep.

I’ve got a reply which links to a fedora gist on how to do all the above.

1 Like

Small correction, per the article you linked to.

PPD (power-profiles-daemon) (AMD ONLY)

For Framework Laptop 13 AMD Ryzen™ 7040 Series configurations, you will absolutely want to use power-profiles-daemon for the absolute best experience. Do NOT use TLP. Without getting too detailed, there are things happening behind the scenes that require PPD for the best experience for our Linux customers.

AMD has expressly indicated we want to have users on PPD.

What is the consensus of splitting this thread by chip?
I am finding the desire to search out solutions for suspend power consumption on AMD yet there is not yet a dedicated general or suspend power consumption thread for AMD Frameworks.

Fair question - dates back to 2022, so it’s more than I have time to deal with atm.

It really boils down to:

AMD = PPD
Intel = TLP

If folks care to vary from this, testing TLP on AMD chips, great, make sure to include said data.

Hrm … So I left my fw13 last night unplugged and let it suspend with the 6.7-rc1 kernel with the cros_ec patch applied.

What is interesting is that from a ~1.6W initial suspend/idle draw - it increased linearly overnight (see pic) to around 3-4W ~ by the time I resumed it in the morning.

See PIC:

I did have an issue with baloo indexer this morning - I’ll repeat tonight and see if I get the same curve.

1 Like

Actually on retrospect; I think this just may be a graphing artifact, and I doubt Energy Centre is smart enough to write out data to non-volitile buffer during sleep. Comparing to the battery use graph over the same time-period ; I don’t see the drain that this would entail.

1 Like

Keep on rockin, @jwp I’m following your threads and your efforts are appreciated. :raised_hands:

Thanks - got a lot of work on my hands holding up one of the few (if only) amd FW13 in the South Pacific :wink:

1 Like

Matt, I’m reviving this topic because the discussion got into power save/optimizing battery life while the computer is running (all helpful) but not the original topic: The issue around suspending from Linux is still there. (i.e., suspend is in a shallow level of sleep of “s2idle” that depletes the battery within 6-8 hours)

Doing some research, the command of cat /sys/power/mem_sleep should show me the default state of suspend in braces with other available states next to it such as:
[s2idle] deep.
Then I would be able to change to “deep” via
echo deep | sudo tee /sys/power/mem_sleep
and make this change permanent within GRUB with other commands that I won’t bore you with. The core issue is that the deep option is not available. The deep option would solve the battery depletion during suspend for Linux users. I am using Linux Mint 21.3 MATE. It seems that Framework’s BIOS doesn’t yet support it. I just updated to the 3.03 BIOS version and this is still the case.

Running dmesg | grep ACPI to ensure that Advanced Configuration and Power Interface is enabled, I got a bunch of lines but also some lines indicating a firmware bug:

[    0.440170] ACPI: thermal: [Firmware Bug]: Invalid critical threshold (-274000)
[    0.440177] ACPI: thermal: [Firmware Bug]: No valid trip points!
[    0.440232] ACPI: thermal: [Firmware Bug]: Invalid critical threshold (-274000)
[    0.440239] ACPI: thermal: [Firmware Bug]: No valid trip points!
[    0.440291] ACPI: thermal: [Firmware Bug]: Invalid critical threshold (-274000)
[    0.440297] ACPI: thermal: [Firmware Bug]: No valid trip points!
[    0.440354] ACPI: thermal: [Firmware Bug]: Invalid critical threshold (-274000)
[    0.440360] ACPI: thermal: [Firmware Bug]: No valid trip points!

This is before and after the new BIOS upgrade. Could you guys poke around and figure out why this is labeled a bug and perhaps this is also why the deep suspend option isn’t available. It would be great for us Linux users to be able to shut the lid and come back to our work still there a few hours later instead of a dead battery.

Rich,
That was helpful about extending battery life for a running Linux laptop even if it wasn’t about saving battery life for a suspended Linux laptop. I learned some cool stuff. After installing the power_profiles_daemon, I learned that I have 3 states available and when I really want to save battery, I can switch to power_saver mode. It was nifty enough that I created a bash script that queries the current power state and offers choices to change it. I saved it as “manage_power_profiles.sh” with chmod +x so that I can run it whenever.

Here it is if anyone finds it useful:

#!/bin/bash

# Function to get the current power profile
get_current_profile() {
    current=$(powerprofilesctl list | grep '*' | awk '{print $2}')
    echo "Current power profile: $current"
}

# Function to change the power profile
change_profile() {
    echo "Available profiles:"
    echo "1) performance"
    echo "2) balanced"
    echo "3) power-saver"
    echo -n "Enter the number of the profile you want to switch to: "
    read profile_choice

    case $profile_choice in
        1)
            powerprofilesctl set performance
            echo "Switched to performance profile."
            ;;
        2)
            powerprofilesctl set balanced
            echo "Switched to balanced profile."
            ;;
        3)
            powerprofilesctl set power-saver
            echo "Switched to power-saver profile."
            ;;
        *)
            echo "Invalid choice. Exiting."
            exit 1
            ;;
    esac
}

# Main script logic
echo "Power Profile Management"
echo "------------------------"
get_current_profile
echo ""
echo "Do you want to change the profile? (yes/no)"
read answer

if [[ "$answer" == "yes" ]]; then
    change_profile
else
    echo "No changes made."
fi

echo "Operation completed."
1 Like

I can do that, with my FW13 AMD. What FW model do you have, @Randall_Thomas?

In my experience it takes at least a day or two for my FW13 AMD to go through he 61Wh battery on s2idle.

1 Like