Hi, I’m getting very poor battery life on a Lenovo Legion Slim 5 16APH8 running Zorin OS 18.
On Zorin, near-idle power draw is usually around 23–26 W, while on Windows the same laptop is around 11–12.5 W at near-idle.
powertop --auto-tune made almost no difference, and stopping background update processes did not fix it either.
I also tested prime-select intel, and power draw stayed almost the same, so NVIDIA/hybrid mode does not seem to be the main cause.
I then tested in TTY/text console, and power draw was still over 26 W, which makes GNOME much less likely to be the main issue.
In that stripped-down state, NVIDIA appeared suspended/inactive and nvidia-smi could not communicate with the driver.
At this point I suspect AMD iGPU/display behavior, kernel/firmware/platform power-state issues, or possibly device-driver wakeups.
Has anyone seen this on Zorin/Ubuntu-based distros on this model or similar AMD+NVIDIA Legion laptops, and what diagnostics would you suggest next?
Which Kernel are you using?
uname -r
I recommend testing the 6.14 or the 6.18 kernel.
I'm using 6.17.0-19-generic. I'll test those ones. Thanks!
Tested both 6.14 and 6.18. Power usage stayed at around 24W with both.
Ok, so not Nvidia, or kernel.
Can you relay the terminal output for:
cat /sys/devices/system/cpu/cpu*/cpuidle/state*/name
and
cat /sys/devices/system/cpu/cpu*/cpuidle/state*/time
| CPU |
POLL |
C1 |
C2 |
C3 |
| cpu0 |
23059 |
452769 |
7656664 |
338119853 |
| cpu1 |
23855 |
436458 |
12853245 |
314794037 |
| cpu2 |
18221 |
249629 |
6083068 |
334372091 |
| cpu3 |
23009 |
495552 |
14179894 |
327041960 |
| cpu4 |
5261 |
254255 |
4399236 |
343086582 |
| cpu5 |
16141 |
588837 |
12095481 |
331244521 |
| cpu6 |
8672 |
242539 |
3704840 |
343908847 |
| cpu7 |
19651 |
251966 |
2687009 |
345555299 |
| cpu8 |
22038 |
1349856 |
22654523 |
321171068 |
| cpu9 |
20307 |
282977 |
6407046 |
341768208 |
| cpu10 |
15780 |
368133 |
8631278 |
336698838 |
| cpu11 |
16639 |
271489 |
21220331 |
326717038 |
| cpu12 |
13852 |
577609 |
10638938 |
315017333 |
I made it into a table for your convenience.
Thanks for your help!
1 Like
The C3 column is the Deep Sleep state and you can see it dominates.
This shows that the CPU Idle is performing correctly (admirably, even) and this is not the source of the high power draw.
At any point, did you install TLP?
sudo apt install tlp
I am following your logic, here.
Check if there are two GPU listings (dGPU, iGPU):
lspci -nnk | grep -A3 -E "VGA|3D"
It should show you as on AMDGPU driver
THen,
cat /sys/class/drm/card*/device/power_state
cat /sys/class/drm/card*/device/runtime_status
I won't complain if that is in human readable format, too...
Welcome to the Forum!
When You look in the Energy Settings what Profile is active? Performance, Balanced or Engery Saving?
I ran the commands. lspci shows both GPUs: NVIDIA RTX 4070 Mobile and AMD Phoenix1. The AMD side is using the amdgpu driver. For /sys/class/drm, I got:
card1 -> driver: amdgpu, power_state: D0, runtime_status: active
So the AMD iGPU is fully on / active, which may be expected since it is driving the internal display, but it still leaves open the possibility that the AMD display/iGPU path is using too much power at idle.
I tried TLP and measured power draw at near idle but it was still over 24W. I have had power saving energy profile on for all tests. I tried auto-cpufreq as well with the same results.
Energy saving profile has been on for all tests.
Ah... So you do have an Nvidia card.
I do not know if it has been examined yet and it is a likely culprit:.
Grab the PCI address using:
lspci | grep -i nvidia
Then use that PCI address here (Replace PCI-ADDRESS with the actual numerical one):
cat /sys/bus/pci/devices/PCI-ADDRESS/power/runtime_status
cat /sys/bus/pci/devices/PCI-ADDRESS/power/control
Breakthrough: I checked NVIDIA PCI runtime PM and found the main dGPU 0000:01:00.0 was stuck at power/control=on and runtime_status=active. After running
echo auto | sudo tee /sys/bus/pci/devices/0000:01:00.0/power/control
it changed to power/control=auto and runtime_status=suspended. After that, powerstat dropped to about 9.75 W average. This strongly suggests the dGPU being forced awake is a major cause of the battery drain. The remaining issue is that I have not yet found how to make this state persist reliably across reboot.
1 Like
That is trickier... But a udev rule or a systemd service might work.
Or you could go for simple and setup an autostart script to run a command after log in.
The one clear positive result I got was by manually setting NVIDIA PCI runtime PM to auto for both functions:
echo auto | sudo tee /sys/bus/pci/devices/0000:01:00.0/power/control
echo auto | sudo tee /sys/bus/pci/devices/0000:01:00.1/power/control
sleep 3
cat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status
cat /sys/bus/pci/devices/0000:01:00.1/power/runtime_status
In the two successful runs that I got, both NVIDIA functions then reported
runtime_status=suspended
, and powerstat dropped to about 9.75 W average.
However, this did not survive reboot. After reboot, the bad power state returned. In later tests, even when I again forced both NVIDIA functions to power/control=auto and both showed runtime_status=suspended, total system power could still remain around 24–27 W.
I have a very hard time replicating the good results. Both iGPU and dGPU show that they are suspended but still power draw stays at around 25W. Only idea I have left is going kernel shopping and trying if there is my answer. I have tried 6.18, 6.17 and 6.14 thus far. Any other suggestions?
Did You checked Your BIOS for disabling dGPU?
My laptop has UEFI and it only supports hybrid or discrete gpu. No way fully to disable the dGPU.