[TRACKING] High Battery Drain During Suspend

I’m doing a new run of benchmarks of the suspend time power usage here, using batterylog and my homegrown solution. Hopefully I should be able to corroborate or infirm other results people might have had here. So far I have found those results to be interesting:

Also, reading this thread is kind of painful for two reasons. One, it’s kind of sad how much trouble everyone is having with their battery life. I get it, trust me, I’m in the same boat. But second, it’s kind of a shame it goes a little off the rails…

I don’t think it’s productive to beat the Framework Team over the head with this kind of stuff. They’re working on those issues, maybe not fast enough for your taste, but keep in mind this is a young startup, I don’t think it’s fair to expect them to produce a laptop that has the batter life of a Carbon X1…

Anyways, next up is results, I’m hoping to get something more solid some time this week. My assumptions are that, as usual, the expansion cards are the main culprit, that deep sleep saves a lot of power, and that nvme.noacpi=1 won’t have an effect on my laptop. Apparently, that setting might be specific to s2idle!

See also:

Update: tests are not complete just yet, but first results are trickling in. So far I am confirming the results that the USB-A modules take almost half a watt on standby (500mW for the first, 370-380mW for the n+1), which is much worse than what they do on idle.

It seems like something kicks those cards into high gear on suspend, it’s quite bizarre. I’m going to run more tests to confirm this, with more USB-A cards. I’ll also run the tests with all the other cards I can lay my hands on, but it really seems like the main culprit right now in my fluctuations in suspend battery performance

I’m actually considering creating a whole new thread specifically about expansion card battery use during suspend, since this one is becoming quite long…

4 Likes

I’m a little confused as to how this works.

First off, here, -m freeze doesn’t enter a deep sleep state, at least not as power-saving as s2idle or deep anyways, so it’s normal you’re seeing bad results from this.

But more importantly, I don’t actually understand how or even if turbostat can give you power usage results at all. Normally, the CPU is basically stopped on deep suspend, you only deliver power to the memory to keep that alive, and then resume processing tasks in the CPU once the computer resumes from sleep.

How can turbostat tell anything that happened then? It’s basically suspended… or is it using some other tricks there?

Also, has anyone here actually tried to report this explicitly to the @Framework team?

What I’m seeing right now is major power drain issues with expansion cards, specifically on suspend. It seems like they enter a different power profile than when the computer is idle. So it could be something relatively simple to fix, since the difference really is between suspend and idle…

Anyways, once I get my actual results, I’ll open a new thread about this and cross-reference it here. I’m also considering just opening a formal support request to see if we can get this moving in the team as well.

I did:

1 Like

Thanks to everyone doing detailed tests here. I just want to echo some findings with my 12th Gen and Debian Bookworm/Testing:

  • The USB-A adapters are doing weird things in deep. Removing them doesn’t affect s2idle but they boost current draw in deep to about triple that of s2idle.
  • For my build with a SN770 1TB, the nvme=noacpi parameter isn’t signifcant. s2idle and deep usage are pretty much unaffected by setting/unsetting.
1 Like

Finally finished my benchmarks here and posted the results in a new topic:

2 Likes

Guys, pure ON or OFF is the way forward.

2 Likes

I’ve just run into this issue.

Laptop at about 55% battery, put it into suspend, no power overnight to the apartment, next morning - laptop had shut down of out power.

One USB A stick inserted, one USB mouse.

I’ve noticed when running on battery that having the mouse or the USB stick inserted (I’ve not checked with both) adds something like 4w of battery drain. Having scanned briefly through this thread, I see comments about USB A devices commanding considerable power drain, and indeed, if one or both devices was still drawing power during suspend, that would most certainly account for the shut down overnight.

1 Like

I have been having sleep issues with my frame work since I purchased it (batch 5 or 6) and finally decided to do some testing. I started with a fresh W11 load, installed latest drivers (also on 3.17 bios for my 11th gen i5) and enabled S3 sleep (s0 disabled). I put my W11 system to sleep with 60% battery (set via bios as max) at approx 8pm. The following day at 2pm, I woke the system, logged in and the battery was down to 9%. Obviously s3 sleep, for me, isn’t actually working. Unfortunately, if I have to full shutdown every time just to keep my battery from draining when not in use, then it is time for me to switch to some other system that actually works in this manner. Honestly I don’t really know if this is a Windows 11 issue, a framework laptop issue, or a combination of both. I have used S3 for years on my W7, W10 laptops and never had this much of a battery drain. I guess I could switch to W10 on my framework and test it as well.

1 Like

My impression was that the new Windows approach is to suspend-then-hibernate, which should do S0 until your battery has dropped 5% and then hibernate to disk, after which your laptop is actually off.

On Linux it looks like the power usage under S2idle (ACPI S0 if I’m not mistaken) can, with a bit of tweaking, get you to a 2-day lifetime or so; but it depends a bit on your setup (NVME and expansion cards) what base level you can actually attain. “deep” (ACPI S3, I think) doesn’t actually seem to get you that much better.

Windows going the suspend-then-hibernate route is definitely going to affect how much optimization chip set developers are going to put into getting decent performance from S3, so it is quite conceivable that modern hardware performs significantly worse under S3 than older hardware does.

Framework’s 55Wh battery is definitely on the small side and it’s pretty clear by now that it’s not the best-tuned in its class for power efficiency, but the figures people have been able to get are not too far off from middle-of-the-pack performance either.

2 Likes

Here is the output from powercfg sleepstudy. Doesn’t seem to explain why the drain, just that it exited from standby with 5205 mWh remaining (9%).

System Power State: Standby

START TIME DURATION STATE ENTRY REASON EXIT REASON % CAPACITY REMAINING AT START
21 2023-01-15 15:22:26 21:25:48 Standby Application API Unknown 61%

- Detailed Session Information

- Battery Information

Remaining Charge Capacity At Entry [mWh] 33634
Full Charge Capacity At Entry [mWh] 55009
Remaining Charge Capacity At Exit [mWh] 5205
Full Charge Capacity At Exit [mWh] 54901

- System Event Log

TargetState 4
EffectiveState 4
ProgrammedWakeTimeAc 62048-31687-00T55041
WakeRequesterTypeAc 0
ProgrammedWakeTimeDc 62048-31687-00T55041
WakeRequesterTypeDc 0
1 Like

Yes, that’s a decrease of 28.4Wh over 21.5 hours, so that’s in the 1.3 W range. That’s in the upper regions of Test results for standby battery use of Expansion Cards (on linux). If you have non-USB-C expansion cards plugged into your system you can probably significantly improve performance by unplugging them, but 0.8 W is about the best people have reported so you shouldn’t expect to do much better than that.

1 Like

Appreciate everyone here sharing their findings. Doing testing on our end (new testing) and will have results here in the not too distant future. Thanks everyone.

5 Likes

Thanks Nils, that is a bummer to hear, esp. needing to remove my usb-a cards to try and get more life out of sleep.

Matt, I am certainly looking forward to hearing if there is anything that can be done. (Other than doing a full shutdown to save ones battery when not plugged in.)

Have you given window’s default suspend-then-hibernate a try? On my surface tablet that works just fine (I’ve never changed it from the default): if I leave it unplugged for more than half a day, it will display the “windows” symbol when I open it up but within a few seconds it’s up and running.
I don’t use windows on the framework laptop, so your mileage may vary there.

I did a reinstall, and started using the suspend to hibernate, and that does seem to help a lot.

I recently purchased a Framework laptop for Linux, running Ubuntu 22.10, and have been experiencing the battery drain when closing the lid and the laptop is not plugged in overnight. I do like the laptop but this is a dealbreaker for me as I can’t afford to pick up the laptop to head out the door for some work and find that the battery is drained.

I saw on another forum that there is a BIOS update (3.10) for the 11th Gen Intel that fixes this issue, but that there is no BIOS update for the 12th Gen. Is that the case? Is there any other fix for the 12th Gen running Linux?

(Update: I don’t have a USB-A expansion card, but I do have an HDMI expansion card which others report being the/a culprit. I’ll try without it, though having to remember to unplug in/plug in back in every time is not optimal. I also have an Ethernet expansion card and 2x USB-C cards)

For the record I forked a new thread about the specific problem I reported here: s2idle sleep usually drawing a normal ~1w but SOMETIMES drawing up to 7w and getting the laptop very hot. Here it is: Linux s2idle sleep "random" power usage increase

This way we can gather data and solutions about this problem more specifically and avoid mixing it with the issue of baseline sleep power draw in this thread.
@Nils @Cecile I believe you were among those who experienced this too so feel free to join the discussion with any additional data you have. And if there are other people impacted too of course.

2 Likes

Hi! Just wanted to say that I’m still suffering with this issue. Does anyone at Framework have an estimate when we can see some relief?

Ubuntu 22.04
12th gen Intel
BIOS 03.05

1 Like

For Ubuntu, we recommend:

  • Removing unused expansion cards before suspend.
  • Make sure you’re Framework is going into a deep sleep.
  • Consider hibernate, which is what I prefer on Ubuntu 22.04.

I DM you a pdf of what I use for hibernation on Ubuntu 22.04. This is still very much in-testing, but has worked really well for me if you follow the guide to the letter.

Hibernation once ready to go, will “power down” your laptop, putting its state into a frozen state onto your hard drive. Then pressing power, your laptop powers on, and you’re back to exactly where you left off.

@Matt_Hartley

Please communicate to the dev team that those workarounds are just that, workarounds. Unfortunately, they don’t actually solve the problem and have their own trade-offs.

People in this thread are usually asking for help because they’ve tried everything and are now waiting for the firmware fixes they’ve been told to expect in the “near” future. Constantly being told to try a few well-known workarounds without any actual updates gets frustrating, to say the least. I understand you’re doing your job and trying to be helpful, but it starts to feel like gas lighting after a while.

Removing unused expansion cards before suspend.

This just isn’t a reasonable suggestion. Sure it’ll help, but do you actually expect someone to pry out their expansion cards as they put their laptop away? They might as well just shut it off or ditch the concept of expansion cards entirely.

Make sure you’re Framework is going into a deep sleep.

Deep sleep will still lose 30% battery life overnight.

Furthermore, it takes 10-20s to completely resume from deep sleep (and staggard hardware initialization causes issues with the fingerprint reader, in my case). It doesn’t sound like much, but I’m a bit tired of pulling out my laptop to show someone something only to sit there and wait while they snakily ask me why I don’t just by a macbook.

Consider hibernate, which is what I prefer on Ubuntu 22.04.

This is really slow, especially with 32-64GiB of ram.

Additionally, from a security standpoint, hibernation is a real issue. It’s possible to encrypt swap with the TPM, but I haven’t yet found a way to ensure that the key is ephemeral. Security policies usually just flat-out forbid hibernation.

3 Likes