设备: Honor MagicBook 14 (GLO-FX6P) / i5-12500H / RTX 2050 / Windows 11

一、最初的问题

任务管理器显示 System 进程"电源使用情况:高",CPU 维持 2-5%,但没有明显程序在运行。

二、诊断过程

排除掉的因素

检查项方法结果
硬件中断风暴Get-Counter '\Processor(*)\% Interrupt Time'0.29%,正常
DPC 延迟Get-Counter '\Processor(*)\% DPC Time'0%,正常
Windows Defender 扫描Get-MpComputerStatus上次扫描在数天前
Windows Update 大更新COM 接口查询仅 1 个音频驱动待更新
内存压力任务管理器23GB 空闲 / 32GB
第三方恶意驱动Get-CimInstance Win32_SystemDriver仅 3 个无害驱动

定位到的真凶

nvidia-smi 查询结果:

Performance State:  P0            ← 最高性能档,正常闲置应为 P8
Core Clock:         1372 MHz      ← 满频,正常闲置应为 ~200 MHz
Memory Clock:       7000 MHz      ← 满频,正常闲置应为 ~400 MHz
Power Draw:         ~9W           ← GPU 闲置时正常应 <2W
GPU Utilization:    0%            ← 没有程序在用它

独显利用率 0%,但锁在最高功耗状态空转 9W。 这就是 System 进程被标记"高"功耗的原因——GPU 的电源管理工作在内核态,相关开销全算在 System (PID 4) 头上。

三、尝试的修复方案及结果

驱动层

方案操作结果
卸载 NVIDIA App移除 GeForce Experience❌ 无效
NVIDIA Profile InspectorPower Management Mode → Adaptive❌ 单独改无效
Win+Ctrl+Shift+B重置显卡驱动❌ 无效
系统重启冷启动❌ 无效
DDU 完全卸载 + Honor OEM 驱动32.0.15.6636 降级到 30.0.15.1181✅ System CPU 降至 0-1.5%,GPU 频率降至 0 MHz

固件/BIOS 层

方案操作结果
荣耀电脑管家搜 GPU 模式开关❌ 不存在
BIOS 设置搜 Graphics Configuration❌ 不存在
BIOS 更新官网仅有 2023年7月版本,与当前相同❌ 无新版本
注册表 EnableDefaultPowerManagement强制开启电源管理❌ 无效
禁用 Modern StandbyPlatformAoAcOverride = 0❌ 无效(且有副作用)

硬件层

方案操作结果
设备管理器禁用独显Disable-PnpDevice✅ GPU 0W,续航 3h → 4h (+33%)

最终保留的有效改动

  1. Honor OEM 驱动 — System CPU 降低,内核开销减少
  2. GPU 开关脚本 (D:\Software\GPU开关.bat) — 日常关独显,续航 +33%
  3. Windows 驱动自动更新已禁用 — 保护 Honor 驱动不被覆盖
  4. 计划任务自动关独显 — 休眠/开机后自动禁用 GPU,手动才开启

GPU 开关脚本内容

保存为 D:\Software\GPU开关.bat,双击即可切换 GPU 开关状态:

@echo off
net session >nul 2>&1
if %errorlevel% neq 0 (
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    exit /b
)

powershell -Command "$gpu = Get-PnpDevice -Class Display | Where-Object { $_.FriendlyName -like '*NVIDIA*' -and $_.FriendlyName -notlike '*Virtual*' }; if ($gpu.Status -eq 'OK') { Write-Host 'Disabling GPU...'; Disable-PnpDevice -InstanceId $gpu.InstanceId -Confirm:$false; Write-Host 'GPU OFF - 0W' } else { Write-Host 'Enabling GPU...'; Enable-PnpDevice -InstanceId $gpu.InstanceId -Confirm:$false; Write-Host 'GPU ON' }"
timeout /t 3 >nul

自动提权,不需右键管理员运行。

休眠恢复后 GPU 自动复活问题

Windows 从休眠/睡眠恢复时会重新枚举 PCIe 设备,导致已被禁用的 GPU 自动被重新启用。解决方法是添加计划任务,用内核唤醒事件做触发器(不依赖登录速度,指纹登录也可靠触发)。

方案架构

启动/唤醒 → 触发器命中 → 等 10 秒 → 执行 D:\Software\disable_gpu_silent.ps1 → GPU 关了
                                                                              → GPU 已关 → 静默跳过

文件清单

文件说明
D:\Software\disable_gpu_silent.ps1计划任务执行的实际脚本(静默)
D:\Software\GPU开关.bat手动切换 GPU 开关(有提示)
gpu_task_final.xml计划任务定义(UTF-16 编码)

disable_gpu_silent.ps1 内容

Start-Sleep -Seconds 10
$gpu = Get-PnpDevice -Class Display | Where-Object { $_.FriendlyName -like '*NVIDIA*' -and $_.FriendlyName -notlike '*Virtual*' }
if ($gpu.Status -eq 'OK') {
    Disable-PnpDevice -InstanceId $gpu.InstanceId -Confirm:$false
}

计划任务 XMLgpu_task_final.xml,UTF-16 编码,schtasks /Create /XML 导入):

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <Triggers>
    <BootTrigger>
      <Enabled>true</Enabled>
    </BootTrigger>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="System"&gt;&lt;Select Path="System"&gt;*[System[Provider[@Name='Microsoft-Windows-Power-Troubleshooter'] and EventID=1]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="System"&gt;&lt;Select Path="System"&gt;*[System[Provider[@Name='Microsoft-Windows-Kernel-Power'] and EventID=107]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-18</UserId>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Actions Context="Author">
    <Exec>
      <Command>powershell.exe</Command>
      <Arguments>-ExecutionPolicy Bypass -WindowStyle Hidden -File "D:\Software\disable_gpu_silent.ps1"</Arguments>
    </Exec>
  </Actions>
</Task>

三个触发器(覆盖所有恢复路径):

  • BootTrigger:冷启动
  • EventTrigger (Power-Troubleshooter Event ID 1):休眠 (S4) 恢复 + Modern Standby 恢复
  • EventTrigger (Kernel-Power Event ID 107):S3 睡眠恢复
为什么需要三个:S3 睡眠、S4 休眠、Modern Standby 在内核层面是不同的恢复路径,触发的系统事件 ID 不同。单用一种事件无法覆盖所有场景。

踩坑记录

  • BootTrigger:冷启动时触发
  • EventTrigger:订阅 Power-Troubleshooter 事件 ID 1(内核层的"系统已从低功耗状态恢复"),休眠/睡眠恢复时触发

踩坑记录:XML 导入失败的原因:

  1. AllowStartOnBatteries / DontStopIfGoingOnBatteries 不是合法元素,正确的叫 DisallowStartIfOnBatteries / StopIfGoingOnBatteries
  2. 文件声明 UTF-16 但存成 UTF-8,schtasks 无法切换编码。必须用 UTF-16 LE 编码保存

管理命令:

操作命令
暂停schtasks /Change /TN "DisableNvidiaGPUOnWake" /Disable
恢复schtasks /Change /TN "DisableNvidiaGPUOnWake" /Enable
删除schtasks /Delete /TN "DisableNvidiaGPUOnWake" /F
查看taskschd.msc 打开任务计划器

最终效果

冷开机 → 10 秒后 GPU 自动关
休眠 → 唤醒 → 10 秒后 GPU 自动关
睡眠 → 唤醒 → 10 秒后 GPU 自动关
打游戏 → 双击 GPU开关.bat → 开启
锁屏解锁 → GPU 状态不变(不触发 PnP 枚举)

创建命令(以管理员运行 PowerShell):

$taskName = "DisableNvidiaGPUOnWake"
Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -ErrorAction SilentlyContinue

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument @"
-ExecutionPolicy Bypass -WindowStyle Hidden -Command "
Start-Sleep -Seconds 10;
`$gpu = Get-PnpDevice -Class Display | Where-Object { `$_.FriendlyName -like '*NVIDIA*' -and `$_.FriendlyName -notlike '*Virtual*' };
if (`$gpu.Status -eq 'OK') {
    Disable-PnpDevice -InstanceId `$gpu.InstanceId -Confirm:`$false
}
"
"@

$trigger1 = New-ScheduledTaskTrigger -AtStartup
$trigger2 = New-ScheduledTaskTrigger -AtLogOn

Register-ScheduledTask -TaskName $taskName `
    -Trigger $trigger1, $trigger2 `
    -Action $action `
    -RunLevel Highest `
    -Description "Auto-disable NVIDIA GPU on startup/logon to save power"

管理命令:

操作命令
暂停schtasks /Change /TN "DisableNvidiaGPUOnWake" /Disable
恢复schtasks /Change /TN "DisableNvidiaGPUOnWake" /Enable
删除schtasks /Delete /TN "DisableNvidiaGPUOnWake" /F
查看taskschd.msc 打开任务计划器

最终效果

休眠 → 唤醒 → 登录 → 10 秒后 GPU 自动关
开机 → 登录 → 10 秒后 GPU 自动关
打游戏 → 双击 GPU开关.bat → 开启
锁屏解锁 → GPU 状态不变(不触发 PnP 枚举)

附加问题:游戏后 DWM CPU 占用偏高

换装 Honor OEM 驱动后,退出游戏后出现 dwm.exe(桌面窗口管理器)CPU 占用 6-7% 持续不降。

原因:Windows 11 的硬件加速 GPU 调度 (HAGS) 与 2022 年老驱动兼容性不佳。游戏退出时 DWM 重新接管桌面合成,HAGS 让 DWM 承担了额外的 GPU 显存管理开销,老驱动处理不好导致 CPU 悬在高位。

排查方法

  • Get-Process -Name dwm 查看 CPU、内存、句柄数
  • 正常 DWM:内存 100-300 MB,CPU <1%
  • 异常时:CPU 5-10%,内存可能膨胀至 400 MB+

修复

设置 → 系统 → 屏幕 → 显示卡 → 更改默认图形设置 → 关闭"硬件加速 GPU 调度" → 重启。

这个设置不影响游戏帧率,只影响桌面窗口的 GPU 合成路径。关闭后 DWM 恢复到传统合成模式,与老驱动的兼容性更好。

四、关键知识点

D-states 与 P-states

这是两个不同层级的电源状态:

D-states (PCIe 设备电源状态 — 管物理链路供电)
├── D0      全功率,链路全开
├── D1/D2   极少使用
├── D3 Hot  链路接近关闭,可快速唤醒
└── D3 Cold 完全断电,唤醒需重新初始化

P-states (GPU 性能状态 — 管核心/显存频率)
├── P0      最高性能 (~1372/7000 MHz)
├── P2/P5   中等性能
└── P8      桌面闲置 (~200/400 MHz, <1W)

层级关系:先降 D-state 才能降 P-state。 PCIe 链路必须先进入 D3,GPU 才能进入 P8 及以下的深度睡眠。

双显卡笔记本的功耗管理链条

应用程序
  ↓
NVIDIA GeForce 驱动       →  渲染性能、频率调度
  ↓
Platform Controllers      →  与 EC 协商功耗策略
  ↓
ACPI 电源资源表           →  BIOS 中定义"这个设备支持 D0/D3"
  ↓
EC (嵌入式控制器)          →  实际控制 PCIe 链路供电开关

EC 是主板上独立的微型芯片,有自己的固件,负责电源时序、风扇、PCIe 供电等硬件层面的控制。

为什么 System 进程 CPU 受 GPU 影响

System 进程 (PID 4) 是 Windows 内核的"容器"。所有内核态操作——包括驱动与硬件协商功耗、内存管理、I/O 调度——都在 System 进程内执行。当 NVIDIA 驱动反复尝试与 EC 协商降低 PCIe 链路状态时,这些失败-重试循环全跑在 System 进程里,推高了 CPU 占用。

通用驱动 vs OEM 驱动

通用 NVIDIA 驱动:
  平台驱动 + 通用 Platform Controllers
  → 不认识 Honor EC,用通用协议反复试探 → 内核 CPU 开销高

Honor OEM 驱动:
  平台驱动 + 定制 Platform Controllers (30.0.15.1173)
  → 为自家 EC 调过,不反复试探 → 内核 CPU 开销低

OEM 驱动版本号更老(2022 vs 2024)但行为更适配。

核显为什么不卡

核显集成在 CPU 芯片内部,不走外部 PCIe 链路,不受 EC 控制。它随 CPU 的 C-state 自动调节,空闲功耗毫瓦级。

任务管理器"电源使用情况"是什么

这不是实时功耗读数,而是 Windows 根据一段时间内的 CPU 唤醒频率、GPU 活动、磁盘使用等综合估算的评级。System 进程承载 GPU 电源管理的内核开销,即使 CPU 百分比不高,也会因频繁唤醒被标记为"高"。

五、根因分析

EC/VBIOS 固件把 RTX 2050 的 PCIe 链路锁在了 D0 状态。 这条链路无法降到 D3,GPU 就无法进入 P8 深度睡眠,核心供电始终全开。

为什么出厂就这样?最可能的原因是在这个模具上调不好 Optimus(核显/独显)切换的稳定性,频繁切换会黑屏/掉驱动,荣耀选择锁死独显供电来规避问题。

这是固件层面的决策,驱动和系统设置无法覆盖。

六、实用工具

工具用途
nvidia-smi查 GPU P-state、频率、功耗、活跃进程
Process Explorer看 System 进程内核线程归属哪个驱动
DDU安全模式下彻底卸载显卡驱动
NVIDIA Profile Inspector修改隐藏的驱动设置
HWiNFO64读硬件传感器(Intel RAPL、GPU 功耗等)
powercfg /energy生成系统功耗诊断报告
powercfg /a查看当前可用睡眠状态

七、当前状态

已生效的改动

改动效果
Honor OEM 驱动 30.0.15.1181System CPU 2-5% → 0-1.5%
GPU 开关脚本 D:\Software\GPU开关.bat一键启停独显
计划任务 DisableNvidiaGPUOnWake开机/唤醒自动关 GPU(10 秒延迟),手动才开
关 GPU 静默脚本 D:\Software\disable_gpu_silent.ps1计划任务调用,无弹窗
Windows 驱动自动更新已禁用保护 Honor 驱动不被覆盖

续航

  • 日常用核显:续航 ~6h(100% 电量)
  • 开独显不玩游戏:比关独显少 ~1.5h
  • 打游戏:插电,独显满血

日常操作

  • 想省电 → 什么都不用做,GPU 自动关
  • 想打游戏 → 双击 GPU开关.bat 开独显
  • 打完游戏 → 双击 GPU开关.bat 关独显

2026年7月

标签: none

添加新评论