点击上方蓝字【囧囧妹】一起学习,一起成长!
PCI Express(简称PCIe或PCI-E)是一种高速串行计算机总线,是PCI标准的替代品。它的主要优点是高带宽、低延迟和可靠性。与传统的PCI总线相比,PCIe提供了更高的数据传输速率,并且支持多种不同类型的设备,如网卡、显卡、声卡等。
PCIe的硬件原理是基于包交换(packet switching)的思想。在PCIe中,数据是以包的形式发送和接收的。每个包都包含有关发送者、接收者和数据内容的信息。这些信息是通过帧头(header)和帧尾(trailer)的形式发送的。帧头和帧尾还包含有关CRC(循环冗余校验)、包长度和其他错误检测信息的信息。
在PCIe中,数据包在通道上传输。通道是由一组线路(通常是双绞线或铜线)组成的。一个通道由一对设备连接,一个是发送者,另一个是接收者。通道的带宽取决于通道上线路的数量和宽度。在PCIe中,通道有多种不同的版本,每个版本都提供了不同的带宽。
L1 间断性电源管理是通过在L1 状态下关闭通信信号,来降低通信电流的一种方式。这个状态下Link Training和Link Active Reporting Protocol(LARP)都会被禁止,但是通信仍然能够恢复。 L2 睡眠电源管理是在L2状态下关闭电源并禁止所有通信信号,来降低电源电流的一种方式。这个状态下,Link Training和LARP都会被禁止,并且通信也无法恢复。
在PCIe中,电源管理是由设备端口(Endpoint)来控制的,而Root Complex通常是不具备电源管理能力的。设备端口可以通过控制电压和电流来实现电源管理。在pcie中,设备端口可以通过使用电压状态转换器(Voltage State Converter,VSC)和电流状态转换器(Current State Converter,CSC)来实现电源管理。VSC可以将电压调整到不同的水平以满足不同状态下的电力需求,而CSC则可以将电流调整到不同水平以满足不同状态下的电力需求。
PCIe的电源管理也分为如下两部分,一部分是Link Power Management(LPM),另一部分是Active State Power Management(ASPM)。
Link Power Management(LPM)是用来管理PCIe链路的电源状态的。LPM允许PCIe设备在链路上进行睡眠和唤醒操作,从而节省电力。LPM通过控制Link电源状态来实现电源管理,可以将Link电源状态分为三种:L0、L1、L2。L0是正常工作状态,L1是睡眠状态,L2是更深度的睡眠状态。 Active State Power Management(ASPM)是用来管理PCIe设备的电源状态的。ASPM可以控制PCIe设备的电源状态,可以将PCIe设备的电源状态分为两种:Active和Idle。Active状态是设备正在工作状态,Idle状态是设备休眠状态。
在进行电源管理时,设备驱动程序需要在设备上设置一些寄存器来控制电源状态。例如,在LPM中,驱动程序需要设置Link Control 2寄存器来控制Link电源状态。在ASPM中,驱动程序需要设置Link Control寄存器来控制设备电源状态。
需要注意的是,在进行电源管理时,需要考虑硬件和软件的兼容性。
PCI-PM (Power Management for PCI) 是一种 PCI 的电源管理标准,它提供了许多状态来管理 PCI 设备的电源。主要的状态有 D0 (工作状态)、D1、D2 和 D3 (睡眠状态)。
D0 状态是工作状态,在这种状态下,PCI 设备可以正常工作。 D1 状态是第一级睡眠状态,在这种状态下,PCI 设备可以继续处理本地请求,但不能处理来自系统总线的请求。 D2 状态是第二级睡眠状态,在这种状态下,PCI 设备不能处理本地请求和系统总线的请求。 D3 状态是第三级睡眠状态,在这种状态下,PCI 设备不能处理任何请求,并且最大限度地减少电源消耗。
PCI Express (PCIe) 状态转换指的是在不同状态之间转换的过程。PCIe通信包括L0,L0s,L1,L2,L3五种状态,其中L0是工作状态,L0s是睡眠状态,L1是低功耗状态,L2是更低的功耗状态,L3是更低的功耗状态.
在L0和L0s之间,转换是通过L0s Entry和L0s Exit来实现的。在L1和L0之间,转换是通过L1 Entry和L1 Exit来实现的。在L2和L0之间,转换是通过L2 Entry和L2 Exit来实现的。在L3和L0之间,转换是通过L3 Entry和L3 Exit来实现的。
这些转换需要符合PCI-PM电源管理规范中的条件,并由硬件和软件协调实现。
PCIe的链路电源状态主要有L0、L0s、L1、L2、L3五种状态:
L0状态:链路处于传输数据的状态,与D0对应。 L0s状态:链路处于休眠状态,但是仍然能够接收数据。
L0s状态是PCI Express链路的一种睡眠状态,在这种状态下,链路上的电源消耗最小。在L0s状态下,链路上的数据传输和错误检测仍然可用,但是链路上的带宽降低了。进入L0s状态可以通过降低链路的时钟频率和电压来实现。在L0s状态下,链路上的设备可以在需要时快速返回L0状态。
L1状态:链路处于休眠状态,并且能够接收数据。
L1是PCI Express链路电源管理的一种状态,指的是链路中的设备在空闲状态下的高休眠状态。在L1状态下,链路上的设备会减少对系统的电力消耗,但同时也会增加唤醒时间。使用L1状态可以在保证系统性能的同时降低电力消耗。
L2状态:链路处于电源管理状态。
L2状态(Link Power Management State L2),是PCI Express链路电源管理的一种状态,表示链路处于睡眠状态。在L2状态下,链路的发送和接收单元都被禁止工作。这个状态的目的是节省链路的电力消耗。L2状态可能是由系统设计者来设置的,也可能是由设备驱动程序来设置的。在L2状态下,链路上的所有通信都被暂停,并且链路上的所有信号都被禁止。
L3状态:链路处于关机状态。
| D状态 | 链路电源状态 | 描述 |
| D0 | L0/L0s | 活动状态,设备正在工作 |
| D1 | L1 | 低功耗状态,设备仍在工作但是功耗较低 |
| D2 | L2 | 更低功耗状态,设备仍在工作但是功耗更低 |
| D3 | L3 | 最低功耗状态,设备已经关闭,没有工作 |
linux内核源码中,PCIe的驱动代码位于drivers/pci/aspm.c中。驱动代码实现了PCIe总线的配置和状态管理。这个驱动实现了PCIe电源管理功能,以确保PCIe从控制器在需要时处于工作状态,并在不需要时进入睡眠状态,从而减少电源消耗。




