英语原文共 14 页,剩余内容已隐藏,支付完成后下载完整资料
HYPNOS:了解和解决智能手机的睡眠冲突
Abhilash Jindal Abhinav Pathak Y. Charlie Hu Samuel Midkiff
Purdue University
{jindal0, pathaka, ychu, smidkiff}@purdue.edu
摘要
为了最大程度地保存电池能量的关键资源,智能手机系统采取积极的系统挂起策略,其在用户不活动的短暂时段之后挂起整个系统。这使开发者有责任保持系统开启或唤醒,执行时间敏感的代码。 开发人员在使用显式电源管理时的错误不可避免地会产生能量缺陷,从而导致显着的,意外的电池消耗。
在本文中,我们研究一类新的能量缺陷,称为睡眠冲突,可能发生在智能手机设备驱动程序。 当组件处于高电平时,发生休眠冲突功率状态不能转换回基本功率状态,因为当负责驱动转换的设备驱动器代码被假定执行时,系统暂停。我们说明睡眠冲突的根本原因,开发四种类型的睡眠冲突的分类,并且最终呈现执行睡眠冲突避免的运行时系统,以及简单但有效的预部署测试方案。我们已经在两个Android智能手机上实施和评估了我们的系统。 我们的测试方案检测到WiFi和振动器驱动程序中的几个睡眠冲突,我们的运行时回避方案有效地防止睡眠冲突排空电池。
类别和主题描述 D.4.5 [Operating Systems]: Reliability.
一般条款 设计,实验,可靠性
关键词 智能手机 移动 能量 缺陷
- 描述
直到最近,计算机才不得不满足于没有现成的电源。服务器和桌面可以连续接入电网的电源。即使电池供电的笔记本电脑也要花费大量的时间接入。这些设备的电源管理策略反映了它们随时可以访问电源,并且处理器和支持设备(例如存储器)在使用时以及其后的一段时间保持开启。移动电话已经成为增长最快的计算平台,并且对于许多人而言是他们的主要或唯一的计算设备。与以前的计算机不同,它们的正常操作模式与外部电源完全断开,他们的用户希望他们在电池耗尽之前至少运行一天。这种使用模式,结合在移动电话电池中可用的相对少量的能量,已经导致电力管理模型的根本改变。
功率管理模型中的这些变化,以及它们如何不同于传统计算设备的功率模型,可以总结为两个关键点。
首先,在短暂的用户不活动之后,电话进入系统挂起的默认状态,即电话系统芯片(SOC),包括用于各种电话设备的CPU,ROM和微控制器电路,例如GPS,图形 ,视频和音频,处于暂停状态。RAM被置于自刷新模式。在这种状态下,手机消耗接近零电池电量。例如,在运行Android 2.3的Google Nexus One上,CPU将每20ms尝试启动系统挂起,除非下面讨论的机制之一由某些设备驱动程序,应用程序或框架使用,否则将强制执行以中止挂起进程。暂停后,它只消耗3mA的电流。 第二,应用和设备驱动程序的开发者期望执行个人电话设备(例如GPS,WiFI,3G,振动器等)的功率管理,并且确保当需要设备的功率状态的改变时 SOC导通,因此即使处于低功率睡眠状态,也可以唤醒CPU。可以使用三种机制来保持系统不被挂起:唤醒锁,每当一个持有时禁止系统挂起; 挂起通知器,其是在每个挂起过程的最后时刻由被查询的各个设备注册的回调函数,用于许可挂起SOC; 和硬件唤醒,例如Real 253时钟(RTC),当唤醒时唤醒SOC和CPU。
这种明确的电源管理理念,在现代智能手机中使用,并由默认的“关闭”策略引起,导致程序员的重大负担。 程序员第一次被迫认为电源管理是应用程序正确行为的第一个关注点。处理新的电源管理范例的增加的复杂性的失败表现在CPU和各种电话设备,例如GPS,振动器和LED,当它们应当被关闭时,快速耗尽电池。开发者在明显的功率管理中导致显着的,意想不到的能量耗散的这种错误被称为能量缺陷[20]。
在本文中,我们研究一种新的能量缺陷,称为睡眠冲突,发生在智能手机设备驱动程序。当硬件设备由软件实体(例如,设备驱动器)转换到有效功率状态并且然后系统被挂起时,出现睡眠冲突。结果,负责使设备回到低功率状态(例如,睡眠状态)的软件代码不能运行,因为CPU被挂起,因此设备无限期地保持在高功率状态。睡眠冲突可导致电池的快速排空和显着的用户沮丧。
本文直接针对了预部署测试对于睡眠冲突和运行时发现以及改善现有睡眠冲突缺陷的影响的问题。深入了解睡眠冲突的根本原因,通过研究成千上万行设备驱动程序代码和它们与电源管理系统的相互作用获得,以及在睡眠冲突缺陷可以表现自己的设备驱动程序中的功率转换场景的分类,使我们能够开发两种新的运行时技术。第一个实现了一个简单而优雅的黑盒运行时技术,可以在驱动程序发布之前进行简单测试,第二个在运行时检测到暂停的休眠冲突并避免它们。
本文的贡献如下。
- 首先,我们通过分析由驱动器实现的智能手机设备的FSM功率模型的功率状态转换规则,给出在设备驱动器中可能出现睡眠冲突的所有场景的分类。 这样的分类提供了对睡眠冲突的根本原因的洞察,并且提供在运行时检测和缓解睡眠冲突的提示。
- 第二,我们提出一个轻量级的睡眠冲突避免运行时系统,在设备驱动程序执行期间准确检测待处理的睡眠冲突,并进行干预以避免它们被触发。
- 第三,我们提出了一种新颖的技术,它建立在我们的待决睡眠冲突检测方案的基础上,用于全面测试设备驱动程序中的睡眠冲突。 我们的测试方案操纵默认用户不活动超时值,以暴露运行时休眠冲突检测中的假否定,即隐藏在不活动超时之后的潜在的睡眠冲突。
- 第四,我们在Android中实现了运行时回避和测试系统HYPNOS,并用它来测试两个智能手机的设备驱动程序。 使用HYPNOS测试发现在振动器,指南针,触摸屏和WiFi驱动程序的5个实例的睡眠冲突。
- 智能手机中的电源管理
我们从现代智能手机的电源管理基础概述开始。
2.1电话设备具有多个电源状态
现代智能手机平台包括SOC,其包括用于诸如GPS,图形,视频和音频的各种电话设备的CPU,RAM,ROM和微控制器电路,以及用于丰富用户经验的各种硬件I / O设备。典型的设备包括CPU,LCD,存储器,SD卡(SD卡),诸如WiFi NIC,蜂窝和蓝牙的网络设备以及各种传感器,诸如GPS,一个或多个相机,加速度计,数字罗盘,触摸传感器,麦克风和扬声器。与台式机和服务器机器不同,在智能手机上,许多这些设备消耗与CPU相当的功率,从而有助于总功耗的很大一部分。
SOC的默认功率状态是暂停,其中SOC上的所有组件(包括用于诸如GPS,图形,视频和音频的各种电话设备的CPU,ROM和微控制器电路)被暂停,RAM被置于自刷新模式,并且SOC排出接近零的电池功率。当处于主动使用时,SOC可以处于有源功率状态或一个或多个备用状态,其中不同的组件(例如,CPU)可以进入较低功率状态,但来自设备的各种定时器和中断事件将移动所需的SOC组件到活动状态。独立于SOC状态,硬件设备可以处于几个操作模式,称为不同的功率状态,每个消耗不同的功率量。具有多个功率状态的动机是实现功率比例性,即,设备消耗的功率应该与其主动利用率相称。智能手机以三种方式支持功率比例。首先,智能手机CPU支持频率缩放。例如,Google Nexus One上的ARM处理器在处于活动电源状态时有七种不同的频率。此外,英特尔Medfield手机上的Saltwell CPU可以进入睡眠状态的几个级别之一(C1-C6)[23]。第二,每个电话设备在主动使用期间处于活动功率状态(D0)。在主动使用之后,其可以停留在被称为尾状态[9,14,19]的一个或多个活动空闲状态(例如,D1,D2)中。这在几个电话设备中已经观察到,包括GPS,WiFi,sdcard,3G和4G。 最后,在系统挂起期间,设备应该被设备驱动器置于挂起状态(D3),并且几乎消耗零功率。
图1:振动器的电源状态转换
2.2设备驱动程序实现电源状态转换
Linux中的电源管理(Android内核)分为OS电源管理和Linux运行时电源管理。 OS功率管理器根据策略将SOC引导到各种功率状态(例如,系统挂起)。此外,Linux内核2.6.33及更高版本要求所有设备驱动程序实现Linux运行时电源管理,当设备空闲时,设备驱动程序可以通过这些管理实施自主电源管理。
智能电话设备驱动器实现各种“智能”,以操纵它们的设备的不同功率状态之间的转换。 原则上,电话设备的所有功率状态和转换规则可以从读取其驱动器中揭示。但是,大多数智能手机的设备驱动程序(包括Android手机)都是专有的。Pathak et al。[19]提出了一种基于系统调用的有限状态机(FSM)功率模型,其准确地捕获智能手机的基于利用率和非利用率的功率行为,以及用于导出所有设备的功率模型的系统方法 给定电话。
图1示出了涉及驱动智能手机振动器的功率行为的状态机。 振动器只有两种电源状态:开和关。 当应用程序显式调用振动器API时,其设备驱动程序将设备从关闭状态转换,并在API调用中指定的超时时间之后将设备转换回关闭状态。
示例驱动程序。 清单1显示了Motorola Spica手机上使用的振动器驱动程序。导出到用户空间应用程序的API只是写入手机应在文件/ sys / class / timed output / vibrator / enable中振动的毫秒数。一旦将值写入此文件,驱动程序注册的enable_vibrator _from_user回调函数(第4行)将传递该值并开始运行。此功能启动振动器(线18),并使用高分辨率定时器(线20)注册回调函数。高分辨率定时器在定时器到期时产生中断,并且内核安排驱动程序定义的定时器回调函数vibrator_timer_func运行(第10行)。高分辨率定时器由较新的定时器实现支持,其提供比常规系统定时器滴答(大约几毫秒)更高的精度(微秒级)通常,当进程注册定时器事件(例如睡眠)时,事件将被触发的时间被四舍五入到最接近的系统定时器节拍间隔,导致毫秒量级的不准确,这对于实时用户应用是不可接受的 或设备驱动程序。 另一方面,高分辨率定时器使事件能够与硬件允许的(通常为1微秒)一样精确。然而,与实时时钟不同,它们不能将SOC从暂停状态唤醒。
清单1:振动器驱动程序包含睡眠冲突
- 睡眠冲突的上升
在本节中,我们解释了导致睡眠冲突的智能手机睡眠策略背后的理念。
-
- 积极的睡眠政策
在智能手机上最大限度节能的推动迅速推动他们的操作系统(例如Android)追求积极的系统睡眠策略.在用户不活动的短暂时段之后,操作系统电源管理使得手机SOC进入其默认状态,系统挂起。侵略性睡眠策略背后的直觉是智能手机使用主要是用户交互式的,因此短暂的用户不活动表明可能长时间的用户不活动,期间所有电话设备应该被置于睡眠。
积极的睡眠策略通过跟踪用户与电话的交互来实现。 更确切地说,用户不活动被定义为其间存在用户缺乏输入的时间段,即,用户没有触摸屏幕或设备上的任何外围按钮。 两个用户可配置的定时器用于控制屏幕和CPU(全系统挂起)睡眠策略。 当第一定时器触发时,屏幕变暗,并且当第二定时器触发时,屏幕被关闭,并且CPU启动系统挂起过程。 显然,超时值会影响电池消耗和用户不便之间的平衡。
进入系统挂起后,可以通过硬件唤醒(例如实时时钟(RTC),用户按下电源按钮,WLAN唤醒或来电打电话唤醒SOC)。 背景服务,如同步,健康监控等,需要定期运行,并依靠RTC唤醒SOC和CPU。 然而,在由后台服务引起的瞬时唤醒期间,不使用用户活动定时器,并且SOC将再次快速挂起,除非被唤醒的服务显式地调用一些机制来保持系统(第3.4节)。
3.2 时间关键部分
由于它们的本质,执行功率状态操作的设备驱动器中的代码段是时间关键的部分; 如果CPU在这样的段应当运行的时刻暂停,则它将不能运行,并且因此不能执行设备的预期功率转换。 例如,清单1(线24)中的振动器驱动器中的回调函数是时间关键的部分,因为它控制从有功功率状态转换回到暂停功率状态(线26),从而结束振动。
3.3 睡眠冲突
三个因素,(1)装置可以处于独立于SOC功率状态的若干功率状态中的一个; (2)设备驱动器控制电源状态转换;和(3)OS采用积极的系统挂起策略;一起产生一类新的能量缺陷,我们称之为睡眠冲突。当处于高功率状态的设备无法转换回基本电源状态时,会发生休眠冲突,因为CPU处于睡眠状态,并且设备驱动程序无法在其执行过程中取得进展以驱动转换。这些错误可以大大减少手机的待机时间。如第3.1节所述,主动睡眠策略有助于电话实现长时间的待机时间,因为手机在暂停状态(Google Nexus One手机上的电流为3mA)下几乎消耗功率,并且在大部分时间内保持此暂停状态。但是由于睡眠冲突的缺陷,待机功耗可以增加10到25倍。例如,我们在Google Nexus One振动器中发现的错误会导致它在待机模式下耗用40 mA电流。
我们现在说明一个睡眠冲突缺陷使用简单的手机振动的应用程序,触发振动器中的睡眠冲突。此应用程序部分显示在清单2的代码片段中。代码只是启动一个新的线程,打算休眠20秒,然后振动手
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[141337],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。