ACPI(高级配置和电源接口)支持操作系统设置和控制各个硬件部件。 ACPI 可以取代 PnP 和 APM。 它提供有关电池、AC 适配器、温度、风扇和系统事件(例如“合上机盖”或“电池电量低”)的信息。
BIOS 提供包含有关各个部件和硬件访问方法信息的表。 操作系统使用这些信息执行指派中断或激活和取消激活部件等任务。 因为操作系统执行 BIOS 中储存的命令,所以功能取决于 BIOS 实施。 /var/log/boot.msg 中报告了 ACPI 能够检测并装载的表。 有关对 ACPI 问题进行故障诊断的详细信息,请参见第 18.2.3 节 “故障诊断”。
CPU 可以采用三种省电方法。 根据计算机的运行方式,还可以将这三种方法结合起来使用。 省电还意味着系统温度不会升得过高并且激活风扇的频率会降低。
PowerNow! 和 Speedstep 是 AMD 和 Intel 为这一技术指定的名称。 但是,其他制造商的处理器中也应用了这一技术。 CPU 的时钟频率及其核心电压同时降低,因而采用这一技术所节省的电量远远超过了线性省电量。 这意味着,如果频率减半(一半的性能),所节省的电量远不止一半。 此技术独立于 ACPI。可使用两种主要的方法来执行 CPU 频率调节:通过内核本身或通过用户空间应用程序。 因此,可以在 /sys/devices/system/cpu/cpu*/cpufreq/ 下设置不同的内核管理器。
如果设置了用户空间管理器,则内核会将对 CPU 频率调节的控制指定给用户空间应用程序(通常是守护程序)。 在 SUSE Linux Enterprise Desktop 分发中,此守护程序是 powersaved 程序包。使用此实施时,将根据当前系统负载调整 CPU 的频率。 默认情况下,将使用某个内核实施。 但是,在某个硬件上或对于特定处理器或驱动器,用户空间实施仍是唯一的工作解决方法。
它是动态 CPU 频率策略的内核实施,应该可在大多数系统上运行。 只要系统负载过高,CPU 频率将立即增加。 它在系统负载较低时也较低。
此管理器与按需实现相似,只是使用更保守的策略。对于 CPU 频率增加之前的特定时间内,系统的负载必须很高。
静态地将 cpu 频率设置为最低。
静态地将 cpu 频率设置为最高。
此技术将忽略一定百分比的 CPU 时钟信号脉冲。 如果节流 25%,则将忽略四分之一的脉冲,如果节流 87.5%,则只有八分之一的脉冲到达处理器。 但是,采用这种方法所节省的电量稍微低于线性省电量。 通常,只有在频率调节不可用或要最大程度节省电量时才使用节流。 该技术还必须用特殊进程控制。系统接口是 /proc/acpi/processor/*/throttling。
只要没有活动,操作系统就会把处理器置于休眠状态。在这种情况下,操作系统会向 CPU 发送 halt 命令。有三种状态:C1、C2 和 C3。最经济的状态是 C3,在这种状态下,连处理器高速缓存与主存之间的同步都将暂停。 因此,只有在没有任何其他设备通过总线主控芯片活动修改主储存器的内容时才能应用此状态。 某些驱动程序禁止使用 C3。 当前状态显示在 /proc/acpi/processor/*/power 中。
只有当处理器忙时,才需要进行频率调节和节流,这是因为当处理器处于空闲状态时总是会应用最经济的 C 状态。 如果 CPU 忙,则建议采用的省电方法是频率调节。 处理器经常只在部分负载的状态下工作。 在这种情况下,可以以较低的频率运行。 通常,由内核按需管理器 (kernel on demand governor) 或一个守护程序(如 powersaved)控制的动态频率调节是最佳方法。如果使用电池工作或如果您想让计算机冷却或安静,则静态设置为低频率会非常有用。
节流应作为最后没有办法时采用的方法,例如,虽然系统负载很高,但为延长电池工作时间而采用节流。 但是,如果节流程度过高,某些系统将不会正常运行。 此外,如果 CPU 处理的任务量很少,则 CPU 节流就没什么作用。
一系列相对全面的 ACPI 实用程序包含这样一些工具:只显示信息(例如,电池电量水平和温度)的工具(acpi、klaptopdaemon 等)、简化对 /proc/acpi 中的结构进行访问的工具或协助监视更改的工具(akpi、acpiw 和 gtkacpiw)以及用于编辑 BIOS 中 ACPI 表的工具(包 pmtools)。
问题有两种不同的类型。 一种是内核的 ACPI 代码可能包含未及时检测出的错误。 在这种情况下,可以通过下载获得解决方案。 更多情况下,问题是由 BIOS 引起的。有时,会故意将一些不符合 ACPI 规范的配置集成在 BIOS 中,用于避免其他常用操作系统中 ACPI 实施的错误。 在 ACPI 实施中有严重错误的硬件部件会被记录在一个黑名单中,防止 Linux 内核对这些部件使用 ACPI。
在遇到问题时,首先要做的是更新 BIOS。 如果计算机根本未引导,则使用以下引导参数之一可能会解决问题:
不使用 ACPI 配置 PCI 设备。
只执行简单的资源配置。 不要将 ACPI 用于其他目的。
禁用 ACPI。
![]() | 不使用 ACPI 引导会出现问题 |
|---|---|
某些较新的计算机(特别是 SMP 系统和 AMD64 系统)需要 ACPI 以正确配置硬件。 在这些计算机上,禁用 ACPI 可能会产生问题。 | |
有时,计算机会对通过 USB 或 FireWire 挂接的硬件感到困惑。如果一台计算机拒绝引导,请拔下所有不需要的硬件,然后再次重试。
引导后,用命令 dmesg| grep -2i acpi 来监视系统的引导消息(或所有消息,因为问题可能不是由 ACPI 引起的)。 如果在分析 ACPI 表时出错,则最重要的表 DSDT(系统差异描述表)可替换为更高的版本。在这种情况下,将忽略 BIOS 中有问题的 DSDT。 中对这一过程进行了介绍。第 18.4 节 “查错”
在内核配置中,可以使用开关来激活 ACPI 调试消息。 如果已编译并安装了具有 ACPI 调试功能的内核,则支持对详细信息执行错误专家搜索。
如果遇到 BIOS 或硬件问题,则最好与制造商联系。 特别是如果制造商不常对 Linux 提供支持,他们就应该面对这些问题。 只有在制造商意识到有很多客户在使用 Linux 时,他们才会重视这一问题。
http://tldp.org/HOWTO/ACPI-HOWTO/(详细的 ACPI HOWTO 文档,包含 DSDT 增补程序)
http://www.intel.com/technology/iapc/acpi/index.htm(高级配置和电源接口)
http://www.lesswatts.org/projects/acpi/(Sourceforge 中的 ACPI4Linux 项目)
http://acpi.sourceforge.net/dsdt/index.php(Bruno Ducrot 开发的 DSDT 增补程序)