L0s与L1状态:PCIe电源管理状态机切换策略 - 第2节

2.1 LTSSM:链路训练与状态机基础

PCIe 链路的电源管理并非由软件直接控制,而是由硬件状态机——LTSSM(Link Training and Status State Machine) 自动完成。LTSSM 定义了链路从初始化、训练到正常工作和电源管理切换的全部状态与转换规则。理解 LTSSM 是掌握 L0s/L1 切换的前提。

2.1.1 LTSSM 核心状态一览

LTSSM 包含 11 个主要状态,按功能可分为四组:

分组 状态 功能描述
检测 Detect 检测对端设备是否存在,发送电气空闲序列
训练 Polling / Configuration / Recovery 位锁定、符号锁定、链路宽度协商、数据速率协商
活动 L0 正常工作状态,数据包全速收发
节能 L0s / L1 / L2 / L3 链路空闲时降低功耗,L0s 快速恢复,L1 深度休眠
关键认知: L0s 和 L1 是 LTSSM 中仅有的两个“活动节能”状态。它们从 L0 进入,也能直接返回 L0,但恢复延迟和功耗节省程度不同。

2.1.2 LTSSM 状态机简化结构图

下图展示了 LTSSM 的核心状态及其主要转换路径,重点标注了 L0、L0s、L1 之间的关系:

LTSSM 核心状态与 L0/L0s/L1 切换路径 LTSSM 核心状态与 L0/L0s/L1 切换路径 Detect Polling / Config L0 L0s L1 Recovery 空闲超时 退出条件 L1 请求 唤醒 说明: • L0 → L0s:链路空闲超过设定时间,无需软件参与,硬件自动进入。 • L0 → L1:需对端协商同意,通常由 ASPM 或软件触发。 • L1 返回 L0 必须经过 Recovery 状态,恢复延迟大于 L0s。
记忆要点: L0s 是“浅睡眠”,L1 是“深睡眠”。L0s 退出不需要重新训练,L1 退出必须经过 Recovery 重新建立位锁定和符号锁定。

2.2 从 L0 到 L0s:快速节能路径

2.2.1 进入条件

当链路处于 L0 状态且满足以下条件时,LTSSM 自动发起 L0s 切换:

  • 发送端空闲: 该方向连续发送 电气空闲有序集(EIOS) 后,无数据包待发送。
  • 接收端确认: 对端正确接收 EIOS 并进入电气空闲状态。
  • 超时计数器: 链路空闲时间超过 L0s 进入延迟(Entry Latency),通常为几十纳秒。
重要特性: L0s 是 单向 节能状态。一个方向可以进入 L0s,另一个方向仍保持 L0 全速收发。这为部分空闲场景提供了极细粒度的功耗控制。

2.2.2 L0s 退出机制

当任意方向需要重新发送数据时,L0s 退出过程如下:

  1. 发送端退出: 发送端从电气空闲恢复,发送 FTS(Fast Training Sequence) 有序集。
  2. 接收端同步: 接收端检测到电气空闲退出,重新锁定时钟和数据。
  3. 返回 L0: 双方完成位锁定和符号锁定,恢复数据包传输。

整个退出过程通常耗时 几十纳秒,远小于 L1 的恢复延迟。

2.3 从 L0 到 L1:深度节能路径

2.3.1 进入条件

L1 是 双向 节能状态,进入条件比 L0s 更严格:

条件 说明
链路双向空闲 两个方向均无数据包待发送,且已发送 EIOS
ASPM 使能 L1 必须通过 ASPM(L1 子状态)或软件显式请求
对端同意 发送 PM_Enter_L1 DLLP,对端回复 PM_Enter_L1_ACK
无未完成事务 所有未完成的 Non-Posted 请求必须完成

2.3.2 L1 退出机制

L1 退出必须经过 Recovery 状态,流程如下:

  1. 唤醒信号: 任意一端发送 PM_Turn_On 或电气空闲退出信号。
  2. 进入 Recovery: 双方重新进行位锁定、符号锁定和链路宽度协商。
  3. 返回 L0: 协商完成后,链路恢复全速数据传输。
性能影响: L1 退出延迟通常在 几微秒 级别,比 L0s 高一个数量级。因此,L1 适用于较长空闲周期,频繁进出 L1 会显著增加延迟和功耗开销。

2.4 L0s 与 L1 宏观切换路径对比

对比维度 L0s L1
节能方向 单向(每个方向独立) 双向(同时进入)
进入触发 硬件自动(空闲超时) ASPM 或软件请求 + 对端确认
退出路径 直接返回 L0 必须经过 Recovery
退出延迟 ~几十纳秒 ~几微秒
功耗节省 中等(仅关闭发送器) 高(关闭 PLL、时钟等)
适用场景 短时空闲(如包间隙) 长时空闲(如链路无流量)
设计权衡: 实际系统中,L0s 和 L1 通常同时使能。LTSSM 优先尝试 L0s,若空闲时间超过 L1 进入阈值,则升级到 L1。这种“两级节能”策略在延迟和功耗之间取得了良好平衡。

2.5 宏观切换路径总结

从 L0 出发,LTSSM 提供两条节能路径:

  • 路径 A(L0 → L0s → L0): 快速进出,适合微秒级空闲,硬件自动控制,对软件透明。
  • 路径 B(L0 → L1 → Recovery → L0): 深度节能,适合毫秒级空闲,需要 ASPM 或软件参与,恢复延迟较大。