11/25/08。 cathayan.org版权所有,保留一切权利。转载请保留此说明。谢绝商业转载。
简译自:
Observations on power management。
LWN推荐。
CPU
- Linux内核中的“powersvae”和“performance”这两个管理器的名字很误导人。Powersave通常不能节省电能。Performance通常也不会给你带来更好的性能。其中的原因有一点违反直觉。
现代处理器中实现的运行时节电模式称为“C”状态。每种状态都由C后面的那个数字来表示。数字越大,表示C状态越深,节电就越多。在最深的C状态下,处理器的大部分都会脱离时钟并且断电,让CPU的耗电水平降到极低。
C状态确实能节省很多电,但如果CPU在执行指令就不能进入这个状态。最好的节电方法应该是让CPU尽快运转,最快地把所有工作完成,然后让CPU进入完全的发呆状态。Powersave这个管理器会延长CPU处理工作的时间,因此就减少了CPU发呆的时间。在任何现代CPU上,以低频率和低电压工作获得的好处都不会超过因为发呆时间减少的坏处。几乎在所有负载情况下,Powersave都比其他任何方式消耗更多的电能。
Ondemand管理器会在需求超过某界限时让处理器跳到全部性能工作。然后当工作完成后又会让CPU回到较低性能状态。这就让CPU回到发呆的时间尽可能地短。Ondemand比Performance更好的原因在于很短的突发性的负载也会阻止CPU进入深C状态,并且也不会从更高的CPU运行速度上受益。在这种负载情况下不提升时钟频率可以节省一点电能。
Conservative管理器的工作和Ondemand差不多,但它要花更长的时间来切换状态。这就会引起处理器花更长的时间进入发呆,因此也会增加能耗。
总结:使用Ondemand。如果Ondemand不能工作,Conservative也是一个可用的选项。
注意:有一些工作负载可能同缺省的Ondemand设置互动很差,如果有所发现,可以同作者联系:mjg59-powerpage@srcf.ucam.org 。
补充:设定用哪个CPU频率管理器,可以用cpufreqd这个daemon,也可以通过cpufrequtils这个小程序,以前写过一篇。
- p4-clockmod这个cpufreq驱动不会改变处理器的电压。技术上它也不会降低时钟频率。相反,在某些时钟频率的百分比上处理器会停止,而后又能在后续周期上工作。这是为了降低处理器产生的热量。作为节省措施它毫无用处。CPU的工作量降低50%并不会节省50%的电能。并且会让任何工作都耗费两倍的时间,从而消耗更多电能。
总结:不要用p4-clockmod,除非是要防止CPU过热。
- 更深的C状态会节省更多的电能,但需要更长的时间进入和退出。老是不断地做些小工作让CPU很难进入这种深C状态,于是就会消耗更多电能,最好是一次完成一堆工作。
总结:尝试批量处理。把多个框架解开放到缓冲里然后一次性显示出来,不要一次解一个。
- 某些系统散热很差,CPU负载大时可能会过热。一个常用的方法是限制CPU的最高频率来降低它的发热量。但是这会让CPU在不热的情况也不能全速运行。这也让CPU花更长的时间进入发呆状态,于是让它变得比普通情况下更热,并且消耗更多电能。
总结:如果用户确实要对系统进行热量管理,最好写个程序来监控CPU温度,只在需要时限制CPU的速度。不要使用电源管理功能通过限制CPU频率来做热量管理。
图形
- 不管图像是从图形卡的2维还是3维硬件上出来的,用来在屏幕上显示静态图像的硬件都是一样的。不管桌面上用了多少个特效,对桌面来说都是静态的。Composite和传统桌面通常消费同样的电能。
总结:使用电池时不要提供关闭Composite的功能,它降低功能性,又没有什么节电的好处。
- 在TFT屏幕上,黑屏和白屏的耗电量是一样的。显示黑屏的屏保既不能节电,也不能保护屏幕。
总结:如果用户没有要求使用动画屏保,直接把屏幕关掉比画个黑屏好。
- 往屏幕上显示图片需要把图片从显卡内在中拷贝出来。每次存取内存都要消耗一定的电能。减少内存使用量对节电来说很好。一些现代的图形芯片(可能只有Intel最新的一些)支持屏幕内容在内存中的压缩。读取压缩的内容,是可以节电的。这种方法通常使用行程编码(RLE),基本上是一行一行进行的。所以,连续的水平色彩块压缩会比较好,而水平的渐变就不好。
总结:设计桌面背景时最好用竖直渐变,而不要用水平渐变。
- 另一个减少内存存取次数的方法是减少屏幕每秒钟刷新的次数。较高的刷新率会在物体移动时减轻闪烁,但静态屏幕是可以刷新低一些并且节能的。静态屏幕也能让显示芯片频率降低,从而更节能。
总结:避免任何不必须的屏幕刷新。
硬盘
- 硬盘停转后能节省大量的电。但是再让硬盘转起来又会耗费更多的电,同时还会降低硬盘的寿命(大多数硬盘的启动/停机次数是有限的)。这里通常的方法是使用用户定义的固定的时间限制。这个时间太短就会让硬盘启停过于频繁,用户就要老是等待它转起来,这样耗电更多,硬盘寿命也会缩短。时间设得太长又意味着不用硬盘时它也要转,也会用电。太长或太短都要看当时的负载状况,在一天之内也会有所变化。
总结:不要使用固定的关机时长。最好用一个动态的学习算法,可以针对用户的使用模式进行调整。
补充:这个硬盘spin down的问题,前一段在许多发行版上被认为是bug,让硬盘的启停次数浪费了很多之类。在debian sid上发现在/etc/acpi/start.d下面有个90-hdparm.sh文件,它的意思似乎是在插电时设这个参数为254,用电池的话就设为128。在那次事件之后,人们似乎比较喜欢254这个设置。这个数字各处的解释也不太一样,man页中说128-254根本不会spin down,只是性能有差别,有的地方说还可以×5秒来算时间,但254这个值是保留了。
设置hdparm参数的地方一个是/etc/hdparm.conf,一个是/etc/init.d/hdparm,不同的硬盘能使用的参数不同,可以在命令行上试一下。
#hdparm -c1 -d1 -m16
- 查找总是比简单地读取一串块耗电更多。这还会降低性能──即使高性能的硬盘也不太可能承受每秒150次的查找。
总结:避免不必要的文件存取和在文件内查找。尝试使用单个大文件而不是多个小文件。
- 传统的UNIX环境要求在读取文件时更新这个文件的atime。把atime更新关掉可能会让某些程序不能工作,因为它们要依赖这个来判断文件上次修改后,用户是否查看过这个文件。文件系统的relatime选项则只在atime早于文件上次修改时间时才去更新atime。减少这种写操作可以更容易地让硬盘保持停机状态。
总结:如有可能,在文件系统上使用relatime。
补充:据lifehacker报道,直接把文件系统的atime关掉,可以让它快40%,据说是Linus说的,可以继续了解。
lesswatts.org这个网站也提到了这个方法。基本作法就是修改/etc/fstab这个文件:
/dev/hda1 / ext3 defaults,noatime,nodiratime 0 1
在设置之前,也可以用mount命令先试验一下能否成功:
# mount -o remount,noatime,nodiratime /
注:“补充”是我自己加的。这个文章对笔记本有点用处,也许对大规模的服务器更有用处?
11/25/08 12:39:37,由
cathayan发表。目录:
电脑
I am watching and will delete all spam.