电源管理对于笔记本电脑尤其重要,但对于其他系统也很有用。ACPI(高级配置和电源接口)在所有现代计算机(笔记本电脑、台式机和服务器)上都可用。电源管理技术需要合适的硬件和 BIOS 例程。大多数笔记本电脑和许多现代台式机和服务器都满足这些要求。也可以控制 CPU 频率缩放以节省电力或降低噪音。
省电功能不仅对笔记本电脑的移动使用很重要,对台式系统也很重要。ACPI 中的主要功能及其使用是
不支持。
此模式将整个系统状态写入 RAM。随后,除了 RAM 之外的整个系统都进入休眠状态。在此状态下,计算机消耗的电量很少。此状态的优点是可以实现在几秒钟内恢复到相同点的工作,而无需启动和重新启动应用程序。此功能对应于 ACPI 状态 S3。
在此操作模式下,整个系统状态都写入硬盘,系统关闭电源。必须至少有与 RAM 大小相同的交换分区才能写入所有活动数据。从这种状态恢复大约需要 30 到 90 秒。恢复之前状态。许多制造商提供此模式的有用混合变体,例如 IBM Thinkpad 中的 RediSafe。相应的 ACPI 状态是 S4。在 Linux 中,挂起到磁盘由独立于 ACPI 的内核例程执行。
mkswap 格式化交换分区时,UUID 已更改如果可能,请不要使用 mkswap 重新格式化现有的交换分区。 使用 mkswap 重新格式化将更改交换分区的 UUID 值。 最好通过 YaST 重新格式化(这将更新 /etc/fstab)或手动调整 /etc/fstab。
ACPI 检查电池充电状态并提供相关信息。此外,它还会协调在达到关键充电状态时要执行的操作。
关机后,计算机关闭电源。当自动关机在电池耗尽之前执行时,这一点尤其重要。
与 CPU 结合使用时,可以通过三种不同的方式节省能量:频率和电压缩放(也称为 PowerNow! 或 Speedstep)、节流和将处理器置于睡眠状态(C 状态)。根据计算机的运行模式,这些方法也可以组合使用。
ACPI 旨在使操作系统能够设置和控制各个硬件组件。ACPI 取代了电源管理即插即用 (PnP) 和高级电源管理 (APM)。它提供有关电池、AC 适配器、温度、风扇和系统事件(如 “关闭盖子” 或 “电池电量低。”)的信息。
BIOS 提供包含有关各个组件和硬件访问方法信息的表。操作系统使用此信息执行诸如分配中断或激活和停用组件之类的任务。由于操作系统执行存储在 BIOS 中的命令,因此功能取决于 BIOS 实现。ACPI 可以检测和加载的表在 journald 中报告。有关查看日志消息的更多信息,请参阅 第 11 章,journalctl: 查询 systemd 日志。有关有关故障排除 ACPI 问题的更多信息,请参阅 第 29.2.2 节,“故障排除”。
CPU 可以通过三种方式节省能量
频率和电压缩放
节流时钟频率 (T 状态)
将处理器置于睡眠状态 (C 状态)
根据计算机的运行模式,这些方法可以组合使用。节省能量也意味着系统发热量减少,风扇激活频率降低。
频率缩放和节流仅在处理器繁忙时相关,因为最经济的 C 状态无论如何都会在处理器空闲时应用。如果 CPU 繁忙,频率缩放是推荐的省电方法。通常,处理器仅以部分负载运行。在这种情况下,它可以以较低的频率运行。由内核按需调控器控制的动态频率缩放是最佳方法。
节流应作为最后的手段,例如,为了在系统负载较高的情况下延长电池运行时间。但是,某些系统在过度节流时无法平稳运行。此外,如果 CPU 没有太多工作要做,CPU 节流没有意义。
有关详细信息,请参阅 “系统分析和调优指南”一书,第 12 章“电源管理”。
存在两种不同类型的问题。一方面,内核的 ACPI 代码可能包含未及时检测到的错误。在这种情况下,将提供可供下载的解决方案。更常见的是,问题是由 BIOS 引起的。有时,为了规避其他广泛使用的操作系统中 ACPI 实现中的错误,BIOS 会故意集成对 ACPI 规范的偏差。ACPI 实现中存在严重错误的硬件组件记录在黑名单中,以防止 Linux 内核对这些组件使用 ACPI。
遇到问题时首先要做的是更新 BIOS。如果计算机无法启动,以下启动参数可能会有所帮助
不使用 ACPI 配置 PCI 设备。
仅执行简单的资源配置。不将 ACPI 用于其他目的。
禁用 ACPI。
某些较新的机器(尤其是 SMP 系统和 AMD64 系统)需要 ACPI 才能正确配置硬件。在这些机器上,禁用 ACPI 可能会导致问题。
有时,通过 USB 或 FireWire 连接的硬件会使机器感到困惑。如果机器拒绝启动,请拔掉所有不必要的硬件并重试。
使用命令 dmesg -T | grep -2i acpi(或所有消息,因为问题可能不是由 ACPI 引起的)在启动后监视系统的启动消息。如果在解析 ACPI 表时发生错误,最重要的表——DSDT(区分系统描述表)可以用改进的版本替换。在这种情况下,BIOS 的有缺陷的 DSDT 将被忽略。该过程在 第 29.4 节,“故障排除” 中描述。
在内核配置中,有一个用于激活 ACPI 调试消息的开关。如果编译并安装了带有 ACPI 调试的内核,将发出详细信息。
如果您遇到 BIOS 或硬件问题,始终建议联系制造商。即使他们并不总是为 Linux 提供帮助,也应该让他们面对问题。只有当制造商意识到足够多的客户使用 Linux 时,他们才会认真对待该问题。
https://tldp.cn/HOWTO/ACPI-HOWTO/(详细的 ACPI HOWTO,包含 DSDT 补丁)
https://uefi.org/specifications(高级配置和电源接口规范)
在 Linux 中,如果不需要硬盘,可以完全使其进入睡眠状态,或者以更经济或更安静的模式运行。在现代笔记本电脑上,您无需手动关闭硬盘,因为它们会在不需要时自动进入节能模式。但是,如果您想最大限度地节省电力,请使用 hdparm 命令测试以下方法。
它可用于修改硬盘设置。选项 -y 立即将硬盘切换到待机模式。 -Y 使其进入睡眠状态。 hdparm -S X 使硬盘在一段时间不活动后关闭。将 X 替换为如下所示:0 禁用此机制,导致硬盘持续运行。从 1 到 240 的值乘以 5 秒。从 241 到 251 的值对应于 1 到 11 倍 30 分钟。
可以使用选项 -B 控制硬盘的内部省电选项。选择从 0 到 255 的值以实现最大节能到最大吞吐量。结果取决于使用的硬盘,并且难以评估。要使硬盘更安静,请使用选项 -M。选择从 128 到 254 的值以实现安静到快速。
通常,很难使硬盘进入睡眠状态。在 Linux 中,多个进程将数据写入硬盘,并反复唤醒它。因此,了解 Linux 处理需要写入硬盘的数据的方式非常重要。首先,所有数据都缓冲在 RAM 中。此缓冲区由 pdflush 守护程序监视。当数据达到一定年龄限制或当缓冲区填充到一定程度时,缓冲区内容会刷新到硬盘。缓冲区大小是动态的,取决于内存大小和系统负载。默认情况下,pdflush 设置为短间隔以实现最大数据完整性。它每 5 秒检查一次缓冲区并将数据写入硬盘。以下变量很有趣
/proc/sys/vm/dirty_writeback_centisecs
包含 pdflush 线程唤醒的延迟(以百分之一秒为单位)。
/proc/sys/vm/dirty_expire_centisecs
定义在什么时间范围内应写入最新的脏页。默认值为 3000,即 30 秒。
/proc/sys/vm/dirty_background_ratio
最大百分比的脏页,直到 pdflush 开始写入它们。默认值为 5%。
/proc/sys/vm/dirty_ratio
当脏页超过总内存的此百分比时,进程会在其时间片期间强制写入脏缓冲区,而不是继续写入。
更改 pdflush 守护程序设置可能会损害数据完整性。
除了这些过程之外,日志文件系统(如 Btrfs、Ext3、Ext4 等)独立于 pdflush 将其元数据写入,这也阻止了硬盘关闭。 为了避免这种情况,为移动设备开发了一个特殊的内核扩展。要使用该扩展,请安装 laptop-mode-tools 包,并参阅 /usr/src/linux/Documentation/laptops/laptop-mode.txt 以获取详细信息。
另一个重要因素是活动程序的工作方式。例如,好的编辑器会定期将当前修改的文件的隐藏备份写入硬盘,从而唤醒磁盘。可以以牺牲数据完整性为代价禁用这些功能。
在这种联系中,邮件守护程序 postfix 使用变量 POSTFIX_LAPTOP。如果将此变量设置为 yes,postfix 访问硬盘的频率会降低。
在 openSUSE Leap 中,这些技术由 laptop-mode-tools 控制。
所有错误消息和警报都记录在系统日志中,可以使用命令 journalctl 查询(有关详细信息,请参阅 第 11 章,journalctl: 查询 systemd 日志)。以下部分涵盖最常见的问题。