PCIe协议之低功耗篇之 理论深度学习(二)
本章节,主要围绕PCIe base spec 6.0 的S5.4章节内容,进行深度学习和讲解。
一 背景介绍
1.1 名词解释
首先了解一个名词: Native PCI Express Power Management Mechanisms
这个名词可以拆解为两部分来理解:
Native PCI Express:这指的是 PCI-SIG 组织为 PCIe 总线标准原生定义、内置的机制。它不是依赖操作系统或特定驱动程序实现的,而是硬件链路本身固有的能力。
Power Management Mechanisms:即电源管理机制。
合起来,它的完整意思是:由 PCIe 总线规范原生定义的、硬件实现的、用于动态管理链路电源状态以实现节能的一套完整机制。
其主要目标是在不影响系统响应能力的前提下,根据设备的数据传输需求,动态地调整PCIe链路和设备的功耗状态,从而在空闲时最大限度地节约能源。
1.2 实现方式
Native PCIe 电源管理主要包含两大并行的机制:
1.2.1. 基于软件的电源管理 - ASPM
ASPM 是一种硬件自动管理的链路级节能技术,它不需要操作系统或驱动程序的直接干预。
工作原理:当链路两端的设备(例如根复合体和端点设备)都处于空闲状态一段时间后,链路硬件会自动协商,进入低功耗状态(如 L0s, L1)。
特点:
透明性:对软件和驱动程序是透明的,它们无需知道链路状态的变化。
快速响应:状态切换延迟非常小(尤其是L0s状态,通常在微秒级),对性能影响极小。
主动性:由链路物理层主动发起和管理。
1.2.2. 基于操作系统的电源管理 - OSPM
OSPM 机制依赖于操作系统的电源管理策略来管理设备功耗。
工作原理:操作系统(如 Windows, Linux)根据全局电源策略、设备驱动程序的报告以及用户活动,通过 PCIe 配置空间中的 PCI Power Management (PCI-PM) 寄存器,向设备发出指令,要求其切换到特定的电源状态(如 D0, D1, D2, D3hot, D3cold)。
特点:
软件控制:由操作系统全局调度和控制。
状态更深:可以控制设备进入非常深的休眠状态(如D3),节能效果更显著,但退出延迟也更大。
需要驱动支持:设备驱动程序需要配合操作系统完成状态切换。
具体对比如下:
机制 | 管理级别 | 控制者 | 主要状态 | 延迟 | 节能效果 |
---|---|---|---|---|---|
ASPM | 链路物理层 | 硬件自动 | L0s, L1, L1.x | us~几十us级别 | 中等 |
OSPM | 设备功能级 | 操作系统 | D0, D1, D2, D3 | ms~s 级别 | 高 |
协同工作示例:
当一个PCIe网卡短时间内没有数据传输时,ASPM 机制会迅速将链路从 L0 切换到 L0s 或 L1 状态以节省功耗。
如果用户长时间不使用电脑,系统进入空闲,OSPM 会介入,命令网卡进入 D3 状态,这时设备大部分功能关闭,功耗降至极低。同时,ASPM 也可能将链路置于更深的 L1.2 状态。
二 Active State Power Management (ASPM)
2.1 区分几个名词
upstream component : RC
downstream component :EP
upstream link : RC
downstream link :EP
upstream port : EP
downstream port : RC
upstream lanes : RC
downstream lanes : EP
2.2 ASPM 总体介绍
所有未与内部根复合体链路或系统出口端口相关联的端口,都必须支持本文定义的活跃状态电源管理最低要求。从最低要求的角度来看,必须将此功能视为独立于PCI-PM软件兼容特性。例如,根复合体可豁免PCI-PM软件兼容特性要求,但必须实现ASPM的最低要求。
处于D0状态(即完全活动状态)的组件,通常将其上游链路DSP保持在活跃的L0状态,如第5.3.2节所定义。ASPM定义了一种协议,允许D0状态下的组件通过将其链路置于低功耗状态,并指示链路对端执行相同操作,从而降低链路功耗。该能力可实现硬件自主的动态链路功耗降低,其效果远超纯软件控制(即PCI-PM软件驱动)的电源管理所能达到的水平。
在非Flit模式下,ASPM定义了两个低功耗"待机"链路状态:L0s和L1。
在Flit模式下,L0p实际上取代了L0s,而L1仍作为ASPM的"待机"链路状态。
L0s低功耗链路状态针对快速进入和退出延迟进行了优化,同时能实现显著的节能效果。若设备启用了L0s状态,建议在该链路未被使用时立即将其发送链路转入L0s状态(有关L0s调用策略的详细信息,请参阅第5.4.1.1.1节)。除非链路的适用外形规格规范明确要求,否则在D0设备状态下对L0s链路状态的组件支持是可选的。
L0p低功耗链路状态针对短进入延迟和长退出延迟进行了优化,在提供显著节能效果的同时,还支持在链路宽度变更过程中维持链路操作。
L1链路状态则以实现最大功耗节省为目标,其代价是更长的进入与退出延迟。当系统要求极低功耗且可接受较长状态转换时间时,L1能提供比L0s状态更进一步的链路功耗降低。除非特定外形规格明确要求,否则对L1链路状态的ASPM支持是可选的。
此外还定义了可选的L1电源管理子状态L1.1和L1.2。这些子状态适用于需要极低空闲功耗且可接受更长转换时间的场景,能进一步降低链路功耗。
每个组件必须通过ASPM支持字段报告其对ASPM的支持级别。如适用,每个组件还应报告其L0s和L1退出延迟(即从L0s或L1状态转换到L0状态所需的时间)。端点功能还必须报告其可承受的最坏情况延迟阈值,例如避免因从L0s或L1状态转换到L0状态而产生的延迟导致内部FIFO溢出等风险。电源管理软件可利用所提供的这些信息来启用相应级别的ASPM。
L1退出延迟同样适用于L0p状态,但当用于L0p时,该延迟表示拓宽链路宽度所需的时间。链路在此期间仍保持可操作状态,但带宽较低。
本规范的未来草案可能会定义一种机制,用于报告端点在L0p降低带宽状态下可承受的最坏情况延迟。该机制可能涉及多个延迟要求值,具体数值取决于链路的起始与结束宽度。电源管理软件可利用此信息,为ASPM启用适当的L0p链路宽度。
若链路的对端组件使用同源参考时钟,或各自采用独立时钟源时,L0s退出延迟可能存在显著差异。PCI Express-PM软件通过其能力结构链路控制寄存器中的"同源时钟配置"位,向每个设备通知其时钟配置。该位将作为设备上报L0s退出延迟值的决定性依据。
ASPM功能默认的启用或禁用状态取决于具体实现准则和/或相关外形规格规范的要求。软件可根据第5.4.1.4.1节所述流程启用或禁用ASPM。
电源管理软件通过编程ASPM控制字段,来启用或禁用组件中各端口的ASPM功能。需要注意的是,新的BIOS代码在传统操作系统下可有效控制ASPM功能的启用或禁用,但支持PCI Express的操作系统可选择覆盖BIOS配置的ASPM设置。
2.3 ASPM之 L0s
Flit Mode does not support L0s.
Retimers do not support L0s.
L0s退出延迟主要取决于接收端快速实现位同步与符号锁定的能力。现有高频时钟解决方案采用的不同技术路径,可能导致其L0s退出延迟存在显著差异,进而影响ASPM的能效表现。为通过ASPM实现最优节能效果,应通过合理选择时钟方案来保持较低的L0s退出延迟。
2.3.1 进入ASPM的L0s
2.3.1.1 特别说明
链路两端的L0s状态进入机制,是独立管理。链路两端的每个设备均有责任在其发送通道上发起L0s状态进入流程。软件不得在链路任一端组件不支持L0s的情况下启用该链路的任意方向L0s功能,否则将导致未定义行为。
根据 PCIe 规范,要启用并进入 L0s 状态,链路两端的组件都必须支持 L0s。
被禁用L0s状态的端口绝不能将其发送通道转换至L0s状态。然而,若端口宣告支持L0s,则必须确保其接收通道能够耐受以下操作:因对端设备将其发送通道置入L0s状态而导致本端接收通道进入L0s,随后又能返回L0状态。
2.3.1.2 L0s调用策略
已启用L0s入口功能的端口,若在建议不超过7微秒的时间段内持续满足下述空闲条件,则通常应将其发送通道转换至L0s状态。在此时间范围内,端口用于判定何时进入L0s的具体策略由实现方案自行定义。发送器始终不具备必须进入L0s的强制性义务。
空闲状态的定义
多功能设备function的上行端口USP, 仅当其所有功能均处于空闲状态时,才被视为空闲。
非交换器端口在满足以下条件时被判定为空闲:
• 无待传输TLP通过该链路,或无可用流控信用用于传输任何TLP
• 无待传输DLLP交换器上行端口功能在满足以下条件时被判定为空闲:
• 该交换器所有下行端口的接收通道均不处于L0、Recovery或Configuration状态
• 无待传输TLP,或无可用流控信用用于传输任何数据
• 无待传输DLLP交换器下行端口在满足以下条件时被判定为空闲:
• 该交换器上行端口的接收通道不处于L0、Recovery或Configuration状态
• 无通过该链路传输的待处理TLP,或无可用流控信用
• 无待传输DLLP
有关物理层进入L0s状态的详细信息,请参阅第4.2节。
信用并不是单一的,而是根据TLP的类型进行划分的,主要分为:
信用类型 | 对应的TLP类型 | 作用 |
---|---|---|
Posted Credit | Posted TLP(如Memory Write) | 发送这种TLP不需要对方的响应,消耗Posted信用。 |
Non-Posted Credit | Non-Posted TLP(如Memory Read) | 发送这种TLP后,对方必须返回一个Completion TLP,消耗Non-Posted信用。 |
Completion Credit | Completion TLP(如Read Completion) | 用于返回读请求的数据,消耗Completion信用。 |
2.3.2 退出ASPM的L0s
处于L0s状态的发送器必须在有待传输TLP或DLLP时立即启动L0s退出流程。需注意,从L0s链路状态转换的启动不依赖于流控信用的状态(或可用性)。链路必须能够恢复到L0状态,并实现跨链路的流控信用交换。例如,若链路进入L0s状态时某类信用已全部耗尽,当需要发送新信用时,链路任一端组件仍必须能够将链路转换至L0状态。值得注意的是,组件可适时预判空闲状态结束并启动L0s发送端退出,例如在接收到非转发请求时。
2.3.2.1 DSP 发起退出
Downstream Initiated Exit , 这里的 Downstream 指的是 USP port .
组件的上行端口若需通过链路进行通信,则允许在其发送链路上(对于下游交换机而言即上行端口发送通道)启动L0s低功耗状态退出流程。该组件将按照第4.2节所述,启动上行方向通道向L0状态的转换。
若上游组件为交换机(即非根复合体),则一旦检测到其任意下游端口退出L0s状态,必须立即启动其上行端口发送通道的状态转换(前提是该上行端口的发送通道正处于低功耗状态)。
2.3.2.2 USP 发起退出
下游端口若需通过链路进行通信,则允许在其任一发送链路上启动L0s低功耗状态退出流程。该组件将按照第4章所述,启动下行方向通道向L0状态的转换。
若下游组件包含交换机,则一旦检测到其上行端口退出L0s状态,必须立即启动其时处于L0s状态的所有下行端口发送通道的状态转换。此转换不影响以下链路:已处于L0状态的链路,以及下游组件处于低功耗状态(即D1-D3hot状态)的链路。
举例说明:假设某交换机的上行端口处于L0s状态,其下游设备处于D1状态。此时一个配置请求数据包向下游传输至该交换机,最终目的是将该下游设备从D1状态重配置至D0状态。交换机的上行端口链路必须转换至L0状态以允许数据包到达交换机,而连接D1状态设备的下行链路此时不会立即转换至L0状态,将维持L1状态。当数据包经检查被路由至与D1状态设备相连的下行端口时,如第4.2节所述,交换机会将该下行链路转换至L0状态。需注意,此次向L0状态的转换是由数据包被路由至该特定下行L1链路所触发,而非由上行端口链路向L0状态的转换所引发。若数据包目的地是其他下行链路,则该特定下行链路将保持L1状态不变。