ACPI _OSC 控制

nmc*_*nmc 2 acpi power-management eeepc 12.04

我注意到 dmesg 输出中有一个错误,ubuntu 无法启用 ASPM:

[    0.192722]  pci0000:00: ACPI _OSC support notification failed, disabling PCIe ASPM
[    0.192728]  pci0000:00: Unable to request _OSC control (_OSC support mask: 0x08)
Run Code Online (Sandbox Code Playgroud)

虽然我知道这不是错误,但我想问一下是否有办法纠正它并启用 ASPM,原因是它应该可以延长电池寿命(powertop 显示 PCIe 始终 100% 开启)。

编辑:我在 ASUS eee pc 1015px 上运行最新的 bios 版本 (1401)

Col*_*ing 6

我从我的博客(加上一些更改)中粘贴了这个,因为它为这个问题添加了一些上下文。

基于 PCI Express 的串行链接设备可以通过活动状态电源管理 (ASPM) 进行管理,以延长笔记本电脑和上网本等移动设备的电池寿命。ASPM 是一种电源管理协议,它允许操作系统的电源管理将链路物理层置于低功耗模式,并且它能够指示链路上的其他设备也进入低功耗模式。

好的一面是我们使用 ASPM 节省了电量,但是,它会引入一些延迟,因为在低功耗状态下总线需要时间来唤醒。PCIe 规范(2.0 版)定义了两种电源模式:

  • L0s,在链路上的方向上设置低功耗模式(通常来自物理链路层控制器下游)

  • L1,在链路的两个方向上设置低功耗模式,但是唤醒延迟更大。

不幸的是,您的固件似乎向内核表明它确实不支持您的硬件上的 ASPM。内核已使用 ACPI _OSC 控件查询固件以查看是否支持 ASPM,并被告知不支持,因此禁用了 ASPM。禁用此功能的原因是特定于供应商的。这可能是因为在 Windows 上,某些东西在启用 ASPM 时挂起或不可靠,因此固件将其完全禁用。

Linux 还提供了一些 ASPM 驱动程序内核参数以允许某种程度的可调整性。可以使用以下内核参数:

禁用 ASPM:

pcie_aspm=off
Run Code Online (Sandbox Code Playgroud)

使用默认固件配置:

pcie_aspm=default
Run Code Online (Sandbox Code Playgroud)

禁用 ASPM 和时钟电源管理:

pcie_aspm=performance
Run Code Online (Sandbox Code Playgroud)

最高省电模式,启用ASPM和时钟电源管理:

pcie_aspm=powersave
Run Code Online (Sandbox Code Playgroud)

强制 ASPM 开启:

pcie_aspm=force
Run Code Online (Sandbox Code Playgroud)

您可能希望修改最后一个设置,看看是否可以覆盖默认的 ASPM 设置。