Java教程

ASPM介绍

本文主要是介绍ASPM介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

aspm是pcie的一种省电模式。涉及到的寄存器主要是pci配置空间的如下3个寄存器。

(以下已usb 3.0 控制器的pci配置空间为例子:

其中:

link capabilities register [11:10]是活动状态链路的PM支持位。 [11:10] = 00保留。[11:10]=01表示支持L0s。[11:10]=10又保留了。[11:10]=11表示同时支持L0s和L1。设备也使用[14:12]和[17:15]来指示L0s和L1的退出延迟。

link control register[1:0]是活动状态的PM控制位。[1:0]=00表示两者都是禁用的。01表示启用了L0s,禁用了ASPM L1。10表示禁用L0s,启用ASPM L1。11表示两者都是启用的。

具体的datasheet如下:

 

 要看BIOS下有没有设置,可以在shell下使用mm命令查看对应寄存器,看BIOS有没有设置相应位

在OS下,可以通过命令:

lspci -s 01:00.0 -xxx |vim -

图中01:00.0表示这个设备在BUS 1,Dev 0, Func 0上。具体可以先使用lspci命令查看

查看相应的0xAC,0xB0偏移地址的值就可以知道了。

也有如下命令:

setpci -s 01:00.0 b0.B=43

通过修改偏移地址0xb0的值为0x43,其中B代表一个字节

另外,内核可以通过添加config来实现不同的策略。目前有如下策略

defualt:使用BIOS的设置

powersave:内核会打开L0s,以及L1

performance:强行关闭L0s,L1,就算BIOS打开了

power_superave:比powersave多了L1 substates

具体可以通过OS下的这个文件查看

cat /sys/module/pcie_aspm/parameters/policy 

其中涉及到的config在kernel中:

其中涉及了4中状态。查看drivers/pci/pcie/Makefile可以看到相应的文件

 补充:

以下转载自:[PCIe] [电源管理] 面向硬件的ASPM链路状态和L1子状态_messi_cyc的专栏-CSDN博客_pciexpress链接状态电源管理

PCIe设备的低功耗状态要求系统驱动程序显式地将设备置于低功耗状态,从而PCIe链路则可以依次变为低功耗链路状态。PCIe规范允许PCIe链路在没有系统驱动的情况下进入低功耗状态。这个特性就是所谓的主动状态电源管理(ASPM)。一般来说,无论是系统驱动端硬件(RC)还是设备硬件(EP)都可以通过检测pcie链路上的空闲时间,然后启动电源状态转移。

这篇关于ASPM介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!