电池更耐久,性能更出色

提交新文章

2008年05月11日 00:38


介绍
笔记本电脑的使用方式对于电池使用时间有着显著影响。阅读本白皮书,了解英特尔工程师在撰写本文过程中的新发现。

作者:Richard Winterton

长期以来,IT 行业一直面临着一个艰巨的挑战,即如何以用最低的功耗实现最卓越的性能,除非有人能够改变基本的物理定律,否则性能和功耗永远是冤家对头。本文包含了来自 Google 桌面搜索“Performance-Power Plug-in*”的数据,以及英特尔内容管理社区论坛 的样本代码,显示了如何通过平台途径来寻找更多方法,以提高某些应用的性能功耗比。

独辟蹊径
解决某一技术问题通常可以有多种方法,可以是自下而上或自上而下地予以解决。例如,英特尔正在研究一种全新的电介质,可帮助晶体管缩短交换时间,进而减少漏电现象。这将可以显著改善性能并降低功耗。这就是一个自下而上的方法实例。当前英特尔正在采用的另一方法为关注可以在平台级别采取的措施,即自上而下查看问题。本文阐述了一种自上而下的方法,来优化应用的性能功耗比。


性能指标评测
作为一名工程师,我在优化硬件或软件时需要进行的一项首要任务就是测量当前情况或确立一个“基准”,以便在以后变更设计时能够进行比较。事实上,将应用置于一个整体环境中对于优化工作更为实用,您可以 测量“系统”在某一具体时间的功耗。如果您能够重复获取某一系统的信息并衡量其性能,您便可以确立一个“基准”。之后您可以对系统进行变更,并轻松衡量变更的效果。毕竟,我们的最终目标是要改善用户的体验,因而既要考虑性能,也要考虑有更长的移动时间。

性能指标评测和测量可能会让人感到枯燥无味,但它们对于提高性能至关重要。您必须不断进行测量,以实现改进,同时此测量应具有实用价值。当对系统做出变更时,您需要充分测量其中的不同。此处我们以测量系统使用方式和电池放电率的影响为例。之所以选择电池放电率,是因为它对于最终用户十分重要。“我可以持续工作多长时间?”、“我正在开展的工作将会对我的工作时间产生怎样的影响?”,这些是最终用户经常遇到的问题。再如:我正在使用电池供电,并且是一边听音乐一边撰写这篇文章。如果我发现我余下的电池时间不够坚持到我写完这篇文章了,我就需要做个决定。决定我是关上音乐来降低功耗,还是把文章写短些。您可能会对我的决定感到有些气恼,我选择了把文章写短一些。在我告诉您我是如何利用代码测量性能及电池放电率以前,我将先向您介绍一些我发现的非常有趣的东西。


工作负载
工作负载有几种类型,其中我们可以立即想到的两种为统计工作负载和“真实”的工作负载。两者都很重要,但是通常“真实”的性能指标评测对普通用户最为重要。我选择了一些 MP3 和 WMA 歌曲,刻录了一张包含两种编码格式的数据光盘,并通过我的笔记本电脑光驱进行播放。我决定做这些的原因有两个,其中之一与写这篇文章并无关系。仅仅是因为我厌倦了一遍遍地听常听的一张 CD 中的相同歌曲,这种情况也很可能发生在很多用户身上。第二个是由于音频播放器,在本例中我们选择了微软的 Media Player*,它需要读取 CDROM,并会占用较多 CPU 资源对内容进行解码。尽管解码器并不耗费太多 CPU 资源,它也会在我们听音乐或写文章时占用大约 14% 的 CPU 资源。为了避免我超出自己的测试范围太远,我们先为我的测试情况设定一些标准:

  • 使用 Microsoft Word* 写文章
  • 不听音乐
  • 使用笔记本电脑电池供电
  • 使用远程屏幕,通过扩展坞连接。

如下表所示,我的电脑处于稳定状态,电池放电率为 13 瓦。


Google 插件电池放电率图表
写文章,使用扩展坞,不播放音乐

之后我决定将屏幕由远程 CRT 显示器改变为笔记本电脑 LCD 液晶显示器,仍然使用电池供电。如下图所示,仅仅起用笔记本电脑显示器后,放电率就明显地从 13 瓦增加到了 18 瓦。虽然不怎么惊人,但是 5 瓦的意义还是非常重大。


Google 插件电池放电率图表
未使用扩展坞,写文章,不播放音乐


测试继续
然后我决定一边听光盘音乐,一边进行测试。从扩展坞转到液晶显示器,并且播放音乐,这使放电率明显地上下波动起来,直至达到稳定的 23 瓦状态。我在听音乐时能听到 CD 不断地旋转。



Google 插件电池放电率图表,未使用扩展坞,写文章,播放光盘音乐

之后出现了我认为非常有趣的结果。经过一段时间的写文章和听音乐,放电率由 23 瓦的稳定状态,上升到 25-28 瓦的变化状态。这是由于 Media Player 被设置为随机播放歌曲。由于文件需要加载到缓存中,因而我可以听到 CD 在时快时慢地旋转。这就导致了在 28 瓦至 25 瓦之间变化的不稳定放电率。虽然减缓光驱旋转速度能够发挥作用,但仅限于这样一个前提,即光驱停止旋转期间能够比时快时慢旋转节省更多能源。这需要引入另一物理定律:处于运动状态的物体更容易保持运动状态,而不易转变为时快时慢。


Google 插件电池放电率图表
未使用扩展坞,写文章,听部分缓存处理的音乐

若光驱停止运行期间所消耗的能源低于旋转期间,这一声明便是正确的。这一点毋庸置疑,原因有两点: 首先我注意到光驱已经停止旋转有相当长一段时间了,其次,从电池放电率图表中可以很显然地看到,歌曲正通过缓存来处理。如下图表示,放电率下降至 21 瓦,并处于稳定状态。


Google 插件电池放电率图表
未使用扩展坞,写文章,听部分缓存处理的音乐

这些图表显示出我做了哪些测试,及系统使用模式会对电池放电率产生哪些影响。仅仅以写文章和听音乐为例,我发现放电率在 13 瓦至 28 瓦范围内的变化取决于应用正在处理什么以及如何使用系统。如果保持为 13 瓦和 28 瓦两种极端状态,那么结果将是一块电池的使用时间可以达到另一块的两倍之多。很显然,这样的事情不会发生,因为从图表可以看出,放电率总是在不断变化。需要我们注意的是,当前我所进行的测量均在系统级别进行。

此类测量非常简单,并且能够帮助确定当前系统级别的情况。这一情况下确定的性能不仅限于 CPU,还包括其他它多种因素。在此情况中,CPU 利用率(解码 MP3 和 WMA 文件)只占整个电源功耗中的一小部分。光驱和 LCD 液晶显示器的有效利用是系统的重要组成部分,可改善整体用户体验。对我来说,该实例显然证明了,若想使用户的体验更加精彩,英特尔强调平台的举措无疑是非常正确的一步。正如您所看到的,充分理解系统的具体特征,可帮助应用做出决策,以实现更出色的性能功耗比。获得信息非常简单。困难之处在于如何解释数据。


电池充电/放电率
电池充电/放电率会因系统、电池技术和电池老化程度的不同而有所差异,此外,也与您在测量时正在进行的操作有关。前面的图表来自 Google Desktop Web 站点 的 Google Desktop* 插件。插件中使用的部分源代码,如决定电池放电率的代码,可通过英特尔数字内容管理论坛网站 的简单示例通信线程(dsc.zip)获得。dsc.zip 文件中的简单解决方案包含了如何理解整个平台的运行情况的相关信息。此解决方案包含了关于插件如何获取用于 Google 插件的电池充电/放电率的源代码。BatteryInfo.h 文件和 BatteryInfo.cpp 文件包括以下五种函数:

  • void biUpdateBatteryDriverInfo(BATTERYINFO_T *bi, int nBatteries);
  • void biFastUpdateBatteryDriverInfo(BATTERYINFO_T *bi, int nBatteries);
  • int biGetBatteryCountAndOpenInfo(BATTERYINFO_T *bi, int nBatteries);
  • void biCloseBatteryInfo(BATTERYINFO_T *bi, int nBatteries);
  • int biGetTimeRemainingAtRate(int BatteryIndex, LONG AtRate);

使用这五种函数调用、以及 CPU 利用率和功能关联时间的信息,可以帮助我们更轻松地了解如何优化本实例的性能功耗比。


总结
本文以真实的使用案例,揭示了采用平台方法优化应用性能功耗比的优势所在,同时还为改进此比例提供了两个独特机遇:

  • Media Player 从光驱读取数据操作需要进行优化,以将数据保存到缓存中,降低电池放电率。若不采用缓存和最优化方式处理文件,电池放电率将显著增加。
  • 如果用户认为电池使用时间很重要,且正在做的事情只是写一篇文章和看着黑白屏幕上的文字,液晶显示器的亮度水平要求就不那么重要了。将显示器亮度调低,会使电池放电率显著降低。

更重要的是此方法实施的整体环境。在优化性能功耗比时,从平台着手十分重要。对最终用户而言,提供一款能够满足其期望的平台是其中的关键所在。我能在客厅使用电脑而不受风扇噪音的干扰么?我能在任何地点使用笔记本电脑,做我想做的事情吗?我能一边写关于如何优化软件以达到更好平台体验的文章,一边听音乐,还可以在电池用完之前完成我的……


更多资源