L1 状态定义与特性
L1 状态是 PCIe 链路电源管理中的中等深度节能状态。与 L0s 仅关闭发送器不同,L1 状态会关闭链路上的 发送器 和 接收器 的绝大部分功能,仅保留维持链路重新激活所需的少量逻辑。进入 L1 状态后,链路两端设备通过协商关闭主时钟和 PLL,从而显著降低静态功耗。
L1 状态的基本特征
L1 状态的核心特征可归纳为以下四点:
- 链路时钟关闭:链路两端停止发送参考时钟,PLL 进入低功耗模式或完全关闭。
- 电气空闲:差分信号对上的电压维持在共模电平,无数据翻转,功耗降至接近零。
- 协议冻结:TLP、DLLP 和 Ordered Set 的发送与接收全部暂停,链路上下文保存在本地。
- 软件透明:对操作系统和驱动程序而言,L1 状态下的设备仍处于“可操作”状态,无需重新枚举。
关键指标:L1 状态下的链路功耗通常仅为 L0 状态的 1% ~ 5%,具体取决于链路宽度和工艺节点。
退出延迟与功耗节省权衡
L1 状态的设计核心在于 退出延迟 与 功耗节省 之间的平衡。退出延迟是指从触发 L1 退出条件到链路恢复到 L0 状态、可以正常传输数据所需的时间。该延迟主要由以下阶段构成:
| 阶段 | 典型耗时 | 说明 |
|---|---|---|
| 电气空闲退出 | ~500 ns | 发送器从共模电平切换到差分驱动,建立稳定的信号摆幅 |
| PLL 重新锁定 | ~1 μs | 接收器 PLL 重新锁定到发送器的参考时钟 |
| 位锁定与符号对齐 | ~500 ns | 接收器恢复时钟数据,完成符号边界对齐 |
| 链路训练与恢复 | ~1 μs | 发送 TS1/TS2 Ordered Set,重新建立链路宽度和速率 |
| 总退出延迟 | ~3 μs | 典型值,具体取决于链路速率和实现 |
设计权衡:退出延迟每增加 1 μs,对于延迟敏感型流量(如中断、小包事务)的性能影响会显著放大。因此,L1 状态通常适用于空闲时间超过 10 μs 的场景,否则频繁进出 L1 反而会因退出开销而增加平均延迟和功耗。
L1 子状态简介(L1.1 / L1.2)
为了进一步降低功耗,PCIe 规范在 L1 基础上引入了两个子状态:L1.1 和 L1.2。它们通过关闭更多电路模块来换取更低的静态功耗,但代价是退出延迟更长。下表对比了三个状态的差异:
| 特性 | L1(基础) | L1.1 | L1.2 |
|---|---|---|---|
| 主参考时钟 | 关闭 | 关闭 | 关闭 |
| PLL 状态 | 关闭 | 关闭 | 关闭 |
| 共模电压保持 | 是 | 是 | 否(可完全断电) |
| 接收器检测电路 | 保持 | 周期性唤醒 | 完全关闭 |
| 典型退出延迟 | ~3 μs | ~10 μs | ~100 μs |
| 功耗节省 | 基准 | 比 L1 低 30% ~ 50% | 比 L1 低 80% ~ 95% |
| 适用场景 | 短时空闲 | 中等空闲 | 长时空闲(如待机) |
注意:L1.2 状态下,由于共模电压可能完全消失,退出时需要重新建立电气连接,因此退出延迟显著增加。设计时需确保链路两端的设备均支持 L1.2,否则会回退到 L1 或 L1.1。
ASPM 与 L1 子状态的协同
L1 子状态的进入和退出由 ASPM(主动状态电源管理) 逻辑控制。ASPM 根据链路空闲时间动态选择最合适的 L1 子状态:
- 短时空闲(< 10 μs):不进入 L1,或仅进入 L0s。
- 中等空闲(10 μs ~ 1 ms):进入 L1 基础状态。
- 长时空闲(1 ms ~ 100 ms):进入 L1.1,关闭接收器检测电路。
- 超长空闲(> 100 ms):进入 L1.2,允许共模电压完全断电。
协同设计要点:ASPM 控制器需要实时监测链路的空闲持续时间,并结合设备支持的子状态能力,做出最优的电源状态切换决策。错误的子状态选择会导致性能下降或功耗浪费。