seerge / g-helper

Lightweight Armoury Crate alternative for Asus laptops and ROG Ally. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models
https://g-helper.com
GNU General Public License v3.0
7.68k stars 266 forks source link

Can't switch to GPU Eco Mode on G14 2023 #345

Closed Thrakios closed 1 year ago

Thrakios commented 1 year ago

The bug is very simple. Selecting Eco Mode does nothing other than freeze the UI for a few moments, then later return to Standard mode.

The log is attached. log.txt

seerge commented 1 year ago

@Thrakios hello, i indeed see

5/9/2023 11:32:06 PM: GPUEco = 1 : 0

in a log, app sends command and gets 0 as response (i.e. asus bios refuses to switch)

  1. Can you try to run following in powershell (As admin), it should do same thing (disable GPU)

    (Get-WmiObject -Namespace Root/WMI -Class AsusAtkWmi_WMNB).DEVS(0x00090020, 1)
  2. What is your current nvidia optimus setting?

Thrakios commented 1 year ago

Inputing the command, I get the following output:

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     :
__DYNASTY        : __PARAMETERS
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
result           : 0
PSComputerName   :

My optimus setting is on "automatically select"

seerge commented 1 year ago

Oke, result : 0 is pretty much same thing (bios refuses)

  1. Can you try to set Optimus settings to actual "Optimus" (from auto) ? and see if it make a difference?
  2. If doesn't help - try to set Optimus - to Nvidia GPU only, and try again?
seerge commented 1 year ago

@Thrakios also (next to question above) - do you by any chance have external screen connected as well?

Thrakios commented 1 year ago
  1. There is no "Optimus" setting in my Nvidia Control Panel - Manage 3D settings options. There are no "display settings" either...
  2. Nvidia GPU only doesn't fix the issue
  3. There is no external screen connected

Oddly enough, it seem that after a reboot, G-Helper manages to disable the dGPU once, and only once. You can see it at the very bottom of the log: log.txt

seerge commented 1 year ago

@Thrakios

Under optimus I meant this : Screenshot 2023-05-10 110714

From log i indeed see few times (i assume after restarts?) when eco command succeeds (in both directions even):

5/10/2023 11:57:47 AM: GPUEco = 1 : OK
...
5/10/2023 11:57:52 AM: GPUEco = 0 : OK

So the goal is to find what app (or driver) is blocking GPU from disabling after.

  1. What happens if you try Eco mode in armoury?
  2. Can you click on GPU activity in system tray, and try to manually kill some of those processes? Screenshot 2023-05-10 111132
seerge commented 1 year ago

@Thrakios Another thought, you can "reload" GPU driver in windows by pressing Ctr+Shift+WinKey+B . You screen will blink black for a second. Can you try that and disable gpu after?

Thrakios commented 1 year ago

I've tried Eco Mode both after enabling Optimus and Nvidia GPU only mode. It worked. However from there, when I return to Standard Mode, then try to get back into Eco Mode it doesn't work properly:

Screenshot 2023-05-10 181737

Thrakios commented 1 year ago

I have tried the shortcut, and my screen blinked but it still didn't manage to enable Mode. So far it seems only rebooting allows me to enable Eco Mode, and just once.

seerge commented 1 year ago

@Thrakios oke, clear.

Can you try to disable and then enable 4080 in device manager (that should theoretically kill ALL possible processes using GPU) ? And then try Eco again?

If doesn't help - I wonder if uninstallling nvida drivers (using https://www.guru3d.com/files-details/display-driver-uninstaller-download.html ) and reinstalling fresh ones would help ? :|

seerge commented 1 year ago

@Thrakios P.S. I have noticed you have AMD Adrenaline running (in tray), can you remove it from startup completely (from task manager)? May be amd is messing that ...

Thrakios commented 1 year ago

So : 1 - Disabling just AMD Adrenaline did not fix the issue. 2 - Disabling then enabling the dGPU and then quickly enabling GPU Eco Mode works ! Finally there's something that works.

Yet Nvidia GPU activity (which started working) said there are no processes running, and still I couldn't switch without disabling and enabling it.

I'll try to uninstall-reinstall drivers now!

seerge commented 1 year ago

@Thrakios ok, that's cool :) let me know if driver reinstall helps

Thrakios commented 1 year ago

@seerge Unfortunately the driver reinstall didn't help :(

Thrakios commented 1 year ago

Further I've tried an Nvidia Driver rollback, from the newest Nvidia-provided one to the slightly older ASUS-recommended (Version V31.0.15.2892) one. It also didn't resolve the issue.

seerge commented 1 year ago

I have adedd a "workaround" to the app.

It will try to disable GPU in a normal way, and if it fails will restart GPU in device manager and try to disable again. Only for case when you click "Eco" mode manually (i.e. not in Optimized mode switching)

Try this build, and post a log : GHelper.zip

:)

Thrakios commented 1 year ago

Thanks! Unfortunately it didn't work. I tried twice, the second time running it with administrator privileges but it didn't fix it. log.txt

seerge commented 1 year ago

@Thrakios and now : GHelper.zip

Thrakios commented 1 year ago

@seerge Here's the log, didn't work unfortunately log.txt

seerge commented 1 year ago

Oke

5/10/2023 8:24:43 PM: GPUEco = 1 : 0
5/10/2023 8:24:43 PM: Trying to disable GPU in a hard way
5/10/2023 8:24:43 PM: Device ID:PCI\VEN_10DE&DEV_27E0&SUBSYS_182D1043&REV_A1
5/10/2023 8:24:46 PM: Microsoft PnP Utility

Restarting device:         PCI\VEN_10DE&DEV_27E0&SUBSYS_182D1043&REV_A1\4&2b5a5da1&0&0009
Device restarted successfully.

5/10/2023 8:25:36 PM: GPUEco = 1 : 0

So it actually managed to restart device , but eco is still refused.

Can you try to run manually in powershell as admin

pnputil /restart-device /device-id "PCI\VEN_10DE&DEV_27E0&SUBSYS_182D1043&REV_A1\4&2b5a5da1&0&0009"

And then try to set Eco mode in app again ?

seerge commented 1 year ago

It could be that it needs to be disabled -> enabled (as you did manually), instead of restarting

For that you can try : GHelper.zip

Thrakios commented 1 year ago

I manually tried the powershell command, unfortunately it didn't work. I also tried the new release, here's the log. Still did not work :/

log.txt

seerge commented 1 year ago

@Thrakios does manually disabling / enabling GPU in device manager (visually, as you originally did) and then setting Eco still work for you ? Or it worked only once ? :|

I'm asking cause may be it needs some delay between actions, to actually succeeed ....

seerge commented 1 year ago

@Thrakios and if manual disabling doesn't work anymore, I thought about 2 other general things to check/try

  1. Rest that I suggested to Avacado_I_Guess from reddit : You may want to do a reset : turn off laptop normally, press and hold power button for like 30-40 seconds, then boot it again (it will take a bit slower to boot). This will reset all hardware settings

  2. Check if fast boot is ON or OFF in bios settings (F2 on boot). And try to set opposite (i.e. if it's ON turn it OFF)

Thrakios commented 1 year ago

Manually disabling / enabling GPU does still allow to enable Eco mode. I guess both disabling, and enabling takes a bit of time. Trying to time it, I had 3:30 seconds to disable, and 2:15 seconds to enable. Then I set Eco Mode almost immediately (within 2 seconds).

seerge commented 1 year ago

@Thrakios oke, try version with 2 second delays GHelper.zip

/me keeping fingers crossed

Thrakios commented 1 year ago

Still did not work unfortunately. It did work twice in a row at first so I was quite excited, but it seems it was a fluke. When I tried again it didn't work. log.txt

seerge commented 1 year ago

You can try to find appropriate delays by running 3 commands (with delays inbetween) in powershell as admin :

pnputil /disable-device /deviceid "PCI\VEN_10DE&DEV_27E0&SUBSYS_182D1043&REV_A1\4&2b5a5da1&0&0009"
pnputil /enable-device /deviceid "PCI\VEN_10DE&DEV_27E0&SUBSYS_182D1043&REV_A1\4&2b5a5da1&0&0009"
(Get-WmiObject -Namespace Root/WMI -Class AsusAtkWmi_WMNB).DEVS(0x00090020, 1)
seerge commented 1 year ago

@Thrakios or try build with 4 second delays between each : GHelper.zip

Thrakios commented 1 year ago

The commands, when I input them manually to powershell in Admin Mode don't seem to disable the dGPU. 😅

Here's a screen recording where I do the steps manually, hoping it may help. (The recording tool bugs a bit, don't mind it)

https://github.com/seerge/g-helper/assets/133026331/dabb5b4f-7816-4f96-9a21-86ab24c00064

seerge commented 1 year ago

@Thrakios then i can only blame his majesty windows, as pnputil is supposed (and actually seem) to do exactly same as you do manually in device manager.

Do you run powershell commands with delay? Try to run them with big delays, like 10 seconds or so. If it doesn't work, i can't help here . At least there is some workaround.

Did you had a chance to try bios reset / fast boot things i mentioned before ?

Thrakios commented 1 year ago

Screenshot 2023-05-10 225709 Here's a screenshot following the first command, with device manager on the side. It doesn't seem to have disabled the dGPU. Did I do something wrong?

Thrakios commented 1 year ago

PS : I did try with disabling fast boot, and had done a reset yesterday

seerge commented 1 year ago

Screenshot 2023-05-10 225709 Here's a screenshot following the first command, with device manager on the side. It doesn't seem to have disabled the dGPU. Did I do something wrong?

Oke, i have accidentaly put extra - in the param name (but not in the app code tho)

Try this (with delays)

pnputil /disable-device /deviceid "PCI\VEN_10DE&DEV_27E0&SUBSYS_182D1043&REV_A1\4&2b5a5da1&0&0009"
pnputil /enable-device /deviceid "PCI\VEN_10DE&DEV_27E0&SUBSYS_182D1043&REV_A1\4&2b5a5da1&0&0009"
(Get-WmiObject -Namespace Root/WMI -Class AsusAtkWmi_WMNB).DEVS(0x00090020, 1)
seerge commented 1 year ago

@Thrakios or just try this build (i have extended timings delays even more) : GHelper.zip

pettijohn commented 1 year ago

I've experienced this same issue from original post on a 2023 G14 with RTX 4070. I wrote this powershell script:

$device = Get-PnpDevice | Where-Object { $_.FriendlyName -imatch 'NVIDIA' -and $_.Class -eq 'Display' }
Disable-PnpDevice $device.InstanceId -Confirm:$true
Enable-PnpDevice $device.InstanceId -Confirm:$true

I assume the drivers are buggy and don't seem to properly "release" when programs are done, and g-helper hangs as discussed. My workaround is to leave the device on Eco mode except when I'm actively using the GPU. When I'm done using the GPU, I quit all relevant programs, run my script, and then enable Eco mode in G-helper. It's far from ideal but a suitable workaround while we wait for better drivers from bleeding edge hardware.

Related, I have a bug where the device bugchecks (BSOD) when trying to sleep while an external display is connected to the NVIDIA GPU. I was able to capture a memory dump and NVIDIA confirmed they can reproduce the issue, so it's a matter of time until they triage & fix it.

Thrakios commented 1 year ago

@pettijohn Your powershell script worked! Whereas I didn't manage to get the other one disabling my GPU for some reason I don't quite understand

seerge commented 1 year ago

@Thrakios @pettijohn did you try build from my last post, and if so can you post logs from it after trying eco?

As if pnputil doesn’t do the thing i can try powershells analog.

seerge commented 1 year ago

Just in case I have pushed 0.60 https://github.com/seerge/g-helper/releases/tag/v0.60 (with pnputil enable / disable) to collect more feedback.

pettijohn commented 1 year ago

Tried to switch to Eco mode at about 2:15. Tried twice in the app, never succeeded. Then I ran my above powershell script, started g-helper, and successfully switched to Eco mode. I also included a few exceptions from the logs.

v060.log

seerge commented 1 year ago

@pettijohn i see that nvidia API is completely turned off in your case. Looks like driver in windows is acting in aftermath from switching eco / standard ? So app didn't even try to restart GPU via device manager, as it didn't get device id :) I can try to add a workaround using powershell functions

seerge commented 1 year ago

@pettijohn @Thrakios you can try powershell way of restarting :

GHelper.zip

I have also removed immediate attempt to set Eco after for safety (as in one of such testing after disabling/enabling device in device manager it just crashed). So it will restart GPU, but you need to click Eco by hand.

Neristee commented 1 year ago

Don't want to clutter the issue report too much. Just providing some more infos (maybe).

This whole issue is awfully reminding me of the troubles I currently have with eco mode (6900HS, 3070Ti), even with armoury crates installed. My feedback is kinda out of scope since I'm using an Insider version of Windows. But it might maybe help ?

I tried numerous tricks to enable it, including disabling manually the nvidia dGPU... and when I successfully trick windows enough to be able to turn eco mode on.. I get a 100% chance of a BSOD mentioning : POWER_STATE_FAILURE from the nvidia driver.

Sometimes rebooting from this BSOD will have eco mode activated, but the dGPU would be invisible in device manager, no nvidia control panel... and re-bsod quickly after loading the user session... until I turn on standard mode (if I have the time during before the BSOD).

This might very well be a Windows/Nvidia issue (i checked old nvidia drivers, didn't change much... so probably a windows issue).

Maybe a question for @Thrakios :

Does your dGPU tab/area in Armoury Crates looks Orange like mine ? Screenshot 2023-05-13 185847

It seems that Windows is somehow considering the (my ?) dGPU to be connected to an external display (which is not the case) and that it messes around with the ECO mode.

PS : I'm trying the GHelper build you provided here Seerge, and it seems to be able to activate ECO mode on my Laptop after asking me to restart the dGPU ! Hopefully no bsod will follow...

I'll follow this thread closely. :)

pettijohn commented 1 year ago

@Neristee if you can 100% create a BSOD, submit the memory dump to NVIDIA, see here: https://nvidia.custhelp.com/app/answers/detail/a_id/4842

seerge commented 1 year ago

@Neristee changes from that build are live in 0.61 already @pettijohn / @Thrakios did you had chance to try it ? Does it also work for you same as it does for @Neristee ? I will close this issue then :)

Neristee commented 1 year ago

Concerns this issue

Still using ECO mode through GHelper. No BSOD. And battery discharge numbers I haven't seen in a long time.

Screenshot 2023-05-13 192339

EDIT : Oh well. Can't wake up the dGPU from its deep sleep, even when toggling standard mode. At least it can sleep now.

Doesn't really concerns this issue

@Neristee if you can 100% create a BSOD, submit the memory dump to NVIDIA, see here: https://nvidia.custhelp.com/app/answers/detail/a_id/4842

I can't reproduce the bsod on the current windows insider canary build. I was able to reproduce it on last week's build though. I didn't even try tbh because I just got used to use "Standard" at the expense of battery life. To be fair, there seems to have a lot of USB related work under the hood (xbox controller wasn't working last build for example) so it might be a me issue on that one.

Thrakios commented 1 year ago

Yes the dGPU area in my AC looks the same. Though I've now uninstalled it. As for GHelper, here's a log. I didn't manage to get it working unfortunately :(

log.txt

seerge commented 1 year ago

@Thrakios that's sad, but i see that it seem to restart gpu (and uses powershell way now with 2 seconds pause inbetween disabling and enabling) :) then i don't know what to do in your case

seerge commented 1 year ago

Btw, i hope no one here uses ASUS Smart Display Control , as this issue has reminded me that in certain cituations it can also interfere https://github.com/seerge/g-helper/issues/377

Thrakios commented 1 year ago

@seerge I have uninstalled ASUS Smart Display Control, and now GHelper does successfully get into Eco Mode, after the automatic GPU restart.