I don’t know mate, your energy consumption values don’t look abnormal, they are not any different from mine, an idle powered on dGPU will be wasting around 20-30W, while the APU alone will be wasting 10-15W, that’s on par with the battery time, about half on nvidia.
Windows can effectively power-off the dGPUs under nvidia proprietary driver while Linux can’t due to the way their firmware is built and how Linux loads driver, all they do is get to a lower energy state and stay on.
However, Nvidia made some changes to their power management firmware since Turing architecture, and newer cards can indeed shut off completely but you have to set this in the driver since it’s disable by default except for Ampere architecture.
Maybe you could try enabling Runtime D3 and then setting PRIME offloading so that you can use the dGPU only when needed. You can check if Runtime D3 it’s disabled on this command bellow.
Just follow RPMFusion HowTo on enabling PRIME Support and setting Prime Off-Loading, specially loading the driver with the
"NVreg_DynamicPowerManagement=0x02" option, maybe that will bring you closer to Windows behavior, not sure how close though, probably better but not great.
I guess powerd sevice also needs Runtime D3 enabled to work properly.
Other than that, the only way to effectively save power is to not touch the card until needed, which is the
nvidia-xrun approach, blacklisting the nvidia driver, running on the APU and only enabling it to start a Xorg session when wanting to run something on the dGPU.
But that’s an ugly solution and there’s nothing wrong by running on the dGPU if you can.