ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux电源管理深度实践:剖析cpufreq、C-State与功耗优化工具

2026/10/8 12:26:24 拓冰建站 浏览量
Linux电源管理深度实践:剖析cpufreq、C-State与功耗优化工具 说句实在话Linux电源管理可能是很多运维和嵌软工程师最“不敢碰”的模块之一。一方面它不像CPU、内存那样有直观的性能指标另一方面“省电”两个字背后牵扯到内核调度器、设备驱动、ACPI固件甚至BIOS设置任何一个环节不对表现出来的都是“风扇狂转”、“待机掉电快”、“网卡一睡不起”这类让人抓狂的玄学问题。我最早接触这块是因为一台服务器在跑低负载任务时功率怎么都压不下来后来一路从powertop查到cpufreq驱动再到BIOS的C-State选项才把这套链路彻底摸明白。这篇合集就是把我这几年的排查思路和调优经验整理出来从内核机制到命令行工具再到嵌入式场景尽量一次说透。适合刚接触电源管理的新手也适合已经踩过坑想系统梳理一遍的工程师。1. Linux电源管理到底在管什么——先弄清楚问题的边界1.1 三个层面硬件、内核策略、用户态工具很多人一上来就查powertop或者调CPU频率但根本没搞清楚电源管理在整个系统中的位置。我习惯把它分成三层来看硬件层是芯片本身提供的省电机制比如x86的C-State、P-StateARM的WFIWait For Interrupt、DVFSDynamic Voltage and Frequency Scaling。这些机制由硬件电路实现但什么时候进入、进入哪一档需要软件来告诉它。内核层才是Linux电源管理的核心。它通过几个子系统把硬件的控制权统一收拢cpufreq负责CPU频率和电压的动态调整也就是P-State的管理。cpuidle负责CPU空闲状态的管理也就是C-State的进入和退出。devfreq负责非CPU设备GPU、内存控制器、DDR的频率调节。regulator负责电压域的开关和调压嵌入式设备里很常见。runtime PM负责设备在运行时的挂起和唤醒比如USB设备空闲时自动挂起。用户态工具只是内核接口的“翻译官”。cpupower、powertop、tuned这些工具本质上都是通过sysfs、debugfs或者netlink去读写内核的控制参数。理解了这层关系你就知道为什么有时候改配置不生效——问题大概率出在内核驱动或者固件而不是工具本身。1.2 功耗的组成CPU并非唯一大户一台典型的x86服务器或者笔记本功耗大致分这么几块CPU动态功耗可以占到整机30%~50%空闲时如果没进C-State光是一个核的空转就可能有几十瓦。DRAM刷新功耗和带宽相关服务器上DDR5比DDR4更明显。GPU/加速器集成显卡省着用还好独立显卡的空闲功耗不容忽视。网卡/无线网卡很多人忽略的耗电大户尤其是Wi-Fi在弱信号下会主动加大发射功率。外设NVMe盘、USB设备、风扇、屏幕背光。所以你在排查“为什么电池不耐用”或者“为什么服务器空载功耗高”时第一件事不是急着调参数而是先明确功耗到底花在哪个部件上。否则就是瞎调。1.3 为什么Linux电源管理总是“默认保守”这涉及一个容易被误解的点发行版默认行为不等于内核上限。Debian/Ubuntu的服务版默认ondemand或schedutil调节器目的是保证响应速度而移动设备和嵌入式系统则会定制自己的电源策略。也就是说同一个内核在不同发行版上表现出的功耗特性可能差异巨大。这也就解释了为什么你在网上搜“网卡没有电源管理”、“CPU最大频率设不了”时会看到各种矛盾的答案——因为提问者的内核配置、BIOS设置、发行版策略可能完全不一样。这个问题很关键下面每个章节都会反复提到。2. CPU是所有功耗的源头频率调节与C状态2.1 cpufreq的工作机制从调节器到驱动cpufreq子系统在x86平台上最常见的驱动是intel_pstateIntel和acpi-cpufreqAMD/老Intel。这里有个关键点intel_pstate默认情况下注册为“缩放驱动”它的频率调节逻辑和传统的cpufreq调节器不太一样。如果你的内核启用了CONFIG_X86_INTEL_PSTATE那么schedutil或powersave这些调节器其实是在和intel_pstate内部策略配合工作而不是完全独立调度。x86平台查看当前驱动和调节器状态cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor输出典型的intel_pstate powersaveintel_pstate内置了两个策略performance和powersave。这里注意intel_pstate的powersave并不是“省电优先”而是“允许在最大和最小频率之间动态调整”性能表现通常也不差。这跟传统调节器里的powersave含义完全不同。2.2 怎么在电源管理里设置CPU最大频率这是搜索热度极高的问题很多人在网上问“怎么把CPU最大频率限制在某个值”。其实做法很直接——写sysfs节点# 查看当前最大/最小频率 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq # 设置最大频率为2.0GHz echo 2000000 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq # 设置最小频率为1.2GHz echo 1200000 /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq频率单位是kHz也就是上面的2000000对应2.0GHz。注意这个写法只对传统cpufreq驱动生效如果用的是intel_pstate的硬件管理模式HWPscaling_max_freq同样可写但最终实际的P-State选择由硬件自己决定内核只能给一个“上限约束”。想让这个设置在重启后依旧生效最稳妥的方式还是用systemd服务。创建一个service文件[Unit] DescriptionSet CPU max frequency limit Aftermulti-user.target [Service] Typeoneshot ExecStart/usr/bin/bash -c echo 2000000 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq echo 2000000 /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq [Install] WantedBymulti-user.target然后systemctl daemon-reload systemctl enable --now set-cpufreq.service如果CPU核心很多不想一个个写可以用cpupower工具一次搞定后面章节会详细讲。2.3 C-State空转不耗电全靠它C-State是x86处理器在未执行指令时进入的低功耗状态。C0是工作状态C1是停转时钟HALTC1E是更省电的增强型HALTC3是关闭部分缓存时钟C6/C7是把核心供电进一步切断C10甚至能把整个CPU的PLL关闭。判断当前是否真的进入了深C-Statecat /sys/devices/system/cpu/cpuidle/state*/name cat /sys/devices/system/cpu/cpu0/cpuidle/state*/usage看usage数字如果跑了一会儿之后C6/C7的usage几乎没增长说明CPU根本没机会进入深度睡眠。常见原因有两个BIOS里关闭了C-State相关选项很多服务器默认为了极致性能会关掉。系统里有高频中断或内核线程频繁唤醒CPU比如timer的频率太高、网络收包太频繁、或者某个驱动在做无谓的轮询。判断手段也很简单cat /proc/interrupts对比各个CPU中断数量的差异尤其是网卡和定时器中断。如果所有中断都砸在CPU0上其他核心没法进入深C-State功耗自然下不来。这时候配合irqbalance或者手动设置/proc/irq/*/smp_affinity把中断分散通常能让空闲功耗明显下降。2.4 调节器怎么选不是越省电越好x86平台上常见调节器调节器策略适用场景performance固定最高频率低延迟要求、数据库主库、音频工作站powersave固定最低频率传统含义只在极少数定制场景用ondemand根据负载动态调频老内核常见延迟较明显conservative负载变化时缓慢调频强调稳定性的场景schedutil基于调度器利用率调频Linux 4.7主流选择我的建议是服务器上用schedutil如果驱动允许桌面/笔记本上用intel_pstate的powersave策略即可。不要迷信performance现代CPU的睿频能力很强在schedutil下短时突发负载也能快速冲到高频率并不会带来可感知的延迟。3. 从命令行下手cpupower、powertop与tuned的配合使用3.1 cpupower最直接的CPU频率设置工具很多发行版自带linux-tools包里的cpupower工具它对多核CPU的操作比手动写sysfs方便得多。常用操作# 查看所有核心当前频率 cpupower frequency-info # 查看当前调节器 cpupower frequency-get governor # 全局设置调节器为performance cpupower frequency-set -g performance # 设置最大频率范围 cpupower frequency-set -u 2.0GHz -d 1.2GHz-u对应scaling_max_freq-d对应scaling_min_freq。这里有个细节要注意cpupower设置的是CPU policy范围如果你的系统用intel_pstate HWP模式-u的值如果超过硬件能提供的最大频率工具会报错但不一定会回退到合理的值。建议先执行cpupower frequency-info看一下硬件允许范围。CPU核心多的时候cpupower frequency-set会自动对所有在线CPU生效不用像手动写sysfs那样一个一个echo效率完全不在一个量级。3.2 powertop把功耗问题“照”出来powertop是Intel开发的电源分析工具最常用的两个模式是交互模式和自动调优模式# 交互模式实时查看各组件功耗估算 powertop # 生成统计报告 sudo powertop --csv/tmp/powertop.csv --time60交互界面里最重要的几个标签页Overview实时功耗估算和闲置统计。Idle stats各C-State的进入次数和停留时间。Frequency stats各P-State的使用分布。Device stats各设备的运行时状态和电量消耗。Tunables可以开启或关闭的电源优化项。powertop --auto-tune会把所有Tunables里的建议项一次性启用。这个命令很方便但我不建议一上来就用——它会启用一些可能在特定场景下有副作用的选项比如USB自动挂起。关于这一点我在后面的实战章节会聊。3.3 tuned把电源策略变成可切换的profiletuned是红帽系发行版内置的动态调优服务本质是在不同场景下切换内核参数和设备设置。它解决了一个很实际的问题你不会想在一台服务器上手动改十几个sysfs参数。tuned把这些参数打包成profile切换profile即可。# 查看当前profile tuned-adm active # 列出所有可用profile tuned-adm list # 切换到省电模式 sudo tuned-adm profile powersave # 推荐用throughput-performance处理高负载用balanced做通用 sudo tuned-adm profile throughput-performance每个profile的内容存放在/etc/tuned/目录下比如balanced/tuned.conf你可以照葫芦画瓢自定义一个profile。它的核心语法就是通过[cpu]、[vm]、[sysctl]等区块对系统参数做声明式配置。[cpu] governorperformance energy_perf_biasperformance编写后执行tuned-adm profile myprofile即可启用。这种方式比手写systemd service更优雅也是生产环境推荐的做法。3.4 合在一起用先测后调再固化我的标准操作流程是先跑powertop --csv收集60秒基线数据。用powertop交互模式看哪个部件最耗电、哪个设备没有正常进入低功耗。针对性地用cpupower或者tuned调整CPU策略。对异常设备比如网卡、USB设备单独用ethtool或sysfs处理。再次跑powertop对比功耗变化。把最终配置固化到tuned profile或systemd service里。这套流程看着简单但能避免90%的“改了不知道有没有生效”的尴尬。4. 外设电源管理的真相网卡、无线网卡为什么“没有电源管理”4.1 网卡没有电源管理到底是谁的问题搜“网卡没有电源管理”会出来一堆求助帖多数人贴的是ethtool输出或者lspci信息说网卡不支持任何省电模式。实际上PCIe设备是否支持电源管理取决于设备自身能力、内核驱动以及ACPI/PCIe电源管理框架的配合。很多时候网卡硬件是支持的但驱动没有实现对应的回调函数。判断方法# 查看PCIe设备支持的电源状态 lspci -vvv -s 05:00.0 | grep -A 20 Power Management如果输出只有PowerManagement:Status: D0 No Softw. Ctrl说明硬件只支持D0状态没有低功耗状态或者驱动没有暴露控制接口。前者是硬件局限后者可以通过更新驱动解决。4.2 ethtool的省电参数wol和EEE网卡的低功耗除了PCIe D-State层面的DSDevice Sleep状态还有一个常见的接受方式就是以太网唤醒Wake-on-LAN和EEEEnergy Efficient Ethernet。# 查看当前支持的唤醒模式 ethtool eth0 # 关闭Wake-on-LAN sudo ethtool -s eth0 wol d # 开启EEE如果网卡支持 sudo ethtool --set-eee eth0 eee on我在服务器上排查功耗异常时发现最普遍的问题就是主板默认开启了wol的magic packet模式导致网卡永远处于“半清醒”状态空闲功耗比关闭wol时高不少。对于不需要远程唤醒的机器建议一律ethtool -s ethX wol d。仔细看ethtool eth0的输出还可以关注Link detected: yes下面的Speed和Duplex。有些网卡在空闲时会自动协商降速到100Mbps叫EEE LPI这是好事但如果你的网卡没有进入LPI模式可以检查是否有无用的广播流量在持续唤醒它。4.3 无线网卡的省电悖论省电模式反而导致延迟飙升Wi-Fi网卡的电源管理一直是个矛盾点。开启省电模式后网卡会定期进入休眠驱动需要维护和AP之间的Power Save Mode状态这就导致了一个常见问题唤醒后第一个包的延迟可能达到几十甚至上百毫秒。对语音、视频会议这类应用来说体验很差。查看当前Wi-Fi电源状态iw dev wlan0 get power_save关闭省电模式sudo iw dev wlan0 set power_save off在笔记本上如果你愿意用一点电池续航换网络稳定性我建议直接关闭Wi-Fi电源管理。很多所谓“断流”、“延迟高”的笔记本问题罪魁祸首就是省电模式的唤醒延迟。这里透露一个细节部分驱动比如iwlwifi有一个power_save模块参数首选按模块参数设置更彻底。# 查看iwlwifi相关参数 modinfo iwlwifi | grep power4.4 USB设备的自动挂起还有一个容易踩坑的设备是USB外设。Linux内核默认的USB autosuspend自动挂起可能让U盘、USB网卡、甚至键鼠在一段时间后进入D3状态。好处是省电坏处是某些设备从D3恢复时会重置状态比如USB串口工具的驱动会detach再attach导致正在跑的程序报错。查看和调整USB设备自动挂起# 全局关闭USB autosuspend echo -1 /sys/module/usbcore/parameters/autosuspend-1表示禁用自动挂起单位是秒默认通常是2。如果你遇到USB设备“做着做着就消失了”优先检查是不是autosuspend搞的鬼。你要是想逐个设备调可以去/sys/bus/usb/devices/*/power/control里改成on但工作量比较繁琐从全局调更省心。5. 实战用powertop定位异常耗电并做可持续调优5.1 一次真实的服务器功耗排查过程之前遇到一台康盛处理器服务器配置不差但空载时整机功耗始终在120W以上而按部件常识推测应该能压在80W以内。我一开始怀疑是CPU在跑高频但cpupower frequency-info显示频率很正常负载几乎为零。这时候我用了powertop看空闲统计发现大部分CPU核心居然都停留在C2状态C6/C7的usage很少。然后我再查/proc/interrupts发现网络中断全集中在CPU0和CPU1上而且每秒触发上千次。进一步查发现是这个网卡的RX队列没有开多队列所有流量都落在同一个队列上。用ethtool -L把队列分散到多个CPU后再powertop确认C6的进入次数立刻大幅增加整机功耗降到了83W左右。这次排查给我的经验是电源管理问题往往不是电源管理本身的故障而是中断、驱动、队列分配这些邻居模块的锅。指标异常只是结果原因通常藏在更上游的地方。5.2 用PowerTop报告做前后对比把电量问题量化出来很重要。我会做一个这样的流程存档“调优前”状态sudo powertop --csv/tmp/powertop_before.csv --time60应用我们上一节说到的各种设置关闭wol、分散中断、调profile等。存档“调优后”状态sudo powertop --csv/tmp/powertop_after.csv --time60对比CSV中的“Software Settings in Need of Tuning”部分和“Device Power Report”。真实对比结果项目调优前调优后空闲整机功耗约120W约82W核心处于C6占比不足10%65%以上主要中断诱因单队列网卡分散到4个CPU这份报告就是我们向上级或客户说明“优化效果”的最好佐证而不是一句“我调了配置”打发了事。5.3 powertop --auto-tune的副作用一个反面案例再说一遍auto-tune的问题。有一次我在一台测试机上偷懒直接执行了powertop --auto-tune结果第二天发现ssh会话总是断断续续连ping都有丢包。查了一圈发现是auto-tune把网卡的节能模式打开了而这块网卡的节能模式实现有bug会造成几秒级的链路挂起。把该网卡的节能选项关掉之后立刻恢复。所以我现在的习惯是auto-tune之前先把powertop报告里的Tunables列表过一遍确认哪些是适合这个场景的。尤其注意Enable Audio codec power management老声卡驱动开启后可能导致爆音。NMI watchdog建议关闭但生产环境有时需要保留。VM writeback timeout调整为更激进的写回策略可能加大磁盘负载。SATA link power management对机械硬盘有影响容易增加启停次数。如果不想全盘应用手动执行powertop交互界面里单条应用即可。5.4 日志和传感器系统的配合别只看powertop。在有传感器的机器上还可以结合ipmitool或者/sys/class/hwmon读取真实的功率数据来做验证# 查找hwmon温度/功率节点 find /sys/class/hwmon -name power* -o -name temp* | head -20 # 读取主板实时功率具体路径按硬件而变 cat /sys/class/hwmon/hwmon*/power1_input拿这些真实硬件读数配合powertop的估算才能判断“软件策略是不是真的压低了功耗”避免被估算数值欺骗。6. 嵌入式Linux场景如何避开无头设备的功耗坑6.1 嵌入式Linux的电源管理差异嵌入式场景跟x86服务器很不一样。嵌入式板子如全志、瑞芯微、树莓派等往往是SoC平台电源管理的基础不是ACPI而是设备树DT和regulator框架。很多坑也源于此设备树里某个外设节点忘了加power-domains属性导致对应电源域一直不掉电。某个GPIO控制的外设电源开关没有在驱动中正确释放。kernel里开启了大量唤醒源导致系统无法真正进入suspend。有些驱动在runtime PM回调里只是简单返回0实际上没有做任何掉电动作。判断方法cat /sys/kernel/debug/pm_runtime/usage看每个设备的usage_count如果非0说明设备被占用着无法runtime suspend。这个节点是排查嵌入式设备“系统休眠时功耗依然很高”的第一入口。6.2 内核配置项该开哪些该关哪些嵌入式Linux编译内核时电源管理相关的配置项有很多需要注意的地方。我列几个关键项配置项作用建议CONFIG_CPU_FREQ启用CPU动态调频必须开启CONFIG_CPU_FREQ_GOV_SCHEDUTIL启用schedutil调节器必须开启CONFIG_PM_DEVFREQ非CPU设备的频率控制按需开启CONFIG_DEVFREQ_GOV_POWERSAVEdevfreq的省电策略按需开启CONFIG_PM_SLEEP休眠/唤醒支持如有需求则开启CONFIG_WAKELOCK旧式wake lock接口不建议用wakeup source替代CONFIG_ARM_PSCIARM电源状态协调接口ARMv8平台必须CONFIG_HZ_PERIODIC定时器周期化省电场景优先开发阶段可以全开生产阶段再按需求裁剪。裁剪时最需要注意的是如果使用通用内核不要随便关闭CONFIG_CPU_FREQ_GOV_PERFORMANCE很多用户的用户态工具依赖它。我的一个项目上就是因为裁剪掉了它导致用户态的tuned脚本调用失败行为非常诡异。6.3 suspend/resume的延迟比功耗更敏感的指标对嵌入式设备来说除了功耗休眠唤醒的延迟同样要命。如果一个物联网设备每10秒唤醒一次上报数据每次唤醒要花3秒那整个系统的实时性就毁了。排查唤醒耗时# 查看最近一次休眠/唤醒的时间消耗 sudo dmesg | grep -i PM: suspend看输出里的time字段比如PM: suspend entry (deep) PM: suspend exit如果“suspend entry”到“suspend exit”之间耗时过长问题通常出在这几个地方某个设备在prepare阶段等待超时。某个中断唤醒源没有正确配置为wakeup capable导致系统反复尝试进入suspend但马上被唤醒。某些设备驱动在resume回调里做了太重的初始化操作。我调试过的一块板子问题出在Wi-Fi模组的resume流程里每次都要重新加载固件耗时300ms。后来通过在驱动里缓存固件、缩短复位时序才压到80ms。这种问题靠看内核日志就能定位难点在于愿不愿意一层层跟下去。6.4 一个嵌入式板子的低功耗调优记录以某块基于全志H616的开发板为例当时目标是把待机功耗从2W降到0.5W以下。步骤关闭HDMI输出和其电源域设备树里将hdmi节点status改为disabled。确定以太网PHY不会因唤醒所需而保持上电将其驱动从内核编译改为模块加载不在启动时加载。将CPU调节器改为schedutil频率上限降到816MHz。设置DDR频率为最低档通过devfreq sysfs节点。进入系统级suspend-to-ram后实测电流为0.42W达成目标。关键是在第2步这个PHY功耗占了0.8W但很多人不会想到把它单独关掉——因为它是板载网卡默认驱动总会主动把它拉起来。在嵌入式板子上处理“默认驱动行为”和“实际需求”的矛盾比x86服务器上更为常见。每次调优前都想一个问题这个设备真的需要在这个状态下工作吗不需要就果断关掉。7. 常见的“假优化”与误判哪些操作其实没用7.1 改scaling_governor却没有改驱动策略很多教程教你echo performance /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor结果你试了没效果。原因可能是你在intel_pstate的HWP模式下scaling_governor这个节点根本不存在或者被驱动锁定了。这时你需要检查硬件层面是否启用了HWPcat /sys/devices/system/cpu/cpufreq/intel_pstate/status dmesg | grep -i intel_pstate如果显示HWP enabled那么频率可以由硬件自主选择软件侧对scaling_governor的写操作只会影响hwp_dynamic_boost这类策略开关不会一下子把频率拉满。别跟内核特性较劲第一时间查清自己的内核版本和驱动状态比反复试命令更有价值。7.2 开启C-State却把中断全留在CPU0前面提到过C-State和中断的关系。这里单独强调如果定时器中断、网络中断全部集中在同一个核心上就算C1E、C6全开着其他核心也进不了深度睡眠因为唤醒源一直在触发。解决办法是先把/proc/irq里高频率的IRQ分配到多个CPU上。可以用irqbalance自动做也可以手动改smp_affinity。手动分配时注意smp_affinity写的是十六进制位掩码# 查看IRQ 35当前亲和性 cat /proc/irq/35/smp_affinity # 让IRQ 35只能在CPU2、CPU3上触发bit 2和bit 3置1 0xC echo c /proc/irq/35/smp_affinity这种方式能明显改善多核平台的空闲功耗但要注意irqbalance可能在后台把它改回去所以最好在tuned profile里配置irqbalance的banirq或者直接用systemd锁住设置。7.3 给硬盘改电源策略结果机械盘疯狂Load/Unload这是我在笔记本上踩过的另一个坑。为了省电把SATA链路电源管理调到min_power结果机械硬盘的Load/Unload次数狂涨不到一个月就出现一次待机死机。后来查smartmontools才发现磁头起停次数已经超标。查看SATA链路电源管理状态cat /sys/class/scsi_host/host*/link_power_management_policymin_power会触发频繁的电源状态切换对SSD影响不大但对机械硬盘绝对是个灾难。折中方案是med_power_with_dip它比max_performance省电但不会频繁卸载磁头。如果你用的是纯SSD环境那才建议用min_power。还有一些看似能省电的做法其实没什么用把vm.dirty_writeback_centisecs改得过于激进会导致频繁的缓存刷盘反而抬高瞬时功耗。盲目disable NetworkManager的WiFi扫描会导致无法自动切换AP但并不会明显降低功耗。关闭显卡驱动而不是设置D0/D3状态可能让系统退回到一个更耗电的VGA兼容模式。我的看法是电源调优是测量的科学不是信仰。每一步改动都应当能通过powertop或实际功率读数来验证否则就撤销。尾声我的几点实际体会说了这么多最后分享一点个人实践经验。第一电源管理和性能一样需要量化的基线。没有baseline就动手优化最后你只会在“好像省电了”和“是不是更费电了”的困惑中反复摇摆。至少花10分钟跑一次powertop日志并记录当前系统负载再开始任何操作。第二遇到摸不着头脑的情况先查内核日志。dmesg -T、journalctl -k -f在电源管理调试过程中的价值远超各种网上教程。驱动加载失败、ACPI表的警告、电源域解析错误这些信息都会在dmesg里排队等着你。第三学会接受“硬件决定下限”。你可以在软件层面做到极致但如果这块网卡本身不支持更深的D状态或者BIOS固件把C-State锁死在C2再怎么调Linux都是白费。这时候该刷固件刷固件该换硬件换硬件不要在一个系统层耗死自己。这些坑我基本都亲自踩过一遍希望这篇合集能帮你少走点弯路。