我们发现,笔记本电脑的Windows操作系统在从U盘到M.2 NVMe SSD拷贝一个文件的过程中,如果使用SerialTek PCIe协议分析仪(serialtek PCIe/NVMe Analyzer)来抓取数据,发现CPU连接M.2 SSD的PCIe链路有时候仍然会出现进、出低功耗L1.2的情况,这个正常吗?参见下图的右半部分,你可以看到开始拷贝的时候CLKREQ拉低出L1.2低功耗了,但是好像右边在拷贝过程中又偶尔拉高、拉低几次。
其实呢,这个现象在 Windows 10 下用 PCIe/NVMe 协议分析仪观察到的“拷贝过程中链接仍然频繁进入/退出 L1.2 并伴随不平滑带宽”是合理且常见的行为,并且它确实可能对带宽表现造成一定影响。今天我们从从底层机制、Windows ASPM 管理、链路功耗/时延和文件拷贝模式几个角度解释一下这个现象。
一、PCIE L1.2 在数据传输中并非一定保持 L0 正常传输
虽然你在拷贝文件的时候总体是在高速写入 NVMe SSD,链路上并不是每一时刻都有连续不断的数据包(TLP)在传输。在 NVMe write 模式下,尤其跨 U 盘到 NVMe SSD:
主机会生成一批写命令(NVMe Write TLP)写入 SSD
SSD 会 ACK / 写入控制器内部缓存
SSD 再发送写完成消息
这样的写入模式在带宽上通常是insburst(突发写) + idle(短暂空闲),并不是严格的连续 3.5 GB/s 带宽输出(PCIe 3.0 ×4 的理论值)。
因为这种突发 idle 模式:
链接会认为当前没有数据通信→ 有条件进入 ASPM 低功耗状态(比如 L1.2)
二、什么情况下 Link 会进入 L1.2?
PCIe ASPM 工作机制定义是:
当链路在一定时间内没有数据传输时 操作系统或者 BIOS/固件允许 链路进入低功耗状态以节省电能(ASPM)。
这就是为什么在 idle 间隔时你看到的L1.2 entry/exit 跳动。
在L1.2状态下:
引脚 CLKREQ# 由双方(CPU 或 SSD)确认是否进入低功耗
链路的 PLL、TX/RX 均关闭
退出低功耗必须重新恢复 REFCLK / PLL → 需要时间(exit latency)
三、L1.2 的进入/退出 delay 本身就会影响带宽
当你频繁出现 L1.2 进/出时:
性能会有这种“间歇式(bursty)看起来不平滑”带宽现象
原因包括:
进入 L1.2 状态之类需要时间
退出 L1.2(即重新拉回 REFCLK, PLL lock, PHY 复位)也需要时间
CPU 与 SSD 的 NVMe write 带宽有突发 + 空闲模式 → link idle 时间被认为可以省电 → 触发 L1.2
这些都会导致:
➡ 链路整体即使在文件拷贝中,也可能经历多个短暂 L1.2 进入/退出循环
所以你看到的:
拷贝过程中 PCIe link 不断 L1.2 进/出
并非不正常,而是因为 ASPM 的 aggressive low-power 探测机制在工作。
四、为什么 Windows 下更容易看到这种行为?
Windows 的 NVMe 与 PCIe 管理逻辑是:
由 OS 驱动(StorNVMe)和平台电源策略控制 PCIe ASPM
默认电源策略可能是“更省电而不是更高性能”
Windows 上 NVMe 驱动会在 idle 情况下主动允许 ASPM 进入更深省电状态
ASPM 选项可以在 BIOS 或 OS power plan 里禁用/调高
例如,我们在一些网上用户讨论中也可以看到:
如果 BIOS/系统配置为 “Auto” 或 “Enable ASPM” 系统在 link idle 时会进入 L1/L1.2 这会导致性能看起来较低且间歇性。
这意味着:
Windows 电源管理会把 PCIe link 在负载不饱和时误判为“可以节电”,从而频繁触发低功耗。
五、NVMe USB 到 SSD 这种拷贝模式行为本质
从文件拷贝本身来看:
① 数据并不是连续输入到 NVMe 的
文件来自 U 盘:
USB → 主机缓存 → NVMe Write TLP
这种模式往往是:
一批数据写入 → 短暂 idle → 再来一批
这个 idle 若超过 ASPM 进入阈值:
➡ 会触发 L1.2
② 并非驱动层续写模式完全保持链路活跃
如果 PC/OS 对链路 activity threshold 比较敏感:
➡ 在很多短 idle 结束前链路认为“可以省电”
从而你在SerialTek PCIe Analyzer 上看到的 L1.2 进入/退出就是这个过程。
六、为什么你会看到这种现象
| 现象 | 原因 |
|---|---|
| 拷贝过程中链路仍进入/退出 L1.2 | Windows 的电源管理与 ASPM 门槛使链接认为有 idle 可省电 |
| 带宽看起来“一顿一顿” | 链路在 bursts 与 idle 之间切换,同时伴随 L1.2 exit latency |
| 有时性能低于理论值 | L1.2 exit latency 增加了 effective transfer gap |
| 即使在活跃写入中也会触发省电 | 因为每个 burst 之后链路在短时间零 activity 时判定可省电 |
七、解决思路(如果你追求更平稳性能)
笔记本默认PCIe都是L1.2低功耗的,但是从用户 & 系统配置角度可尝试:
在 BIOS 中把ASPM 设置调整为 Disabled 或更保守(不使用 L1.2)
在 Windows 电源策略里把PCIe Link State Power Management设置为Off 或 Moderate(而非 Maximum Power Saving)
避免 chipset/slot ASPM 决策导致的 aggressive low-power
八、小结
你看到 NVMe SSD 在大文件拷贝中多次进入/退出 L1.2
→是 Windows + BIOS + ASPM 逻辑正常运行的产物
这种行为不代表错误
→ 只是链路断续 idle 被误判为“省电时机”
这会导致带宽看起来不连续、间歇性不平滑
→ 因为链路 exit latency + frequent state transitions
这种机制在移动平台和笔记本上是普遍开启的,目的是节省功耗而不是优化连续传输带宽。