2. L1 Substates (L1SS) 基础:什么是 L1 Substates,为什么需要它,以及它与传统 L1 状态的区别
在 PCIe 链路功耗优化体系中,L1 Substates (L1SS) 是自 PCIe 3.1 规范引入的关键增强特性。它并非一个独立的新电源状态,而是对传统 L1 状态的深度扩展,旨在进一步挖掘链路空闲时的节能潜力。
核心定义: L1 Substates 是一组在 L1 状态基础上定义的更深层次子状态,通过关闭更多内部电路(如 PLL、参考时钟、甚至主电源),实现比传统 L1 状态更低的功耗。
2.1 为什么需要 L1 Substates?
传统 L1 状态虽然能节省一定功耗,但其节能深度有限。随着移动设备、数据中心和嵌入式系统对能效要求的不断提高,L1 状态的局限性日益凸显:
- 功耗墙: 传统 L1 状态下,PLL(锁相环)和参考时钟通常保持运行,导致静态功耗仍然较高。
- 唤醒延迟与节能深度矛盾: 传统 L1 的退出延迟较短(微秒级),但无法实现更深的节能模式。
- 链路利用率下降: 现代 PCIe 链路在大量时间处于空闲或低利用率状态,传统 L1 无法充分利用这些空闲窗口。
L1 Substates 通过引入多个可配置的节能层级,允许系统根据链路空闲时长动态选择最合适的节能深度,从而在功耗节省和唤醒延迟之间取得更优平衡。
应用场景: 笔记本电脑的 Thunderbolt 接口、NVMe SSD 的 ASPM 节能、数据中心网卡的低功耗待机等,都依赖 L1SS 实现显著的电池续航或散热优化。
2.2 L1 Substates 与传统 L1 状态的核心区别
下表从多个维度对比了传统 L1 状态与 L1 Substates 的差异:
| 对比维度 | 传统 L1 状态 | L1 Substates (L1SS) |
|---|---|---|
| 规范引入 | PCIe 1.0a | PCIe 3.1 / 4.0 |
| PLL 状态 | 保持运行或快速恢复 | 可完全关闭 |
| 参考时钟 | 通常保持有效 | 可关闭(CLKREQ# 机制) |
| 主电源 (Vmain) | 保持供电 | 可完全断电(L1.2 子状态) |
| 唤醒延迟 | ~1-5 µs | L1.1: ~5-10 µs L1.2: ~50-100 µs |
| 功耗节省 | 中等(~mW 级) | 显著(~µW 级,L1.2 可达接近零功耗) |
| 链路状态机 | 单一 L1 状态 | L1 → L1.1 → L1.2 多级嵌套 |
| 软件配置 | ASPM L1 Enable | L1 Substates 相关寄存器 + 握手协议 |
2.3 L1 Substates 的层级结构
L1SS 定义了三个主要的子状态,从浅到深依次为:
- L1.0 (传统 L1): 基础 L1 状态,PLL 和参考时钟保持有效,链路电气空闲。
- L1.1 (浅睡眠): 关闭发送端 PLL,接收端 PLL 可关闭,参考时钟可停止(通过 CLKREQ# 协商)。
- L1.2 (深度睡眠): 关闭主电源 Vmain,仅保留辅助电源 Vaux 用于唤醒逻辑。功耗接近零,但唤醒延迟最长。
下图展示了 L1 Substates 的层级关系与进入/退出流程:
2.4 进入与退出机制
L1 Substates 的进入并非直接跳转,而是遵循严格的逐级下沉和逐级上浮原则:
- 进入流程: L0 → L1.0 → (空闲时间 T1) → L1.1 → (空闲时间 T2) → L1.2
- 退出流程: L1.2 → L1.1 → L1.0 → L0 (或直接 L1.2 → L0,取决于实现)
每个子状态的进入都需要满足特定的空闲时间阈值,这些阈值通过链路两端协商确定,并记录在相关配置寄存器中。
设计注意: 如果空闲时间阈值设置过短,可能导致链路频繁进入/退出深睡眠状态,产生“电源状态振荡”问题,反而增加功耗和延迟。阈值设置需要结合实际业务流量模型进行调优。
2.5 硬件支持要求
要使用 L1 Substates,链路两端设备必须满足以下条件:
| 要求项 | 说明 |
|---|---|
| PCIe 规范版本 | 至少支持 PCIe 3.1 或更高版本 |
| CLKREQ# 信号 | 必须支持参考时钟请求/撤销机制 |
| L1 Substates 能力寄存器 | 设备必须实现相关能力寄存器并正确报告支持深度 |
| 电源管理握手 | 支持 L1SS 特定的 TLP 和 DLLP 握手协议 |
| 辅助电源 Vaux | L1.2 子状态需要 Vaux 维持唤醒逻辑 |