After first testing each expansion card’s power usage at runtime — part of my in-depth review — I have finally gone around doing a similar set of tests on standby.
TL;DR: everything but USB-C take power, USB-A and DisplayPort take a lot more than they logically should.
Here is a summary of those results.
Device | Wattage | Amperage | Days | Note |
---|---|---|---|---|
baseline | 0.25W | 16mA | 9 | sleep=deep nvme.noacpi=1 |
s2idle | 0.29W | 18.9mA | ~7 | sleep=s2idle nvme.noacpi=1 |
normal nvme | 0.31W | 20mA | ~7 | sleep=s2idle without nvme.noacpi=1 |
1 USB-C | 0.23W | 15mA | ~10 | |
2 USB-C | 0.23W | 14.9mA | same as above | |
1 USB-A | 0.75W | 48.7mA | 3 | +500mW (!!) for the first USB-A card! |
2 USB-A | 1.11W | 72mA | 2 | +360mW |
3 USB-A | 1.48W | 96mA | <2 | +370mW |
1TB SSD | 0.49W | 32mA | <5 | +260mW |
MicroSD | 0.52W | 34mA | ~4 | +290mW |
DisplayPort | 0.85W | 55mA | <3 | +620mW (!!) |
1 HDMI | 0.58W | 38mA | ~4 | +250mW |
2 HDMI | 0.65W | 42mA | <4 | +70mW (?) |
In the above table, all tests were done with the “baseline” configuration (sleep=deep nvme.noacpi=1
) unless otherwise noted (i.e. only the second and third rows use sleep=s2idle
).
Conclusions
- USB-C cards take no extra power on suspend, possibly less than empty slots, more testing required
- USB-A cards take a lot more power on suspend (300-500mW) than on runtime (~10mW, almost negligible)
- 1TB SSD and MicroSD cards seem to take a reasonable amount of power (260-290mW), compared to their runtime equivalents (1-6W!)
- DisplayPort takes a surprising lot of power (620mW), almost double its average runtime usage (390mW)
- HDMI cards take, surprisingly, less power (250mW) in standby than the DP card (620mW)
- and oddly, a second card adds less power usage (70mW?!) than the first, maybe a circuit is used by both?
Test procedure
I have deployed batterylog and my own hack to collect metrics. The actual procedure is:
1. resume
2. add/remove modules, change configuration
3. suspend for 60 minutes
4. collect results
At first, the “suspend” was triggered by hitting the power key, which was reconfigured in logind.conf
to make systemd suspend the machine instead of shutdown. The timing is done with a “wall clock” (an Android phone timer, technically), and the actual delay will vary between tests. the actual delay used will be the one provided by the tlp-stat -b
entry in the log.
We originally set a timer of 5 minutes to expedite the tests, but this was seeing too little variation in the tlp-stat -b
output: the first test led to 2 mAh usage (23mA), but that means the margin of error (±1mAh) is basically half of the measurement. batterylog
reported 0.36W and it’s unclear what its margin of error is.
At one hour, we’d expect 12 times the usage (so 24mAh), and therefore a more reasonable 4% margin of error.
Eventually, we found out about the rtcwake
binary (part of util-linux) to automate that part of the procedure. At the end, our test procedure was:
date ; rtcwake -m no -s 3600 && systemctl suspend ; date ;\
sleep 10 ; date ; /opt/batterylog/batterylog.py ; \
journalctl -b | grep charge_now | tail -2
The mAh
metrics were computed with the excellent qalculate with a formula like this for the simple, ~1h tests:
> (2205mAh−2150mAh)/3601s
(((2205 * meter) * ampère * heure) - ((2150 * meter) * ampère * heure)) /
(3601 * seconde) =
approx. 54,984726 A*m
For longer tests, some creative time diffs were done because qalculate doesn’t support complicated calendar calculations. This run, for example:
oct 12 20:19:01 angela systemd-sleep[149720]: /sys/class/power_supply/BAT1/charge_now = 1836 [mAh]
oct 13 08:52:54 angela systemd-sleep[150028]: /sys/class/power_supply/BAT1/charge_now = 1636 [mAh]
… would result in the formula:
> (1836mAh-1636mAh)/((20h+52min+54s)-(8h+19min+1s))
(((1836 * meter) * ampère * heure) - ((1636 * meter) * ampère * heure)) /
(((20 * heure) + (52 * minute) + (54 * seconde)) - ((8 * heure) + (19 *
minute) + (1 * seconde))) =
approx. 15,917582 A*m
Tests were performed on a 12th gen Framework laptop with the latest BIOS (3.05, as of 2022-10-13), running Debian bookworm, with powerstat --autotune
, and tlp.service
enabled. Other tweaks might be relevant here, but see the full review on things that were done to this laptop.
a note on turbostat
I’ve seen elsewhere people using turbostat to profile the suspend mode, but I couldn’t make this work.
This, for example, doesn’t give the results I’d expect:
root@angela:/home/anarcat# turbostat --show GFX%rc6,Pkg%pc2,Pkg%pc3,Pkg%pc6,Pkg%pc7,Pkg%pc8,Pkg%pc9,Pk%pc10,SYS%LPI rtcwake -m freeze -s 3600 ; /opt/batterylog/batterylog.py ; journalctl -b | grep charge_now | tail -2 ;\
> turbostat --show GFX%rc6,Pkg%pc2,Pkg%pc3,Pkg%pc6,Pkg%pc7,Pkg%pc8,Pkg%pc9,Pk%pc10,SYS%LPI systemctl suspend ; /opt/batterylog/batterylog.py ; journalctl -b | grep charge_now | tail -2
turbostat version 2022.04.16 - Len Brown <lenb@kernel.org>
CPUID(0): GenuineIntel 0x20 CPUID levels
CPUID(1): family:model:stepping 0x6:9a:3 (6:154:3) microcode 0x421
CPUID(0x80000000): max_extended_levels: 0x80000008
CPUID(1): SSE3 MONITOR SMX EIST TM2 TSC MSR ACPI-TM HT TM
CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, HWPpkg, EPB
cpu4: MSR_IA32_MISC_ENABLE: 0x00850089 (TCC EIST MWAIT PREFETCH TURBO)
CPUID(7): No-SGX
CPUID(0x15): eax_crystal: 2 ebx_tsc: 110 ecx_crystal_hz: 38400000
TSC: 2112 MHz (38400000 Hz * 110 / 2 / 1000000)
CPUID(0x16): base_mhz: 2100 max_mhz: 4400 bus_mhz: 100
cpu4: MSR_MISC_PWR_MGMT: 0x000030c2 (ENable-EIST_Coordination ENable-EPB DISable-OOB)
RAPL: 9362 sec. Joule Counter Range, at 28 Watts
cpu4: MSR_PLATFORM_INFO: 0x804043df0811500
4 * 100.0 = 400.0 MHz max efficiency frequency
21 * 100.0 = 2100.0 MHz base frequency
cpu4: MSR_IA32_POWER_CTL: 0x00e4005b (C1E auto-promotion: ENabled)
cpu4: MSR_TURBO_RATIO_LIMIT: 0x2323232323252c2c
35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
37 * 100.0 = 3700.0 MHz max turbo 3 active cores
44 * 100.0 = 4400.0 MHz max turbo 2 active cores
44 * 100.0 = 4400.0 MHz max turbo 1 active cores
cpu4: MSR_CONFIG_TDP_NOMINAL: 0x00000011 (base_ratio=17)
cpu4: MSR_CONFIG_TDP_LEVEL_1: 0x000e00a0 (PKG_MIN_PWR_LVL1=0 PKG_MAX_PWR_LVL1=0 LVL1_RATIO=14 PKG_TDP_LVL1=160)
cpu4: MSR_CONFIG_TDP_LEVEL_2: 0x00150118 (PKG_MIN_PWR_LVL2=0 PKG_MAX_PWR_LVL2=0 LVL2_RATIO=21 PKG_TDP_LVL2=280)
cpu4: MSR_CONFIG_TDP_CONTROL: 0x00000000 ( lock=0)
cpu4: MSR_TURBO_ACTIVATION_RATIO: 0x00000010 (MAX_NON_TURBO_RATIO=16 lock=0)
cpu4: MSR_PKG_CST_CONFIG_CONTROL: 0x74008008 (UNdemote-C1, demote-C1, locked, pkg-cstate-limit=8 (unlimited))
/dev/cpu_dma_latency: 2000000000 usec (default)
current_driver: intel_idle
current_governor: menu
current_governor_ro: menu
cpu4: POLL: CPUIDLE CORE POLL IDLE
cpu4: C1E: MWAIT 0x01
cpu4: C6: MWAIT 0x20
cpu4: C8: MWAIT 0x40
cpu4: C10: MWAIT 0x60
cpu4: cpufreq driver: intel_pstate
cpu4: cpufreq governor: powersave
cpufreq intel_pstate no_turbo: 0
cpu4: MSR_MISC_FEATURE_CONTROL: 0x00000000 (L2-Prefetch L2-Prefetch-pair L1-Prefetch L1-IP-Prefetch)
cpu0: MSR_PM_ENABLE: 0x00000001 (HWP)
cpu0: MSR_HWP_CAPABILITIES: 0x01111638 (high 56 guar 22 eff 17 low 1)
cpu0: MSR_HWP_REQUEST: 0xc0003806 (min 6 max 56 des 0 epp 0xc0 window 0x0 pkg 0x0)
cpu0: MSR_HWP_REQUEST_PKG: 0x8000ff01 (min 1 max 255 des 0 epp 0x80 window 0x0)
cpu0: MSR_HWP_INTERRUPT: 0x00000001 (EN_Guaranteed_Perf_Change, Dis_Excursion_Min)
cpu0: MSR_HWP_STATUS: 0x00000000 (No-Guaranteed_Perf_Change, No-Excursion_Min)
cpu0: EPB: 7 (custom)
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x000000e0 (28 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x42820000dd80f0 (UNlocked)
cpu0: PKG Limit #1: ENabled (30.000 Watts, 28.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (64.000 Watts, 0.002441* sec, clamp DISabled)
cpu0: MSR_VR_CURRENT_CONFIG: 0x000002d0
cpu0: PKG Limit #4: 90.000000 Watts (UNlocked)
cpu0: MSR_DRAM_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: DRAM Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 9
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 13
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x80640000 (100 C)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x88420000 (34 C)
cpu0: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x02000003 (100 C, 100 C)
cpu4: MSR_PKGC3_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu4: MSR_PKGC6_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu4: MSR_PKGC7_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu4: MSR_PKGC8_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu4: MSR_PKGC9_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu4: MSR_PKGC10_IRTL: 0x00000000 (NOTvalid, 0 ns)
rtcwake: assuming RTC uses UTC ...
rtcwake: wakeup from "freeze" using /dev/rtc0 at Wed Oct 12 03:03:31 2022
3601.483927 sec
GFX%rc6 Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc7 Pkg%pc8 Pkg%pc9 Pk%pc10 SYS%LPI
15.63 0.03 0.01 0.00 0.00 0.00 0.00 100.50 99.80
15.63 0.03 0.01 0.00 0.00 0.00 0.00 100.50 99.80
Slept for 1.01 hours
Used 0.75 Wh, an average rate of 0.75 W
For your 54.53 Wh battery this is 1.38%/hr or 33.03%/day
oct 11 20:19:44 angela systemd-sleep[12975]: /sys/class/power_supply/BAT1/charge_now = 3284 [mAh]
oct 11 21:20:04 angela systemd-sleep[13222]: /sys/class/power_supply/BAT1/charge_now = 3235 [mAh]
turbostat version 2022.04.16 - Len Brown <lenb@kernel.org>
CPUID(0): GenuineIntel 0x20 CPUID levels
CPUID(1): family:model:stepping 0x6:9a:3 (6:154:3) microcode 0x421
CPUID(0x80000000): max_extended_levels: 0x80000008
CPUID(1): SSE3 MONITOR SMX EIST TM2 TSC MSR ACPI-TM HT TM
CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, HWPpkg, EPB
cpu1: MSR_IA32_MISC_ENABLE: 0x00850089 (TCC EIST MWAIT PREFETCH TURBO)
CPUID(7): No-SGX
CPUID(0x15): eax_crystal: 2 ebx_tsc: 110 ecx_crystal_hz: 38400000
TSC: 2112 MHz (38400000 Hz * 110 / 2 / 1000000)
CPUID(0x16): base_mhz: 2100 max_mhz: 4400 bus_mhz: 100
cpu1: MSR_MISC_PWR_MGMT: 0x000030c2 (ENable-EIST_Coordination ENable-EPB DISable-OOB)
RAPL: 9362 sec. Joule Counter Range, at 28 Watts
cpu1: MSR_PLATFORM_INFO: 0x804043df0811500
4 * 100.0 = 400.0 MHz max efficiency frequency
21 * 100.0 = 2100.0 MHz base frequency
cpu1: MSR_IA32_POWER_CTL: 0x00e4005b (C1E auto-promotion: ENabled)
cpu1: MSR_TURBO_RATIO_LIMIT: 0x2323232323252c2c
35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
37 * 100.0 = 3700.0 MHz max turbo 3 active cores
44 * 100.0 = 4400.0 MHz max turbo 2 active cores
44 * 100.0 = 4400.0 MHz max turbo 1 active cores
cpu1: MSR_CONFIG_TDP_NOMINAL: 0x00000011 (base_ratio=17)
cpu1: MSR_CONFIG_TDP_LEVEL_1: 0x000e00a0 (PKG_MIN_PWR_LVL1=0 PKG_MAX_PWR_LVL1=0 LVL1_RATIO=14 PKG_TDP_LVL1=160)
cpu1: MSR_CONFIG_TDP_LEVEL_2: 0x00150118 (PKG_MIN_PWR_LVL2=0 PKG_MAX_PWR_LVL2=0 LVL2_RATIO=21 PKG_TDP_LVL2=280)
cpu1: MSR_CONFIG_TDP_CONTROL: 0x00000000 ( lock=0)
cpu1: MSR_TURBO_ACTIVATION_RATIO: 0x00000010 (MAX_NON_TURBO_RATIO=16 lock=0)
cpu1: MSR_PKG_CST_CONFIG_CONTROL: 0x74008008 (UNdemote-C1, demote-C1, locked, pkg-cstate-limit=8 (unlimited))
/dev/cpu_dma_latency: 2000000000 usec (default)
current_driver: intel_idle
current_governor: menu
current_governor_ro: menu
cpu1: POLL: CPUIDLE CORE POLL IDLE
cpu1: C1E: MWAIT 0x01
cpu1: C6: MWAIT 0x20
cpu1: C8: MWAIT 0x40
cpu1: C10: MWAIT 0x60
cpu1: cpufreq driver: intel_pstate
cpu1: cpufreq governor: powersave
cpufreq intel_pstate no_turbo: 0
cpu1: MSR_MISC_FEATURE_CONTROL: 0x00000000 (L2-Prefetch L2-Prefetch-pair L1-Prefetch L1-IP-Prefetch)
cpu0: MSR_PM_ENABLE: 0x00000001 (HWP)
cpu0: MSR_HWP_CAPABILITIES: 0x011c1638 (high 56 guar 22 eff 28 low 1)
cpu0: MSR_HWP_REQUEST: 0xc0003806 (min 6 max 56 des 0 epp 0xc0 window 0x0 pkg 0x0)
cpu0: MSR_HWP_REQUEST_PKG: 0x8000ff01 (min 1 max 255 des 0 epp 0x80 window 0x0)
cpu0: MSR_HWP_INTERRUPT: 0x00000001 (EN_Guaranteed_Perf_Change, Dis_Excursion_Min)
cpu0: MSR_HWP_STATUS: 0x00000000 (No-Guaranteed_Perf_Change, No-Excursion_Min)
cpu0: EPB: 7 (custom)
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x000000e0 (28 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x42820000dd80f0 (UNlocked)
cpu0: PKG Limit #1: ENabled (30.000 Watts, 28.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (64.000 Watts, 0.002441* sec, clamp DISabled)
cpu0: MSR_VR_CURRENT_CONFIG: 0x000002d0
cpu0: PKG Limit #4: 90.000000 Watts (UNlocked)
cpu0: MSR_DRAM_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: DRAM Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 9
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 13
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x80640000 (100 C)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x884f0000 (21 C)
cpu0: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x02000003 (100 C, 100 C)
cpu1: MSR_PKGC3_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu1: MSR_PKGC6_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu1: MSR_PKGC7_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu1: MSR_PKGC8_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu1: MSR_PKGC9_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu1: MSR_PKGC10_IRTL: 0x00000000 (NOTvalid, 0 ns)
0.012176 sec
GFX%rc6 Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc7 Pkg%pc8 Pkg%pc9 Pk%pc10 SYS%LPI
82.13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
90.10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Slept for 1.01 hours
Used 0.75 Wh, an average rate of 0.75 W
For your 54.53 Wh battery this is 1.38%/hr or 33.03%/day
oct 11 20:19:44 angela systemd-sleep[12975]: /sys/class/power_supply/BAT1/charge_now = 3284 [mAh]
oct 11 21:20:04 angela systemd-sleep[13222]: /sys/class/power_supply/BAT1/charge_now = 3235 [mAh]
See how the second suspend didn’t correctly run? It looks like rtcwake
doesn’t correctly trigger the systemd hooks. And indeed, the above it doesn’t even go in the correct sleep more (freeze
instead of mem
).
Another run, with mem
:
root@angela:/home/anarcat# turbostat --show GFX%rc6,Pkg%pc2,Pkg%pc3,Pkg%pc6,Pkg%pc7,Pkg%pc8,Pkg%pc9,Pk%pc10,SYS%LPI rtcwake -m mem -s 3600 ; /opt/batterylog/batterylog.py ; journalctl -b | grep charge_now | tail -2
turbostat version 2022.04.16 - Len Brown <lenb@kernel.org>
CPUID(0): GenuineIntel 0x20 CPUID levels
CPUID(1): family:model:stepping 0x6:9a:3 (6:154:3) microcode 0x421
CPUID(0x80000000): max_extended_levels: 0x80000008
CPUID(1): SSE3 MONITOR SMX EIST TM2 TSC MSR ACPI-TM HT TM
CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, HWPpkg, EPB
cpu6: MSR_IA32_MISC_ENABLE: 0x00850089 (TCC EIST MWAIT PREFETCH TURBO)
CPUID(7): No-SGX
CPUID(0x15): eax_crystal: 2 ebx_tsc: 110 ecx_crystal_hz: 38400000
TSC: 2112 MHz (38400000 Hz * 110 / 2 / 1000000)
CPUID(0x16): base_mhz: 2100 max_mhz: 4400 bus_mhz: 100
cpu6: MSR_MISC_PWR_MGMT: 0x000030c2 (ENable-EIST_Coordination ENable-EPB DISable-OOB)
RAPL: 9362 sec. Joule Counter Range, at 28 Watts
cpu6: MSR_PLATFORM_INFO: 0x804043df0811500
4 * 100.0 = 400.0 MHz max efficiency frequency
21 * 100.0 = 2100.0 MHz base frequency
cpu6: MSR_IA32_POWER_CTL: 0x00e4005b (C1E auto-promotion: ENabled)
cpu6: MSR_TURBO_RATIO_LIMIT: 0x2323232323252c2c
35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
37 * 100.0 = 3700.0 MHz max turbo 3 active cores
44 * 100.0 = 4400.0 MHz max turbo 2 active cores
44 * 100.0 = 4400.0 MHz max turbo 1 active cores
cpu6: MSR_CONFIG_TDP_NOMINAL: 0x00000011 (base_ratio=17)
cpu6: MSR_CONFIG_TDP_LEVEL_1: 0x000e00a0 (PKG_MIN_PWR_LVL1=0 PKG_MAX_PWR_LVL1=0 LVL1_RATIO=14 PKG_TDP_LVL1=160)
cpu6: MSR_CONFIG_TDP_LEVEL_2: 0x00150118 (PKG_MIN_PWR_LVL2=0 PKG_MAX_PWR_LVL2=0 LVL2_RATIO=21 PKG_TDP_LVL2=280)
cpu6: MSR_CONFIG_TDP_CONTROL: 0x00000000 ( lock=0)
cpu6: MSR_TURBO_ACTIVATION_RATIO: 0x00000010 (MAX_NON_TURBO_RATIO=16 lock=0)
cpu6: MSR_PKG_CST_CONFIG_CONTROL: 0x74008008 (UNdemote-C1, demote-C1, locked, pkg-cstate-limit=8 (unlimited))
/dev/cpu_dma_latency: 2000000000 usec (default)
current_driver: intel_idle
current_governor: menu
current_governor_ro: menu
cpu6: POLL: CPUIDLE CORE POLL IDLE
cpu6: C1E: MWAIT 0x01
cpu6: C6: MWAIT 0x20
cpu6: C8: MWAIT 0x40
cpu6: C10: MWAIT 0x60
cpu6: cpufreq driver: intel_pstate
cpu6: cpufreq governor: powersave
cpufreq intel_pstate no_turbo: 0
cpu6: MSR_MISC_FEATURE_CONTROL: 0x00000000 (L2-Prefetch L2-Prefetch-pair L1-Prefetch L1-IP-Prefetch)
cpu0: MSR_PM_ENABLE: 0x00000001 (HWP)
cpu0: MSR_HWP_CAPABILITIES: 0x01141638 (high 56 guar 22 eff 20 low 1)
cpu0: MSR_HWP_REQUEST: 0xc0003806 (min 6 max 56 des 0 epp 0xc0 window 0x0 pkg 0x0)
cpu0: MSR_HWP_REQUEST_PKG: 0x8000ff01 (min 1 max 255 des 0 epp 0x80 window 0x0)
cpu0: MSR_HWP_INTERRUPT: 0x00000001 (EN_Guaranteed_Perf_Change, Dis_Excursion_Min)
cpu0: MSR_HWP_STATUS: 0x00000000 (No-Guaranteed_Perf_Change, No-Excursion_Min)
cpu0: EPB: 7 (custom)
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x000000e0 (28 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x42820000dd80f0 (UNlocked)
cpu0: PKG Limit #1: ENabled (30.000 Watts, 28.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (64.000 Watts, 0.002441* sec, clamp DISabled)
cpu0: MSR_VR_CURRENT_CONFIG: 0x000002d0
cpu0: PKG Limit #4: 90.000000 Watts (UNlocked)
cpu0: MSR_DRAM_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: DRAM Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 9
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 13
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x80640000 (100 C)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x884b0000 (25 C)
cpu0: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x02000003 (100 C, 100 C)
cpu6: MSR_PKGC3_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu6: MSR_PKGC6_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu6: MSR_PKGC7_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu6: MSR_PKGC8_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu6: MSR_PKGC9_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu6: MSR_PKGC10_IRTL: 0x00000000 (NOTvalid, 0 ns)
rtcwake: assuming RTC uses UTC ...
rtcwake: wakeup from "mem" using /dev/rtc0 at Wed Oct 12 14:11:02 2022
264.737865 sec
GFX%rc6 Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc7 Pkg%pc8 Pkg%pc9 Pk%pc10 SYS%LPI
0.84 1609.15 1609.15 1609.15 0.00 1609.15 0.00 1609.15 6967928093745.08
0.84 100.57 100.57 100.57 0.00 100.57 0.00 100.57 6968124499895.82
Slept for 9.04 hours
Used 2.09 Wh, an average rate of 0.23 W
For your 54.53 Wh battery this is 0.42%/hr or 10.20%/day
oct 11 23:03:32 angela systemd-sleep[42344]: /sys/class/power_supply/BAT1/charge_now = 2969 [mAh]
oct 12 08:05:52 angela systemd-sleep[42611]: /sys/class/power_supply/BAT1/charge_now = 2833 [mAh]
That seems to have worked, but then the actual numbers from turbostat
are not really that meaningful. It seems we’re using 100% of the CPU there, and millions of percent of SYS. Anyways, I don’t understand how turbostat could be used that way anyways, since, well, it’s suspended…
assumptions
-
we assume standby battery usage doesn’t fluctuate depending on the level of the battery; as of this writing, the battery is at 95% with an estimated 10h remaining
-
we assume we will get similar results than runtime power usage, that is the SSD and MicroSD expansion cards use a lot of power, HDMI and DisplayPort a little, and USB-A the less, while USB-C should use none at all
-
we have heard theories that USB-A uses a lot more power on suspend than at runtime
-
we assume deep sleep provides better power saving
-
we expect to get close to 14mA drain on suspend
Previous work
The previous results (from @Nils) were:
- System on, locked and screen off, with HDMI & USB expansion cards: around 3W
- s2idle sleep with USB-A and HDMI expansion cards: around 1.9 W
- s2idle sleep with only USB-C expansion cards: around 0.8 W
- deep sleep with USB-A and HDMI expansion cards: around 0.9 W
- deep sleep with only USB-C expansion cards: around 0.4 W
Detailed log at this page which also includes parts of the above narrative.
idle tests
Here is a copy of the results I had for idle power consumption tests:
Device | Minimum | Average | Max | Stdev | Note |
---|---|---|---|---|---|
Screen, 100% | 2.4W | 2.6W | 2.8W | N/A | |
Screen, 1% | 30mW | 140mW | 250mW | N/A | |
Radios | 100mW | 250mW | N/A | N/A | |
USB-C | N/A | N/A | N/A | N/A | negligible power drain |
USB-A | 10mW | 10mW | ? | 10mW | almost negligible |
DisplayPort | 300mW | 390mW | 600mW | N/A | not passive |
HDMI | 380mW | 440mW | 1W? | 20mW | not passive |
1TB SSD | 1.65W | 1.79W | 2W | 12mW | significant, probably higher when busy |
MicroSD | 1.6W | 3W | 6W | 1.93W | highest power usage, possibly even higher when busy |
… for comparison with the above. Notice, in particular, how the USB-A cards only take 10mW here, as opposed to 300mW+ during suspend. The results of the DisplayPort card are also a little disappointing.
Future work
turn USB ports on suspend?
The next step, for me, is to figure out how to plug those leaks. Surely there is a way to turn off those USB sticks before suspend and reactivate them on resume. In that other [TRACKING] High Battery Drain During Suspend thread, there was this suggestion:
I originally thought this was tried in the thread and it didn’t work, but now I can’t find this anymore, so I guess that’s the next step.
Support?
I would love to hear from the @Framework team what’s up with this as well. Back in April, @Daouadi_Philippe contacted Framework support and their answer was:
What’s the status now, 6 months later? I am aware of the beta update to the DP card firmware, and would be happy to try to reproduce the results with this test, provided with there is a way to do it in Linux.
I find it pretty dramatic that USB-A cards, in particular, would use so much power, especially considering they use so little in standby. For me that’s the biggest deal-breaker, as I still have USB-A devices I use on a daily basis… The DisplayPort results are also troubling, also because they use much less during suspend.
I am also available for further tests with the current (or donated!) hardware.
Thanks, and I hope this helps!