对于 24 小时常开的家用 NAS 而言,待机功耗(Idle Power)直接决定了它的电费账单和发热量。很多玩家在组装 NAS 时,明明选择了低功耗的 CPU(如 Intel N100 或低功耗桌面版 CPU),但整机空载功耗依然在 20W 甚至 30W 居高不下。
这其中最核心的“电老虎”,往往不是 CPU 本身,而是因为 ASPM(Active State Power Management,主动状态电源管理) 未正确开启,导致 CPU 无法进入深度的 Package C-States(物理封装 C 状态)。
本文将深入拆解 ASPM 对 NAS 功耗的影响机理,并提供一套从 BIOS 设置到 Linux 系统底层的 PCIe 省电排查与调优指南。
为什么 ASPM 对 NAS 待机功耗至关重要?
在现代 x86 架构中,CPU 的省电高度依赖于 C-States(C 状态)。
- Core C-States:单个 CPU 核心的休眠状态(如 C1、C6 等)。
- Package C-States:整个 CPU 芯片(包括核显、内存控制器、PCIe 控制器等物理介质)的休眠状态(如 C2、C3、C8、C10)。
当 NAS 处于空载或轻载状态时,如果 CPU 能够进入 Package C8 或 C10 状态,整机功耗可以瞬间压低到 5W - 10W 甚至更低。
但是,Package C-States 的进入是有先决条件的:所有挂载在 PCIe 总线上的设备,必须同时进入省电模式(即 ASPM 的 L1/L2 状态)。
只要有一个 PCIe 设备(比如网卡、NVMe 固态硬盘、SATA 扩展卡)拒绝进入省电状态,PCIe 控制器就必须保持活跃。这会强行把 CPU 钉在 Package C2 或 C3 状态,阻止其向更深度的 C-States 迈进。此时,即使你的 CPU 使用率是 0%,整机待机功耗也会平白无故多出 10W - 15W。
ASPM 就是用来协调 PCIe 设备在空闲时降低功耗的协议。它主要有以下几种状态:
- L0s:低延迟的省电状态(省电效果有限)。
- L1:深度省电状态,关闭了主时钟源,功耗极低,但唤醒延迟稍高。
- L1.1 / L1.2 (Substates):更极致的微瓦级省电状态,通常需要硬件和系统原生支持。
第一步:主板 BIOS 中的 ASPM 相关设置
要让 ASPM 生效,首先必须在 BIOS 中把开关打开。不同品牌的主板(华硕、微星、精粤、畅网工控板等)菜单命名有所不同,但核心选项大同小异。
进入 BIOS 后,寻找 Advanced(高级) -> Chipset(芯片组) 或 PCI Express Configuration,找到以下选项并修改:
- Active State Power Management (ASPM)
- 设置为:Enabled 或 Auto。
- PCI Express Native Control (或 Native ASPM)
- 设置为:Enabled。这表示允许操作系统直接控制 PCIe 设备的电源状态。
- PCH DMI ASPM (或 DMI Link ASPM Control)
- 设置为:Enabled 或 L1。DMI 是 CPU 与南桥芯片连接的通道,这个通道不省电,CPU 绝无可能进入深层 C-State。
- PEG ASPM (PCI Express Graphics ASPM)
- 设置为:Enabled 或 L1。控制直连 CPU 的 PCIe 插槽。
- PCIE Clock Gating
- 设置为:Enabled。允许系统在无信号传输时关闭 PCIe 时钟。
第二步:在 Linux 系统中排查 ASPM 状态
以常见的 Unraid、TrueNAS SCALE 或 Debian/Ubuntu 系统为例,我们需要使用命令行工具来确认 ASPM 是否真正跑了起来。
1. 检查当前的 CPU Package C-State
首先安装 powertop 工具:
# Debian/Ubuntu/TrueNAS SCALE
apt install powertop
# Unraid 用户可以在应用市场安装 NerdTools 后启用 powertop
在终端运行 powertop,按下 Tab 键切换到 Idle stats 页面:
| Package
| Core(s)
Actual | C2 (pc2) 2.1%
| C3 (pc3) 97.9%
| C6 (pc6) 0.0%
| C8 (pc8) 0.0%
观察 Package 这一列。如果你的 NAS 在完全空闲时,Package C-State 只能达到 pc2 或 pc3,且 pc8/pc10 的比例为 0%,那么说明你的 PCIe 链路必然存在阻碍省电的硬件。
2. 定位不支持或未启用 ASPM 的 PCIe 设备
使用 lspci 命令可以详细查看每个 PCIe 设备的 ASPM 开启情况:
lspci -vvv | grep -i aspm
输出信息中,每个设备会有两段关键数据:
- LnkCap (Link Capabilities,硬件支持能力):例如
Aspm: L1 Only或Aspm: L0s L1,代表这个硬件物理上支持什么省电模式。 - LnkCtl (Link Control,当前实际启用状态):例如
ASPM L1 Enabled或ASPM Disabled。
排查核心:寻找那些 LnkCap 标注支持 L1,但 LnkCtl 却显示 ASPM Disabled 的设备。
为了更直观地找出是哪个设备的 ASPM 被禁用了,可以使用以下脚本扫描:
for i in $(lspci | cut -d' ' -f1); do
echo -n "Device $i: "
lspci -s $i -v | grep -E "ASPM|LnkCtl" | xargs
done
如果你看到类似下面的输出:Device 01:00.0: LnkCap: ASPM L0s L1 ... LnkCtl: ASPM Disabled
这就意味着设备 01:00.0 就是那个阻止整机省电的“罪魁祸首”。你可以通过 lspci -s 01:00.0 查看这个设备的具体型号(通常是无线网卡、SATA 扩展卡或某些万兆网卡)。
第三步:彻底解决 PCIe 未能省电的问题
定位到问题设备后,可以通过以下几种手段进行针对性解决:
方案 A:通过内核参数强制启用 ASPM
有时候操作系统因为保守的安全策略,默认禁用了某些非标准 PCIe 设备的 ASPM。我们可以通过修改 Grub 内核启动参数来强行开启。
编辑系统引导配置文件(以 Debian/Ubuntu 为例):
nano /etc/default/grub
在 GRUB_CMDLINE_LINUX_DEFAULT 中加入 pcie_aspm=force:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pcie_aspm=force"
保存并更新 Grub:
update-grub
reboot
注:对于 Unraid 系统,在“闪存 (Flash)”设备页面的 Syslinux 配置文件中,在 append initrd=/bzimage 后面加上 pcie_aspm=force 即可。
方案 B:利用 Powertop 自动优化
powertop 提供了一键优化所有总线设备电源策略的功能:
powertop --auto-tune
执行后,它会将所有 PCIe 设备、USB 控制器的电源管理调至 "Good"(即自动启用省电)。你可以再次观察 powertop 中的 Package C-State 是否成功落入 C8 或 C10。
如果要每次开机自动运行此优化,可以将其写进 /etc/rc.local 或创建 systemd 服务。
方案 C:硬件避坑与固件升级(关键痛点)
有些硬件在物理层面上存在固件 Bug,导致其只要挂载在系统上,就绝对无法让 CPU 下探到深层 C-State。以下是 NAS 组装中常见的硬件陷阱:
- ASM1166 / JMB585 等 SATA 扩展卡
- 痛点:这两款是市面上最主流的 M.2 转 SATA(或 PCIe 转 SATA)芯片。在默认状态下,许多便宜的 ASM1166 扩展卡会导致 CPU C-State 锁死在 C2/C3。
- 解决办法:ASM1166 必须刷入支持 ASPM 的定制固件(通常是 211110 及以上版本的固件),并将 LnkCtl 配置为允许 L1 状态。刷完固件后,待机功耗可骤降 5W - 8W。
- NVMe 固态硬盘
- 痛点:部分高性能、高发热的 PCIe 4.0 SSD(例如某些早期三星或国产联芸主控盘)在 Linux 下的 APST(自动电源状态转换)不兼容,直接导致 PCIe 链路处于常亮状态。
- 解决办法:可以在内核参数中限制 NVMe 的最大功耗状态,或者在系统引导中加入
nvme_core.default_ps_max_latency_us=0(根据具体品牌调试数值)。
- 网卡(万兆网卡 / 工控 2.5G 网卡)
- 痛点:Intel i225-V/i226-V 在某些老旧固件或特定主控搭配下,其 ASPM 默认处于 Disabled。如果是 Mellanox ConnectX-3 等老一代光口万兆网卡,由于其硬件架构较老,基本不支持 ASPM,插上它整机功耗直接上升 5W 以上,且锁死 C-State。
- 解决办法:对于追求极致低功耗的 NAS,尽量避免使用老一代万兆电口/光口卡。如果使用 Intel 2.5G 网卡,请务必在 BIOS 中开启 Native ASPM 并确保系统加载了最新的
igc驱动。
优化成效对比
当完成了 BIOS 开启 ASPM、系统配置 pcie_aspm=force,并排除了不兼容的 PCIe 硬件后,一台 N100 NAS 在挂载 1 块 NVMe 系统盘、不插 3.5 寸机械硬盘的情况下:
- 优化前(C-States 锁在 C2/C3):待机功耗约 18W - 22W。
- 优化后(C-States 顺利进入 C8/C10):待机功耗可降至 5W - 8W。
按 24 小时不间断运行计算,仅此一项优化,一年就能为你省下近 100 度电。更凉爽的系统也意味着风扇转速更低,NAS 运行更加安静,硬件寿命得以有效延长。