打印
[电源]

Linux笔记本电源管理指南

[复制链接]
1063|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
说书先生|  楼主 | 2016-9-13 00:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
找了很久的东西,希望对大家有用,自己也在为不能关机的事情发愁,边发边学习

Linux是一种性能优越的开源操作系统,随着其性能和知名度越来越高,最主要的是在价格上无与伦比的优势,许多厂家开始推出Linux笔记本电脑,并且这种趋势大有愈演愈烈之势。我们知道,笔记本受到电池续航时间的限制,所以特别注重机器的电源管理。因此,本文将讨论如何处理这些事项。

一、概述

实际上,除了利用主板上的BIOS来管理电源外,大多数Linux系统本身都自带了管理电源的实用工具软件,来处理各种电源事件,如:

1.电池电量不足--这时机器会发出警告,并显示相应图标,或者将硬件挂起。

2.闲置--如果在一段时间内机器一直处于非活动状态,那么可以让机器休眠(如关闭硬盘以及停用音频及网络等服务)从而有效延长电池供电时间。

通过检测你的笔记本使用的是交流电源还是电池,可以让机器进入相应的电源管理模式。在Fedora中,用于管理和检修电源问题的工具有:

1.高级电源管理(APM)--APM软件组成如下:一个pmd守护进程,用来监视电池的使用情况;多个实用工具软件,用来显示和响应电池事件。它们包含于apmd软件包中。

2.高级配置和电源接口(ACPI)--acpid事件守护进程一方面监视电源事件,另一方面用来设置响应这些事件的规则,这些规则用来关闭某些硬件或关掉系统电源等。ACPI是一款设计用来替代APM电源管理的更具通用性的工具软件,但是目前它还需进一步完善。

3.hdparm命令--hdparm命令可用于打开和关闭电源管理功能。另外,该命令还有许多选项,完成诸如停止硬盘启动器转动或让硬盘进入待机状态等操作。

需要说明的是,使用ACPI时,是操作系统在负责电源管理,而不是BIOS。尽管ACPI在管理电源问题方面功能更强也更灵活,但是,普通用户用起来却不是那么方便,如使用ACPI时,你必须亲自告诉它要关注哪些电源事件以及如何响应这些事件。目前,对一般用户而言,APM的功能不但丰富,并且对用户也更加友好。
下边我们将针对以上三种常见的电源管理工具分别加以讨论。

相关帖子

沙发
说书先生|  楼主 | 2016-9-13 00:03 | 只看该作者
二、用APM管理电源

在Fedora中,可以配置APM,让其检测某些电源事件并做出响应。这时,它运行守护进程/usr/sbin/apmd来侦听事件,然后根据配置文件/etc/sysconfig/apmd 中的有关规定来处理这些事件。要配置运行APM,输入下列命令:

# chkconfig apmd on
# service apmd restart



注意:apmd和acpid不能同时使用,所以,如果此前系统正在使用acpid的话,应该先停用它,具体命令如下:

# chkconfig acpid off
# service acpid stop



APM成功启动后,在文件/var/log/messages中应该看到一则消息,指出该服务已启动,并列出当前电池的电量状况。默认时,pmd守护进程根据文件/etc/sysconfig/apmd 中的设置运行。我们可以列出当前运行的进程来查看运行中的apmd的使用了哪些选项:

# ps ax | grep apmd
/usr/sbin/apmd -p 10 -w 5 -W -P /etc/sysconfig/apm-scripts/apmscript



根据以上命令中列出的选项,apmd守护进程将会:

1.记录电池电量的变化--如果电量变化超过10%或更多,守护进程将向系统日志文件(默认时为/var/log/messages)发出一条消息。这一行为是由选项"-p 10"指定的。

2.记录电池电量不足--当电池电量低于5%并且仍未充电时,一条警告消息将发送到系统日志文件中。这一行为是由选项"-w 5"指定的。

3.提醒用户--如果电池电量低于"-w"选项所设定的值,将向所有登录系统的用户发送警报。此行为是由选项"-W"指定的。

4.利用apmscript响应事件--出现电源事件时,apmd将这些事件转给设定用于响应这些事件的脚本。根据上面的命令,运行的脚本应该是/etc/sysconfig/apm-scripts/apmscript。所用的文件取决于选项"- P"。


除了上述的电量不足和电量变化设置外,大多数给与响应的电源事件仅在apmscript文件中有所提及。如果想了解您机器的电源管理情况的话,看看该文件的内容便一目了然了。在FedoraCore中,要想添加你自已的要给与响应的电源事件,你必须建立自己的脚本。默认时的apmscript是文件 /etc/sysconfig/apm-scripts/apmcontinue。该文件处理以下事件:

1.挂起--当你的笔记本电脑进入挂起或待机状态后,文件apmscript会停止所有音频处理程序,挂其所有硬盘驱动器操作,关闭任何NFS连接,关闭网络连接以及pcmcia卡。

2.恢复--在复原时,apmscript会还原所有在挂起时停止的事件。

3.更换电源--当机器电源发生变化时,脚本会做出反应:如果使用交流电源,就让机器运行于高性能状态;如果使用电池,则让机器运行于更加节电的状态。

4.更换电池--如果电池缺电,该事件将使apm停止所有服务,并进入极限节电模式。

5.开机--启动机器时,apmscript会首先检查apmcontinue文件,除非你在该文件中设置了启动时要做的事,否则该脚本什么也不干。

6.停机--与开机时一样,停机时apmscript会首先检查apmcontinue文件,除非你在该文件中设置了启动时要做的事,否则该脚本什么也不干。

在apmcontinue文件中还可以有其他事件(默认时并不存在),用来响应其它选定的各种事件。此外,你还可以建立 /etc/sysconfig/apm-scripts/apmcontinue脚本,然后让它来响应存放在像apmscript这样的文件中的各种事件。

如果只是随便的查看一下APM服务的话,可以使用不带参数的apm命令,这样能看到电池供电状况或是否使用交流电源之类的报告:

# apm
AC on-line, battery charging: 100%



你还可以让你的笔记本电脑进入挂起模式(apm-s)或待机模式(apm-S)。当接通交流电源后,笔记本电脑会忽略所有由APM(apm-i)产生的挂起和待机事件。(T111)

使用特权

评论回复
板凳
说书先生|  楼主 | 2016-9-13 00:04 | 只看该作者
三、使用ACPI管理电源


与APM类似,ACPI也运行一个守护进程来侦听电源事件,然后将这些事件传递给某个程序来进行处理。这种情况下,我们可以通过启用acpid服务来运行acpid守护进程:


# chkconfig acpid on
# service acpid restart



再强调一下,一定要先关闭你不想要的电源管理服务。对此而言,就是要关闭apmd,即:

# chkconfig apmd off
# chkconfig apmd stop



ACPI只能运行在内核中已经激活了ACPI的Linux系统上,否则,你必须在启动时通过启动选项ACPI=force来手动激活它。另外,你还需要在 BIOS中激活ACPI。如果在/proc/acpi/event文件中有与ACPI事件相关的内容,则说明ACPI已在工作。

Acpid会监视来自于/proc/acpi/events中的每个事件,然后将这些事件跟/etc/acpi/events目录下的各文件中的各项进行匹配。默认的情况下,该目录下只有一个文件,即sample.conf,其中存放着ACPI事件和相应的处理,如:

# ACPID 配置举例
event=button/power.*
action=/sbin/shutdown -h now



在该例中,当收到button/power.*事件后,系统立即执行shutdown命令,因为命令后边带有- h now选项。要配置您自己的处理ACPI事件的动作,可以将您的文件(你必须是超级用户)添加到/etc/acpi/events目录中。要注意的是,该文件内容的格式必须与该目录下其他文件一致。要了解这些文件的确切格式,可以通过 "man acpid" 命令来进行进一步学习。当你列出的事件出现时, "action="行中的命令就会作为超级用户运行。

若要寻找事件名称的话,可以使用命令cat/proc/acpi/event。如果要查看acpid的活动,可以查看/var/log/acpid文件的内容。改变几次电源状态,如拔下插头、再插上、按挂起键等等,然后看看哪些事件被记录在日志文件中了。

使用特权

评论回复
地板
说书先生|  楼主 | 2016-9-13 00:10 | 只看该作者
四、用hdparm修改电源设置

如果您正在使用笔记本电脑的话,你可以使用hdparm的诸多选项来控制电量的消耗。某些选项会立即生效,如让硬盘驱动器进入睡眠模式;而其他选项会在一段时间后才生效,如在某段时间内硬盘一直处于非活动状态的话,就停转硬盘驱动器。


要了解机器的IDE电源模式状态,可以键入下列命令:


# hdparm -C /dev/hda
/dev/hda:
drive state is: active/idle



这表示电源模式设为正常运行。如果驱动器不支持该项功能,那么驱动器状态显示为"unknown"。为了节电,最常用的做法是为spindown模式(- S)设一个比较低的值。甚而有人认为spindown的最低值(五秒钟的空闲时间)既能全面改善电池续航时间,又不至于严重影响性能。我们可以用 hdparm命令加"-S"选项来规定硬盘进入spindown模式的闲置时间,如果"-S"后跟随的数字介于0到240之间,那么该值乘以5就是实际的进入spindown模式的闲置时间(以秒为单位)。因此,下例中的值3的含义是让磁盘驱动器在闲置15秒后入待机模式(硬盘会停转):

# hdparm -S3 /dev/hda
/dev/hda:
sotting standby to 3 (15 seconds)



注意:当-S的取值范围介于241到251之间时,那么该值减去240后乘以30就是实际的进入spindown模式的闲置时间(以分钟为单位)。所以, 241把停转的闲置时间设为30分钟,而251将其设为5.5小时。这一点使用时容易混淆,请读者一定注意。你可以通过-y选项让硬盘自动进入待机模式,如下所示:

# hdparm -y /dev/hda
/dev/hda:
issuing standby command



同时,你也能够通过-Y选项进入睡眠模式:

# hdparm -Y /dev/hda
/dev/hda:
issuing sleep command



当再次需用硬盘时,Linux将自动启动它。

使用特权

评论回复
5
说书先生|  楼主 | 2016-9-13 00:11 | 只看该作者
五、小结

上面我们对Linux下三种常见的电源管理工具进行了讨论,我想您现在已经清楚如何设置Linux本本的电源管理了,那就赶紧试试吧--什么?你用的是台式机,那等有机会再试也不算迟呀!


==============================================================================================



还有这个,也应该是很多人一直没能区分清楚的

很多人问道了什么ACPI,什么是APIC,他们有没有关系?名字这么相近。下面给出我对其的一些理解,具体的解释可以查看内核文档库的内核参数文件:
/usr/src/`uname -r`/Documents/kernel-parameters.txt

ACPI就是Advanced Configuration and Power Interface的缩写,意思是“高级配置与电源接口”。这是英特尔、微软和东芝共同开发的一种电源管理标准。
ACPI可实现以下功能:   
1、用户可以使外设在指定时间开关;   
2、使用笔记本电脑的用户可以指定计算机在低电压的情况下进入低功耗状态,以保证重要的应用程序运行;   
3、操作系统可以在应用程序对时间要求不高的情况下降低时钟频率;
4、操作系统可以根据外设和主板的具体需求为它分配能源;
5、在无人使用计算机时可以使计算机进入休眠状态,但保证一些通信设备打开;
6、即插即用设备在插入时能够由ACPI来控制。
不过,ACPI和其他的电源管理方式一样,要想享受到上面这些功能,必须要有软件和硬件的支持。在软件方面,Windows 98及其后续产品和Windows 2000都对ACPI给予了全面的支持;而Linux的内核目前对此支持得并不是太理想。硬件方面比较麻烦,除了要求主板、显卡和网卡等外设要支持 ACPI外,还需要机箱电源的配合。电源在提供5伏电压给主板的同时,还必须使电流稳定在720毫安以上才可以,这样它才能够实现电脑的“睡眠”和“唤醒”。
ACPI共有六种状态,分别是S0到S5,它们代表的含义分别是:
S0--实际上这就是我们平常的工作状态,所有设备全开,功耗一般会超过80W;
S1--也称为POS(Power on Suspend),这时除了通过CPU时钟控制器将CPU关闭之外,其他的部件仍然正常工作,这时的功耗一般在30W以下;(其实有些CPU降温软件就是利用这种工作原理)
S2--这时CPU处于停止运作状态,总线时钟也被关闭,但其余的设备仍然运转;
S3--这就是我们熟悉的STR(Suspend to RAM),这时的功耗不超过10W;
S4--也称为STD(Suspend to Disk),这时系统主电源关闭,但是硬盘仍然带电并可以被唤醒;
S5--这种状态是最干脆的,就是连电源在内的所有设备全部关闭,功耗为0。
我们最常用到的是S3状态,即Suspend to RAM(挂起到内存)状态,简称STR。顾名思义,STR就是把系统进入STR前的工作状态数据都存放到内存中去。在STR状态下,电源仍然继续为内存等最必要的设备供电,以确保数据不丢失,而其他设备均处于关闭状态,系统的耗电量极低。一旦我们按下Power按钮(主机电源开关),系统就被唤醒,马上从内存中读取数据并恢复到STR之前的工作状态。内存的读写速度极快,因此我们感到进入和离开STR状态所花费的时间不过是几秒钟而已;而S4状态,即 STD(挂起到硬盘)与STR的原理是完全一样的,只不过数据是保存在硬盘中。由于硬盘的读写速度比内存要慢得多,因此用起来也就没有STR那么快了。 STD的优点是只通过软件就能实现,比如Windows 2000就能在不支持STR的硬件上实现STD。
之前的电源管理是APM(Advanced Power Management),那么ACPI和APM相比有什么区别呢?

2、ACPI与APM比较
APM 1.0&1.1:由BIOS执行电源管理;
APM 1.2:操作系统定义电源管理时间,由BIOS负责执行;
ACPI:BIOS收集硬件信息,定义电源管理方案;由操作系统负责执行。
APM是一种软件解决方案,因此是与操作系统有关的, 而ACPI是工业标准,包括了软件和硬件方面的规范。

APIC (高级可编程中断控制器)对计算机来讲有两个作用,
一是管理IRQ的分配,可以把传统的16个IRQ扩展到24个(传统的管理方式叫PIC),以适应更多的设备。
二是管理多CPU。由于Nf2主板并不支持多CPU,所以,APIC关闭直接的影响是减少了可用的IRQ。
不过,如果板卡不是非常多的话,关闭 APIC对系统是没有什么影响的。
要实现SMP功能,我们使用的CPU必须具备以下要求:
CPU 内部必须内置APIC单元。Intel 多处理规范的核心就是高级可编程中断控制器(Advanced Programmable Interrupt Controllers--APICs)的使用。CPU通过彼此发送中断来完成它们之间的通信。通过给中断附加动作(actions),不同的CPU可以在某种程度上彼此进行控制。每个CPU有自己的APIC(成为那个CPU的本地APIC),并且还有一个I/O APIC来处理由I/O设备引起的中断,这个I/O APIC是安装在主板上的,但每个CPU上的APIC则不可或缺,否则将无法处理多CPU之间的中断协调。
APIC可能遇到的问题,很多这类问题可以通过BIOS更新来解决。
下面的是通过更改HAL类型来解决
  CPU实际运行频率与BIOS设定频率不符
  NF2的用户大约有10%的会出现CPU实际运行频率与BIOS设定频率不符的问题。我们称之为“频率不对”。
  这种现象带来的直接后果就是在测试3dmark或跑3D游戏的时候,会感觉不流畅,也称之为“顿”。
  一般在更改BIOS设置后、更新驱动后重启时,用测试软件如Aida32、MBM5等可以看到CPU的运行频率和你在BIOS里设置得不一样,而且差距很大。这个时候,用super pi测试CPU速度,会比平常花费时间长好几秒,用3dmark跑测试,会比平常低几百分甚至上千分。在3dmark中看到的CPU频率,也与BIOS设定不符合。
  如果出现这种情况,则属于我们所讨论的“频率不对”的问题。
  不过,不是所有的3D游戏“顿”都是这个原因。判断的方法是:如果你只有个别游戏“顿”,或者用上述软件测试频率正确,就不是此问题。
  如果判断确实属此问题,解决的方法也很简单,经过网友讨论,只要关闭APIC功能即可。(注意,是APIC,不是ACPI)。

有一些服务器(比如IBM的,HP的),安装LINUX时,会给出内核的错误,导致无法安装,这个时候可以在安装的时候输入
linux acpi=off noapic
应该是安装上的。


使用特权

评论回复
6
说书先生|  楼主 | 2016-9-13 00:19 | 只看该作者
 看到许多朋友抱怨linux电源管理很糟糕,说什么电池使用比win下短了很多。实际上linux提供很多电源优化的功能,只不过默认情况下的设置没有考虑电源使用罢了。下面我以ubuntu edgy为例,系统的讨论一下笔记本电源管理优化。
  目标:最长的电池使用时间
  概述
  笔记本由许多不同的组件组成,各个组件的耗电不用。我们可以看到主要的耗电部件是液晶显示器、CPU、芯片组和硬盘。虽然我们可以在BIOS里面设置操作系统无关的电源管理模式,但是在操作系统之上我们可以设置一些更smart的电源管理模式自动适应各种环境。
  本文分下面几个部分分别讨论各个部件的电源管理优化。
  0. 前提
  在讨论各个设备的电源管理优化之前,先确定我们是否满足下面一些前提条件。
  BOIS
  首先你要检查一下你的BOIS的电源管理设置,先关闭所有bois支持的电源管理方式,只通过操作系统设置电源管理,然后再恢复BOIS的电源管理。
  kernel
  acpi支持,edgy默认内核是支持acpi的,如果你自定义编译了内核,记住要把电源管理相关的模块选上

Power Management Options --->  
  • Power Management Support  [ ] Software Suspend  ACPI( Advanced Configuration and Power Interface ) Support --->   
  • ACPI Support    [ ]   Sleep States    [ ]     /proc/acpi/sleep (deprecated)   
  •    AC Adapter   
  •    Battery       Button       Video    [ ]   Generic Hotkey       Fan       Processor         Thermal Zone    < >   ASUS/Medion Laptop Extras    < >   IBM ThinkPad Laptop Extras    < >   Toshiba Laptop Extras    (0)   Disable ACPI for systems before Jan 1st this year    [ ]   Debug Statements   
  •    Power Management Timer Support    < >   ACPI0004,PNP0A05 and PNP0A06 Container Driver (EXPERIMENTAL)  CPU Frequency Scaling --->   
  • CPU Frequency scaling    [ ]   Enable CPUfreq debugging    < >   CPU frequency translation statistics    [ ]     CPU frequency translation statistics details          Default CPUFreq governor (userspace)    <*>   'performance' governor    <*>   'powersave' governor    <*>   'ondemand' cpufreq policy governor    <*>   'conservative' cpufreq governor    <*>   CPU frequency table helpers     ACPI Processor P-States driver    <*> CPUFreq driver for your processor

  •   1.显示器
      如上图所示,LCD是最耗电的部件,这一节我们讨论如何降低LCD的耗电
      首先,尽可能调低亮度,这个不多说手动调节就可以了;
      然后设置 DPMS(Display Power Management Signaling)
      修改sudo vi /etc/X11/xorg.conf文件

    Section "ServerLayout"  Identifier  [...]  [...]  Option  "BlankTime"  "5"  # Blank the screen after 5 minutes (Fake)  Option  "StandbyTime"  "10"  # Turn off screen after 10 minutes (DPMS)  Option  "SuspendTime"  "20"  # Full suspend after 20 minutes  Option  "OffTime"  "30"  # Turn off after half an hour  [...]  EndSection  [...]  Section "Monitor"  Identifier  [...]  Option  "DPMS"  "true"  [...] EndSection
      但似乎xorg的dpms有bug不能关闭LCD,只能把屏幕变黑
      google搜索了一下发现是和acpi冲突只要重新启动acpi就可以了
      手动设置屏幕关闭,

    sudo /etc/init.d/acpid restartxset dpms force off
      2.cpu
      移动版本的CPU支持频率和电压的动态调整,在大多数情况下你的CPU是没必要全速运行的,尤其在电池支持下,我们可以强制使CPU运行在最低频率。
      在linux 2.6以后的内核就支持cpu频率的动态调整,有下面5种模式
      performance 将CPU频率设定在支持的最高频率,而不动态调节。
      powersave 将CPU频率设置为最低
      ondemand 快速动态调整CPU频率, Pentuim M的CPU可以使用
      conservative 与ondemand不同,平滑地调整CPU频率,适合于用电池工作时。
      userspace 用户模式,也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置
      先安装相关软件cpufrequtils

    sudo apt-get install cpufrequtils
      查看你的cpu所支持的频率
      cpufreq-info

    cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006Report errors and bugs to linux@brodo.de, please.analyzing CPU 0:  driver: powernow-k8  CPUs which need to switch frequency at the same time: 0  hardware limits: 800 MHz - 1.60 GHz  available frequency steps: 1.60 GHz, 800 MHz  available cpufreq governors: userspace, powersave, ondemand, conservative, performance  current policy: frequency should be within 800 MHz and 1.60 GHz.                  The governor "ondemand" may decide which speed to use                  within this range.current CPU frequency is 800 MHz.
      需要进入那个模式直接修改proc文件,比如要进入powersave模式

    sudo -s      echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
      其实有个实用程序laptop-mode可以方便的设置,在后面硬盘一节统一介绍
      如果是用迅驰cpu,支持多个频率,你可以用powernowd更细化的调节cpu频率

    使用特权

    评论回复
    7
    //YZC| | 2016-9-13 20:24 | 只看该作者
    牛啊

    使用特权

    评论回复
    8
    说书先生|  楼主 | 2016-9-13 23:04 | 只看该作者


    见笑见笑!

    使用特权

    评论回复
    9
    firstblood| | 2016-9-16 16:39 | 只看该作者
    电源问题的还是败在首位的拉,一切的根源。。

    使用特权

    评论回复
    10
    Snow7| | 2016-9-16 20:12 | 只看该作者
    linux有很多电源优化功能,但默认情况下的设置没有考虑电源使用

    使用特权

    评论回复
    发新帖 我要提问
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    71

    主题

    191

    帖子

    0

    粉丝