3. 电源管理方法

任何电源管理技术的基本目标都是减少实体的功耗。在笔记本电脑电源管理方面,我们的重点是减少 CPU 和硬盘的使用率。为了使事情更简单一些,这被分解为显而易见的、半显而易见的不显而易见的技术。当然,效果可能因人而异。

3.1. swsusp(8)

Suspend to Disk (S2D)(休眠到磁盘)在 Linux 下仍然是一项难以实现的任务。目前的主要项目是 swsusp,可在 http://sourceforge.net/projects/swsusp 获取。它仍然相当新,需要进行一些配置才能启用它。

3.2. hdparm(8)

hdparm 是一个 Linux shell 实用程序,可用于降低各种 ATA/IDE 驱动器的转速并提高其性能。如果您的系统未包含它,您可以从 http://freshmeat.net/redir/hdparm/4062/url_homepage/hardware 获取源代码。例如,以下命令提供了带同步的 32 位 IO 支持 (-c3)、DMA 支持 (-d1)、高级电源管理 (-B128)、写入缓存 (-W1)、磁盘在五分钟后停止转动 (-S60)。这为我带来了巨大的性能提升和额外的节能效果。请注意,效果可能因人而异,您需要根据您的特定系统进行调整,以防止数据丢失(尤其是 -B 和 -m 标志!)。

在以下示例中,我们在使用 hdparm 之前和之后运行了一些硬盘驱动器的读/写基准测试。请注意,虽然我们的缓存读取保持大致相同,但我们从驱动器进行的实际物理读取却大幅增加!如果您喜欢冒险,可以谨慎地使用 -m、-c、-B 和 -u 开关(请参阅手册页)。

bash# hdparm -tT /dev/hda
Timing buffer-cache reads:   588 MB in  2.01 seconds = 292.15 MB/sec
Timing buffered disk reads:   14 MB in  3.46 seconds =   4.05 MB/sec

bash# hdparm -k1 -K1 -c3 -d1 -W1 /dev/hda
bash# hdparm -tT /dev/hda
Timing buffer-cache reads:   596 MB in  2.01 seconds = 297.01 MB/sec
Timing buffered disk reads:   72 MB in  3.05 seconds =  23.58 MB/sec

3.3. sysklogd(8)

检查您的 /etc/syslog.conf 文件中是否存在不必要的日志记录活动,并优化其性能。如果您不想记录任何系统活动,请考虑完全禁用 syslogd 和 klogd,或者至少尽量减少系统执行的日志记录量。您还可以使用减号 (-) 作为每个条目的前缀,以省略在每次日志条目后同步文件 [1]。例如,这将记录优先级为 info 或更高,但低于 warning 的任何内容到 /var/log/messages/var/log/mail,而无需在每次写入后同步到磁盘。由于我们希望保留优先级为 warning 的所有消息,因此它们将被记录到不同的文件中,而无需禁用磁盘同步(以防止系统崩溃时数据丢失)。

*.warning			/var/log/syslog
*.info;*.!warning;mail.none	-/var/log/messages
mail.info;mail.!warning		-/var/log/mail

另一个需要注意的项目是 syslogd(8) 写入的 -- MARK -- 消息。这将影响您的硬盘驱动器非活动设置。您只需通过运行带有以下内容的 syslogd(8) 来禁用此功能

if [ -x /usr/sbin/syslogd -a -x /usr/sbin/klogd ]; then
	# '-m 0' disabled 'MARK' messages
	/usr/sbin/syslogd -m 0
	sleep 1
	# '-c 3' displays errors on console
	# '-x' turns off broken EIP translation
	/usr/sbin/klogd -c 3 -x
fi

3.4. XFree86

在 XFree86 下,基本上可以执行两种不同类型的屏幕消隐:BlankTime 和 DPMS。第一种只是一种虚假的“消隐”效果,实际上并不能节省任何电量。另一种则专门针对符合 DPMS 标准的显示器,必须专门启用才能生效。它们位于您的 XF86Config 文件中,该文件通常位于 /etc/X11/XF86Config 中。

如果您有符合 DPMS 标准的显示器,您可能需要在 XF86Config 文件的 Monitor 部分下尝试启用对其的支持

Section "Monitor"
	Option	"DPMS"
EndSection

要操作 DPMS 功能,您可以在 ServerLayout 部分中创建/修改以下项目。

Section "ServerLayout"
	Option "BlankTime"	"10"	# Blank the screen in 10 minutes
	Option "StandbyTime" 	"20"	# Turn off screen in 20 minutes
	Option "SuspendTime"	"30"	# Full hibernation in 30 minutes
	Option "OffTime"	"40"	# Turn off DPMS monitor
EndSection

值得注意的是,BlankTime 实际上根本不是一种节能级别。屏幕被发送一个“虚假”的消隐效果,默认在 10 分钟后激活。或者,它可以指示屏幕保护程序应在多少分钟后激活。它与 DPMS 无关。

激活您的更改并重启 X-Windows 后,您可能需要检查您的日志文件,看看您的显卡是否在更改方面有任何问题

bash$ egrep "^\(WW|EE\)" /var/log/XFree86.0.log

您可能可以为您的特定显卡/芯片驱动程序启用其他选项;有关详细信息,请参阅 XFree86 文档 网站。

当然,所有这些也可以使用 xset(1) “即时”激活。如果您无法访问系统的 XF86Config 文件,那么将这些命令放在您的 ~/.Xsession~/.xinitrc 文件中是一个不错的选择。

bash$ xset -dpms			# Disable DPMS
bash$ xset +dpms			# Enable DPMS
bash$ xset s off			# Disable screen blanking
bash$ xset s 150			# Blank the screen after 150 seconds
bash$ xset dpms 300 600 900		# Set standby, suspend, & off times (in seconds)
bash$ xset dpms force standby		# Immediately go into standby mode
bash$ xset dpms force suspend		# Immediately go into suspend mode
bash$ xset dpms force off		# Immediately turn off the monitor
bash$ xset -q				# Query current settings

如果您使用的是 Linux 控制台(而不是 X-Windows),您需要使用 setterm(1)

bash$ setterm -blank 10			# Blank the screen in 10 minutes
bash$ setterm -powersave on		# Put the monitor into VESA power saving mode
bash$ setterm -powerdown 20		# Set the VESA powerdown to 20 minutes

3.5. KDE 3.1

3.5.1. 显示器电源控制

假设您已将 XFree86 配置为支持 DPMS,只需运行 kcontrol 并选择 Power Control/Display Power Control。从这里,您可以为您的显示器配置待机、挂起和关机设置。

3.5.2. 笔记本电脑电池

假设您已将内核配置为支持 APM 或 ACPI,只需运行 kcontrol 并选择 Power Control/Laptop Battery。从这里,您可以根据剩余电量配置系统的各种设置。

值得注意的是,一些运行 ACPI 的人倾向于看到以下消息

Your computer seems to have a partial ACPI installation. ACPI was probably 
enabled, but some of the sub-options were not - you need to enable at least 
'AC Adaptor' and 'Control Method Battery' and then rebuild your kernel.

如果您看到此消息,则表示 ACPI 未安装,或者更可能的是,KDE 无法识别您的特定 Linux ACPI 子系统。如果使用任何 ACPI 更新修补内核无法解决此问题,您必须不使用此 KDE 功能,或者,也可以恢复为使用 APM。

3.6. 能源之星

能源之星 是美国政府支持的旨在推广能源效率标准的计划。值得关注的是

通常,能源之星的节能是通过其他电源管理设置实现的,它本身并不是一种电源管理技术。

3.7. 交换文件

考虑在 /etc/fstab 中禁用您的交换文件以减少硬盘访问。如果您有大量内存,这绝对是最佳选择。判断您是否需要交换文件的一种方法是启用它,使用您的系统一段时间,并检查 /proc/meminfo/proc/swaps 以确定您的平均可用内存量,以及您的交换文件是否被使用。

例如,今天我编译了几个密集型程序,并且我的笔记本电脑已经连续运行了大约八个小时。对我的系统进行简单检查显示

bash$ cat /proc/swaps
Filename                                Type            Size    Used    
Priority
/dev/hda3                                partition      136544  0       -1

bash$ cat /proc/meminfo
MemTotal:       513880 kB
MemFree:        254820 kB
Buffers:         42812 kB
Cached:         142880 kB
SwapCached:          0 kB
Active:         159644 kB
Inactive:        76888 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       513880 kB
LowFree:        254820 kB
SwapTotal:      136544 kB
SwapFree:       136544 kB
Dirty:               0 kB
Writeback:           0 kB
Mapped:          86148 kB
Slab:            10748 kB
Committed_AS:   203944 kB
PageTables:       1140 kB
VmallocTotal:   516076 kB
VmallocUsed:      1468 kB
VmallocChunk:   514604 kB
HugePages_Total:     0
HugePages_Free:      0
Hugepagesize:     4096 kB

鉴于此,如果这是我未来使用情况的任何指标,我宁愿禁用我的交换文件。

3.8. tmpfs

使用启用了 tmpfs(临时文件系统)的内核编译您的内核,并使用它挂载您的 /tmp 目录。这里有用的部分是,由于它将像 RAM 磁盘一样工作(但也不会保存任何内容),因此不会将任何内容写入此挂载点上的硬盘驱动器。tmpfs 相对于更传统的 ramfs 的优势在于,它位于内核内部缓存中,并且会增长和缩小以适应放置在那里的文件。有关完整信息,请参阅内核的 Documentation/filesystems/tmpfs.txt。如果您未指定最大大小,它将默认为可用内存一半的上限。一个在 /tmp 上挂载 100MB 临时 ram 文件的示例 /etc/fstab 如下所示

tmpfs	/tmp	tmpfs	size=100m,mode=1777	0 0

3.9. 其他调整

修改 /proc/sys/vm/bdflush 允许用户指定在何种情况下将脏缓冲区刷新到磁盘、存在多少此类缓冲区等。详细信息请参阅 linux_src_tree/Documentation/sysctl/vm.txt(感谢 Marc Liberatore 指出这一点)。

启动您的系统并使用 lsmod 列出当前加载的模块。此处列出的任何内容很可能需要定期加载;将这些编译为内核的一部分而不是作为可加载模块可能有助于减少必须从磁盘加载它们的时间,并在很小的程度上减少启动系统所需的磁盘访问量。

检查您的 crontab 设置,看看是否有任何内容正在定期运行。注释掉任何不必要的项目。不要忘记检查每个用户的 crontab,包括用户“nobody”。如果您不需要安排任何后台活动,请考虑完全禁用 crond。相同的建议也适用于 atd。

如果您运行 httpd 来测试和/或开发网页,请尝试将 MinSpareServers 和 StartServers 的值更改为 1。不要定义任何 CustomLogging 或至少将 LogLevel 的值增加到 warn。如果您真的对自己有信心,可以将 ErrorLog 指令更改为指向 /dev/null。

考虑创建一个节能脚本,该脚本将立即使您的笔记本电脑进入低功耗模式

#!/bin/sh
if [ -x /usr/sbin/hdparm ]; then
	hdparm -y /dev/hda
fi

if [ -x /usr/X11R6/bin/xset ]; then
	xset dpms force off
fi

此外,值得考虑以下领域的任何内容

3.10. 节能神话

以前,重新编译 Linux PCMCIA 驱动程序以允许插槽具有 APM 电源支持是有益的。但是,这些驱动程序的大部分功能现在都内置到内核本身中。如果您对具体细节感兴趣,可以在 http://sourceforge.net/projects/pcmcia-cs/ 上找到 PCMCIA 项目页面。

有些人认为 APM 比 ACPI 提供更好的节能效果,反之亦然。虽然它们的电源管理技术不同,但在实际的电池使用测试中,据报道两者的性能大致相同。

与流行的看法相反,锂离子(见下文)电池确实会受到记忆效应的影响。幸运的是,在典型电池的寿命(3-4 年)内,这种影响并不大。任何告诉你不同的人都在推销东西。

注释

[1]

syslogd.c