Lost 30% in 10 hours while suspended: how does this compare?

As the title says, I measured battery loss last night, and my laptop lost 30% while suspended for 10 hours. I’m using deep sleep, not s2idle, and I have nvme.noacpi=1 set. I have TLP enabled. I’m running Arch Linux.

Not sure how much this affects things, but the ports I have attached are: 2x USB-A, USB-C, and HDMI. I left the HDMI and audio jack plugged-in for this test, like I usually do. I also had a mouse plugged in to one of the USB-A ports. The external monitor was of course receiving no signal, but I’m not sure if it leaks power or not.

How does this compare to your battery drain on suspend? What settings are you doing differently to improve things? Personally, I think it’s time for me to start using hibernation…

No measurements, but yes I only use Sleep when I’m away for an hour or less, else I use Hibernation.

Still 30% in ten hours seems to be quite ‘good’

It’s actually pretty bad by 2015+ standard:

Sounds about right.

When you have USB-A and HDMI cards plugged in, the Framework laptop drains at about 1.5W. So, over 10 hours, that’s 15 (ish)/55 (battery capacity) = approx 27% ish.

Don’t think this has been improved for the 12th gen boards (not sure which generation you have)…

Damn, that’s unfortunate. Thanks for explaining. I wonder if there’s an easy way to disable the laptop internal USB-C ports before suspending, and re-enable them on wake. I’ve seen powertop mention disabling ports before… I’ll look into it and reply in the thread if I get anything working.

Wonder if something like this would do the trick:

And then also add in the conditional logic so that it’s plugged-in device type aware.

1 Like

You could try my script to disable devices: [Guide] Automatically disable USB devices for battery savings

and then use systemd to automatically run it before & after suspend. See Running scripts before and after suspend with systemd – Just another Linux geek for details.

e.g. something like this:

#! /bin/sh
if [ "${1}" == "pre" ]; then
  command=off
else
  command=on
fi
turn_usb --vendor-id=FOO --product-id=BAR $command
4 Likes

Hey that looks pretty good! Thanks, I may try it in the future, I’ll post in this thread if I do. For now I’ve set up suspend-then-hibernate on my laptop, so after two hours of (deep) suspend my laptop will hibernate and no longer lose any more battery. It works well!

Previous experiments for turning off usb ports to improve power usage were disappointing:

It looks like this code is trying to do something else, so it’s worth trying and reporting back! Having HDMI and USB-A expansion modules plugged in but properly turned off could improve power use by a factor of 3 in some cases, while still having the benefit of the modules being securely stored in the body.

On the plus side, thanks to the nvme.noacpi=1 kernel parameter, in most configurations it’s now possible to use “s2idle” with about the same power usage as “deep”, and the advantage of almost instantaneous waking.

Unfortunately in my testing (with nvme.noacpi=1), s2idle lost a lot more than deep. I’ll test again and report back maybe. I would like to switch to s2idle though, because my laptop takes ~20s to come back from deep for some reason. That seems long compared to other comments I’ve seen.

Actually it looks like Framework docs suggest that this fix is only relevant for certain SSDs:

With some SSDs (SN750 with older firmware), there is also one optional workaround needed to get the best suspend battery life. If you are not able to update your SSD firmware, set “nvme.noacpi=1” in your kernel parameters.

I have an SN850, so maybe it makes sense I’m still seeing high battery usage on s2idle with nvme.noacpi=1.

:man_shrugging: