电源管理功能的发展速度简直令人惊叹。今天,几乎每一种大小和级别的计算机系统,从最小的传感器和手持设备到数据中心中的“大铁器”服务器,都提供了大量减少、计量和限制功耗的功能。如果没有这些功能,风扇的噪音将会主导办公室的氛围,而没有连接的笔记本电脑只能在很短的几个小时内可用(只有在人们能够承受高温的情况下),而数据中心的电力、冷却成本和容量将变得难以控制。
尽管我们可能会认为电源管理功能是硬件的同义词,但软件在整个系统效率中的作用已成为不可否认的。尽管“软件功耗效率”的概念可能看起来很奇怪(因为软件并不直接消耗功耗),但突出的部分实际上是软件与功耗系统资源交互的方式。
让我们首先将软件划分为两个熟悉的生态系统角色:资源管理器(生产者)和资源请求者(消费者)。然后,我们将研究每种因素如何影响(或破坏)整体系统效率。
电源管理的历史根源于小型系统和移动空间。按照今天的标准,这些系统相对简单,只拥有少量的组件,比如单核CPU和可能会休眠的磁盘。因为这些系统的资源很少,所以在实际使用中基本上是二元的,系统的资源要么在使用,要么不在使用。因此,电源管理资源的策略也可能相当简单,但很有效。
例如,一个守护进程可能会周期性地监视系统利用率,在一段时间内出现足够的空闲后,降低CPU的频率并关闭磁盘。这一切都可以以一种只需要很少或不需要与其他负责资源管理的子系统集成的方式来完成(例如,调度程序、文件系统等等),因为在零利用率的情况下,不需要进行太多的资源管理。
相比之下,现代系统的拓扑结构要复杂得多。随着不断增长的CPU时钟速度这一“免费性能午餐”的结束,多核革命即将到来,其结果是,即使是最小的便携设备也存在多个需要管理的逻辑CPU。随着这些系统规模的扩大(呈现出更多的电力管理资源),当系统只有一部分繁忙而其余部分空闲时,部分利用变得更加常见。当然,cpu只是电源管理系统资源的一个例子:物理内存的部分可能(很快)是电源管理的,对于存储和I/O设备也是如此。在更大的数据中心上下文中,系统本身可能是电力管理的资源。
现代系统中有效的资源管理要求至少有一定程度的资源管理者意识到不同的资源权力状态带来的异质性,并在可能的情况下对其进行一定的利用。(实际上,有效的资源管理通常需要意识到资源的异质性,不同的权力状态是资源异质性产生的一种方式。)根据所管理的内容,考虑因素可能是空间的、时间的,或者两者兼而有之。
空间考虑包括决定提供哪些资源以及时响应消费者的请求。对于操作系统线程调度器/调度器,这可能决定向哪些cpu分配可运行线程,以及跨系统物理处理器的线程的总体最佳分布模式,以满足某些策略目标(性能、电力效率等)。对于虚拟内存子系统,对于物理内存的使用也是如此;对于文件系统/卷管理器,跨磁盘的块分配策略;以及在数据中心中,虚拟机如何跨物理系统放置。这些不同类型的资源管理器显示在图1.
其中一个空间方面的考虑是现有资源的当前动力状态。在某种意义上,一种资源的权力状态可以说是一组权衡。一些状态提供了一种机制,允许系统在性能和功耗之间进行权衡(CPU频率伸缩就是一个例子),而其他状态可能提供(对于空闲资源)降低功耗与增加恢复延迟之间的权衡(例如,ACPI的c状态)。因此,资源管理器选择一种资源而不是另一种资源(基于电源状态)的行为是进行这种权衡的重要工具,理想情况下应该补充单个资源的电源管理策略。
管理资源的粒度是另一个重要的空间考虑因素。如果多核处理器只能在套接字级别上进行电源管理,那么就有很好的动机将系统负载整合到尽可能少的套接字上。整合提高了某些资源的利用率,同时暂停了其他资源。这允许对暂停的资源进行电源管理,同时将电源(和性能)“引导”到已使用的系统部分。
影响单个资源选择和利用分布决策的另一个因素是使用资源的工作负载的特征。例如,这可能决定资源管理器在不影响性能(由于资源争用)的情况下如何积极地整合整个系统的利用率,或者改变已使用资源的电源状态将在多大程度上影响用户的性能。
一些资源管理器还可以根据时间以及(而不是)空间来分配资源。例如,计时器子系统可能允许客户机在未来的某个时间点(或某个时间间隔)安排一些处理,或者任务队列子系统可能提供异步或延迟执行的方法。对这些子系统的接口传统上是非常狭窄和规定性的,几乎没有留给时间优化的空间。一种解决方案是向本质上更具描述性的客户机提供接口。例如,与其提供一个狭窄的接口来精确说明应该发生什么以及何时发生:
计时器接口可以指定需要做什么,并在需要发生时描述约束条件:
类似于将负载合并到更少的套接字上以改善空间资源休眠,提供一些时间范围允许计时器子系统合并和批处理进程过期。而不是唤醒CPUn在给定的时间间隔内处理的次数n计时器(每次唤醒都会产生一些开销),计时器子系统可以一次性唤醒CPU,并根据(更宽松的)约束批量处理所有允许的计时器,从而减少CPU开销时间并增加电源管理状态的驻留时间(参见图2).
显然,资源管理器可以对系统的整体效率做出很大贡献,但最终它们不得不在系统资源使用者提出的约束和请求范围内工作。如果约束过多,资源分配过度或没有有效地使用,那么即使是最复杂的电源管理特性的好处也可能是徒劳的,而整个系统堆栈的效率会受到影响。
设计良好、高效的软件是一种美丽的事物,它显示了利用率(和完成的有用工作)与消耗的资源数量之间的良好比例。对于乌托邦式的软件来说,这样的比例将是完美的,表明当没有工作完成时,没有使用任何资源;随着资源利用率的增加,完成的工作量也会增加(参见图3).
但是,真正的软件并不是空想,让软件不消耗任何资源的唯一方法就是根本不运行它。实际上,即使在最低限度内运行性能非常好的软件,也需要一些资源开销。
相比之下,效率低下的软件在资源利用和完成的工作量之间显示出较差的比例。下面是一些常见的例子:
软件效率的综合分析需要观察资源利用与所执行的有用工作的比例关系的能力。当然,“已完成工作”的度量本质上是特定于工作负载的。一些工作负载(如Web服务器和数据库)可能是基于吞吐量的。对于这种工作负载,一种技术是绘制吞吐量(例如,每秒事务)与{cpu|内存|带宽|存储}资源消耗的关系。在曲线中存在“拐点”的地方(资源利用率上升,但吞吐量没有上升),就有机会使用更少的资源来完成相同的工作,或者消除瓶颈,以便使用相同的资源来完成更多的工作。
对于使用并发性来加速处理的并行计算工作负载,可以绘制经过的计算时间和消耗的资源,并使用类似的技术来识别和避免收益递减点。
与使用特定于工作负载的分析不同,另一种富有成效的技术是查看系统范围内的资源利用行为,在什么情况下利用率应该为零(系统空闲)。根据定义,系统没有做任何有用的事情,所以任何积极消耗CPU周期的软件都是可疑的。PowerTOP是Intel开发的一个开放源码实用程序,专门用于支持这种分析方法(参见图6).在一个本来应该是空闲的系统上运行该工具,理想情况下,系统的处理器100%都是电力管理的,但在实践中,低效的软件(通常进行周期性的基于时间的轮询)将使cpu略微繁忙。PowerTOP显示了浪费的程度,同时也显示了哪个软件是罪魁祸首。然后,系统用户可以将观察到的浪费报告为bug,并/或选择运行更高效的软件。
效率作为软件的设计和优化点乍一看可能有点陌生,所以让我们将其与其他一些可论证的更成熟的点进行比较:性能和可伸缩性。
高效的软件可以说是性能和可伸缩性都很好,但是在资源利用方面有一些额外的限制。
这意味着除了关注绩效的数量和比例之外考虑到资源利用率,为了获得效率,软件设计师还需要考虑资源利用的数量和比例考虑到性能。如果这一切看起来太抽象,这里有一些更具体的因素要记住:
关于CPU利用率:
关于内存利用率:
关于I/O利用率
每隔一段时间,硬件设计的发展和创新就会给软件带来新的机遇和挑战。即使在最大的系统中,降低未充分利用的系统资源功耗的特性也已经非常普遍,负责管理这些资源的软件层必须逐步实现策略,以提高已利用资源的性能,同时降低未充分利用的资源的功耗。
除了资源管理器之外,资源使用者显然有很大的机会提高或破坏更广泛堆栈的效率。尽管让程序员从不同的角度思考他们设计软件的方式不仅仅是一个技术问题,但是像PowerTOP这样的工具代表了一个伟大的第一步,它向程序员和管理员提供了对软件效率低下的观察、优化的参考点,以及对软件在节能计算中扮演的重要角色的认识。
相关文章
在queue.acm.org
电源关闭
马修·加勒特
http://queue.acm.org/detail.cfm?id=1331293
利用非对称多核系统最大化电力效率
Alexandra Fedorova, Juan Carlos Saez, Daniel Shelepov和Manuel Prieto
http://queue.acm.org/detail.cfm?id=1658422
现代系统电源管理
安德鲁·格罗弗
http://queue.acm.org/detail.cfm?id=957774
©2010 acm 0001-0782/10/0200 $10.00
允许制作本作品的全部或部分的数字或硬拷贝用于个人或课堂使用,但前提是该拷贝不是为了盈利或商业利益而制作或分发,并且该拷贝在第一页上带有本通知和完整引用。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或付费。
数字图书馆是由计算机协会出版的。版权所有©2010 ACM有限公司
没有发现记录