用于安卓设备的能耗分析方法与流程

文档序号:11250777阅读:473来源:国知局
用于安卓设备的能耗分析方法与流程

本发明涉及计算机技术领域,尤其涉及一种用于安卓设备的能耗分析方法。



背景技术:

以智能手机为代表的智能设备如今越来越成为日常生活中不可缺少的一部分,其中安卓系统占据了智能设备中超过80%的份额。对安卓设备的能耗的有效分析能够帮助开发者了解应用的能耗行为并进而提升用户体验。

然而,对安卓应用的能耗进行量化分析在工程实践上有相当的难度,这主要是由于:第一,安卓应用有可能基于多个层次的api进行开发,例如,可基于第三方库api,也可基于安卓framework层的api,还可基于linux层的api;第二,安卓应用存在尾电耗的行为,所谓尾电耗是指使用wi-fi、flash、lte等硬件模块的过程中,例程使这些硬件模块进入一个高电耗的状态,而当例程执行完毕时,其使用的硬件模块仍将保持相当长一段时间的高电耗状态;第三,单个硬件模块的能耗经常受到其它硬件模块的影响,例如,与显示相关的gpu、cpu、显示屏等模块有很强的相关性。



技术实现要素:

本发明的目的在于克服上述现有技术的缺陷,提供一种用于安卓设备的能耗分析方法。该方法包括以下步骤:

步骤1:获取待测安卓设备中部件的能耗特征数据集;

步骤2:以所述能耗特征数据集作为输入,利用基于lstm(长短期记忆网络)的神经网络模型获得所述待测安卓设备的能耗数据,其中,所述基于lstm的神经网络模型通过训练获得的,训练数据集是以已知的能耗特征数据集为输入,以相应时刻的安卓设备的实际能耗为输出。

在本发明的方法中,所述部件包括cpu、gpu、wi-fi模块、lte模块、flash、显示屏中的至少一项。

在本发明的发明中,所述能耗特征数据集包括cpu的核心频率、cpu的使用率、gpu的核心电压级别、gpu的使用率、wi-fi的接收字节数和发送字节数,lte的接收字节数和发送字节数、flash的读字节数和写字节数、显示屏的亮度值中的至少一项。

在本发明的方法中,当所述能耗特征数据集包括显示屏的亮度值时,将所述显示屏的亮度值归一化到[0,1]区间。

在本发明的方法中,所述能耗特征数据集通过采集所述部件发生驱动调用事件时的内核级的能耗特征值而获得。

在本发明的方法中,所述驱动调用事件包括wi-fi的数据发送函数的调用、wi-fi的数据接收函数的调用、cpu频率变化事件、cpu上下文切换事件、gpu核心电压级别变换事件、gpu统计数据更新事件、lte的数据发送事件、lte的数据接收事件、flash的数据读取事件或flash的数据写入事件、显示屏亮度变化事件中的至少一项。

在本发明的方法中,所述基于lstm的神经网络模型包括lstm单元层网络、dense层网络和线性回归层。

在本发明的方法中,所述安卓设备的实际能耗是耗电量。

与现有技术相比,本发明的优点在于:可实现基于内核的能耗特征采集,追踪包括cpu、gpu、flash、lte、wi-fi、显示屏在内的硬件驱动的关键状态变换事件,并从中提取用于能耗模型训练的能耗特征;基于lstm神经网络的安卓设备能耗建模方法,利用设备实际使用过程中产生的硬件模块能耗特征数据和相应时刻的设备实际能耗数据作为模型的训练参数,在能耗分析中充分考虑了硬件模块尾电耗和模块之间复杂的相关性对能耗量化结果准确性的影响。

附图说明

以下附图仅对本发明作示意性的说明和解释,并不用于限定本发明的范围,其中:

图1示出了根据本发明一个实施例的训练能耗模型的整体流程图。

图2示出了根据本发明一个实施例的用于训练能耗模型的硬件连接图。

图3示出了根据本发明一个实施例的实际能耗数据采集的模块化示意图。

图4示出了根据本发明一个实施例的安卓设备驱动能耗特征数据采集的模块化示意图。

图5示出了根据本发明一个实施例的pc端能耗特征数据采集的模块化示意图。

图6示出了根据本发明一个实施例的用于能耗模型训练的模块化示意图。

图7示出可根据本发明的一个实施例的用于预测安卓设备能耗的方法的流程图。

图8示出了根据本发明一个实施例的使用pc分析安卓设备能耗的硬件连接示意图。

图9示出了根据本发明一个实施例的使用pc分析安卓设备能耗的模块化示意图。

具体实施方式

为了使本发明的目的、技术方案、设计方法及优点更加清楚明了,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

图1示出了根据本发明一个实施例的总体工作流程图。包括:

s101,前期准备阶段;

s102,采集能耗模型训练数据;

s103,根据训练数据训练lstm能耗模型。

下面将参见图1具体描述各个步骤的实施例。

(1)步骤s101,前期准备阶段

步骤s101属于训练能耗模型的准备阶段,主要完成是使用的软件平台搭建和硬件平台搭建。

首先,准备好安卓系统和对应linux内核的源码,并完成安卓源码的编译。然后,打开支持systemtap和ftrace的必要编译选项并编译linux内核,接着制作基于该内核的安卓rom,利用刷写工具刷入安卓设备。最后,进行systemtap移植,包括确定内核版本支持的systemtap版本和交叉编译systemtap需要的elfutils版本,下载对应systemtap和elfutils源码,利用安卓源码中提供的gcc编译器静态交叉编译systemtap,将得到的可执行文件上传到安卓设备linux中,设置好调用systamtap的静态链接等。

其次,完成硬件平台的搭建,图2示意了本发明一个实施例的硬件连接图,其中实线表示数据传输,虚线表示电流传输。具体地,用于数据解析的pc201和用作驱动调用事件来源的安卓设备202用usb线205相连,安卓设备202和设备电池203用导线连接正负极。usb的电源线、安卓设备与设备电池的导线间接入电流测量电路204和205,它们采集到的电流数据输出到pc201。该示例的硬件平台能够满足通过usb线控制安卓设备内核驱动调用事件追踪和能耗特征数据传输的同时,通过电流测量电路测定的电流计算安卓设备的实时能耗,并和能耗特征数据进行某个时刻的匹配,由某个时刻的能耗特征和该时刻对应的实时能耗组成能耗模型的训练数据的需求。

应当理解,步骤s101只是为了以下清楚描述本发明的内容,所示意的软件平台和硬件平台的实施例,并不用于限制本发明。本领域的技术人员也可采用其它的方式来追踪内核驱动调用事件追踪和获得能耗特征数据,并且随着安卓系统的升级或更新换代,可对上述方法作适当的变型。

(2)步骤s102,采集能耗模型训练数据

步骤s102包括采集模型训练数据,可采集两种数据,设备实际能耗数据和设备驱动能耗特征数据。

采集设备实际能耗数据的原理是:

利用图2所示的硬件连接,设备的实际能耗可采用下式计算:

p设备=uusbiusb+u电池i电池

其中,uusb和u电池分别表示usb和电池的电压,iusb和i电池分别表示usb和电池上供电的电流。在pc采用标准usb2.0的情况下,工作电流最大为500ma,这个公式分为如下两种情况:1)当安卓设备只处理低能耗任务时,pc给安卓设备供电的电能完全可以满足安卓设备能耗需求,多出部分能耗流向电池进行充电,此时公式中的u电池i电池为负,这是大多数情况下的能耗场景;2)当安卓设备执行高能耗任务时,由于pc供电无法满足安卓设备能耗需求,需要pc和设备电池同时给安卓设备供电,此时公式中u电池i电池为正。

为了清楚的理解设备能耗数据采集的方法,图3以功能模块的方式示意了数据采集过程,其中,实线表示数据流,虚线表示控制流。设备能耗数据采集模块310的输入是来自电流测量电路204的usb电流数据301和来自电流测量电路206的电池电流数据302。设备实际能耗采集控制单元308控制电流数据解析和能耗计算单元303和304是否进行数据解析。当308使能数据解析时,电流数据301经过usb电流数据解析与能耗计算单元303的数据解析得到实时电流,再根据204的采样间隔tusb,由wusb=uusbiusbtusb计算204采样间隔期间的耗电量wusb,添加到usb能耗数据缓冲队列305。类似的,对电池电流数据302的处理也是经过数据解析与能耗计算单元304得到电流测量电路206采样间隔的耗电量w电池,添加到电池能耗数据缓冲队列306。应注意,此处计算的wusb和w电池是矢量,分充电和放电过程。数据缓冲队列305和306是为了同步测量电路204和206采样的数据和调节设备能耗采样频率而设计的。设备能耗数据的采样频率统一由设备实际能耗采集控制单元308调节,按照设置的采样频率定时向设备能耗计算单元307发出采样信号,307接收到信号后,将数据队列305和306中的耗电量分别加和,得到wusb总和w电池总,根据w设备=wusb总+w电池总,基于设备能耗采样间隔t设备根据w设备=p设备t设备计算实时单位时间设备能耗p设备,也就是309表示的设备的实际能耗数据。

进一步地,现在将详细描述采集设备驱动能耗特征数据的基本原理。首先,介绍涉及的2个术语,即驱动调用事件和驱动能耗特征,前者表示对驱动关键函数的调用,后者表示驱动关键函数所影响到能耗的参数。

根据本发明的一个实施例,对wi-fi捕捉的一个驱动调用事件是数据发送函数的调用,对应的驱动能耗特征是发送字节数。采集能耗特征数据可采用事件驱动的方式,即只有在发生驱动调用事件时才采集一次能耗特征。与传统的周期性采样的数据采集方式相比,事件驱动方式的特征数据采集的计算和能耗开销更小,采集的数据精度更高,同时也不会丢失时间粒度。每一条能耗特征数据的格式可按照“事件类别:[参数列表]”的形式记录,参数列表以空格来间隔以便后续分析。

类似的,可采集其他模块的能耗特征数据,根据本发明的一个实施例,采集的硬件模块和对应的能耗特征如下表所示:

具体而言,对于cpu模块,主要是运行linux的应用处理器,本发明采集每个cpu核心频率和使用率,捕捉的驱动调用事件包括cpu频率变化事件和上下文切换事件等。当cpu频率变化事件发生时,相应函数参数会指定需要调节的cpu核心号和频率值,记录的能耗特征可为“cpu_freq:核心号频率值”;当cpu上下文切换事件发生时,cpu的使用率一般发生变化。通过内核函数可以得到事件发生的cpu核心号,再由参数数据结构的域分析可以分别采集到cpu执行内核代码、用户空间代码和空闲状态的时间t内核、t用户空间和t空闲,cpu的使用率可以表示为:使用率cpu核心=(t内核+t用户空间)/(t内核+t用户空间+t空闲),为使事件捕捉的计算能耗代价最小化,该计算过程可不在事件捕捉阶段进行,而是上传到pc上再进行计算,记录的能耗特征可表示为:“cpu_utilization:核心号t内核t用户空间t空闲[调用者信息]”,此处和下文中的[调用者信息]表示函数调用者的基本信息,包括“进程号线程组号用户号”3个linux系统字段,可以由systemtap内置函数获取,用来做后续app能耗从属分析,由于在进程切换时才会发生cpu核心调用者的更替,而cpu频率变化由驱动代码能耗策略触发,故无须记录调用者信息。

对于gpu模块,安卓系统中的驱动一般基于由第三方提供的硬件驱动层hal(hardwareabstractionlayer),和cpu不同的是,由于第三方提供的接口不唯一,具体捕捉的函数需要根据实际使用的gpu厂商和型号调整。本发明采集gpu核心的电压级别和使用率,捕捉的驱动调用事件对应为gpu核心电压级别变化事件和gpu统计数据更新事件。当gpu核心电压级别变化事件发生时,相关参数会指定需要调节的电压级别,记录的能耗特征为“gpu_level:电压级别”。当gpu统计数据更新事件发生时,可以通过参数数据结构的域分析采集到gpu核心有效执行代码的时间t有效和gpu上进程执行的总时间t总,gpu的使用率表示为:使用率gpu核心=t有效/t总,为使事件捕捉的计算能耗代价最小化,该计算过程同样可后移到pc上执行,记录的能耗特征可表示为“gpu_utilization:t有效t总”。和cpu类似,gpu调用者切换也是在gpu上下文切换事件时发生,故在能耗特征捕捉时不需要记录调用者信息。

对于wi-fi和lte模块,本发明采集这2个模块的发送和接收字节数,对应的驱动调用事件为数据发送事件和数据接收事件。发送和接收事件相应的函数入口在这两个模块中是一致的,而函数执行过程是同步的,模块的能耗与实际传输的数据量有关,故本发明在函数返回时进行事件捕捉。当数据发送事件发生时,相关返回值表示实际发送的字节数,通过参数数据结构域分析还可以获得发送数据的模块设备名称,在能耗特征解析时根据设备名称区分wi-fi和lte模块,记录的能耗特征可表示为“network_send:发送字节数设备名[调用者信息]”。同理,数据对接收事件中记录的能耗特征为“network_recv:接收字节数设备名[调用者信息]”。

对于flash模块,本发明采集读取和接收字节数,对应的驱动调用事件为数据读取事件和数据写入事件,和wi-fi、lte模块处理类似,也是在函数返回时进行事件捕捉以记录实际读写字节数。由于缓存和回写等技术在持久化中的作用,在读写小数据量时能耗是非常小的,因此,本发明以1024字节作为flash读写特征记录的最小阀值,每次捕捉到的读写事件只有在读写数据量超过阀值才进行能耗特征记录。相应的能耗特征可记录为“flash_read:发送字节数[调用者信息]”以及“flash_write:接收字节数[调用者信息]”。

对于显示屏模块,本发明采集的能耗特征为亮度值,对应驱动调用事件为屏幕亮度变化事件,当事件发生时,通过参数数据结构域分析得到指定的亮度值,能耗特征可表示为“display:亮度值”。

本领域的技术人员应理解的是,尽管本文具体针对gpu、cpu等模块进行描述,但本发明所采集的能耗特征数据并不限于上述模块,例如,还可包括gps模块。

为了清楚的理解安卓设备驱动能耗数据的采集方法,图4以功能模块的方式示意了数据采集过程,其中,实线表示数据流,虚线表示控制流。linux运行时内存分为用户空间401和内核空间402,用户空间中的进程/线程403通过系统调用接口404来调用内核代码。前述的关键内核驱动函数接口统一指代为409,406表示函数调用入口,前述的cpu、gpu、显示屏模块的驱动调用事件在406进行捕捉,407则是函数返回出口,前述的wi-fi、lte、flash模块的驱动调用事件在407进行捕捉。驱动事件捕捉单元408是systemtap内核模块,由图5的pc端驱动能耗特征数据采集控制单元503通过adb模块412控制安装或卸载,驱动事件捕捉单元408捕捉到调用事件后通过ftrace将驱动能耗特征数据输出到内核驱动能耗数据链表410中。内核驱动能耗特征数据读取单元411同样由503通过adb模块412控制,按设定频率从410中读取驱动能耗特征数据,并通过adb模块412上传到pc端进行后续解析。

图5示出了在pc端分析驱动能耗特征数据方法的示意图,同样以功能模块的方式示意,其中,实线表示数据流,虚线表示控制流。驱动能耗特征数据采集控制单元503通过adb模块412控制图4中的安卓设备端能耗特征数据采集模块按设定频率上传原始数据501,它是ftrace记录的数据,除了驱动能耗数据外还有其他模块可以使用ftrace记录的数据,需要能耗特征过滤解析单元502进行过滤解析,以得到不同特征的累积数据504。在进行进一步解析之前,对wi-fi、lte模块收发字节数以及flash模块读写字节数分别作累加处理,其他能耗特征直接替换成最新数据。接着503按照与设备实际能耗采集控制单元308一样的频率控制能耗模型训练数据生成模块505重置能耗特征累积数据504,并将能耗特征累积数据504和实时设备能耗309整合成“[能耗特征数据]设备能耗”形式的单条能耗训练数据,存入能耗特征数据集506。由于数据309和504可能是不同步的,所以训练数据生成模块505的工作方式也是异步的,每次都会异步等待能耗数据309的更新之后再生成单条能耗训练数据。

(3)步骤s103,根据训练数据训练lstm能耗模型

步骤s103涉及能耗模型的结构和训练过程。

首先,介绍能耗模型的原理:

不同于现有技术中需要使用基准测试程序分别对不同硬件模块建模的方法,本发明设计的能耗模型训练数据由安卓设备的日常使用产生,这使得模型更具泛化能力。为了对尾电耗建模,并防止误差向后传递中可能出现的梯度消失和梯度爆炸的现象,本发明的能耗模型基于lstm神经网络,lstm单元能够记忆能耗特征在过去事件点上发生的事件。每个单元的计算过程如下:

其中,表示在t时间节点隐藏层l的状态,令表示时间节点t的输入,表示神经元在t时间节点隐藏层l的记忆状态,t2n,4n即r2n→r4n,表示进行(wx+b)计算的张量转换,w和b分别表示计算权重和偏移。⊙表示逐个元素的相乘,d表示droupout操作,所谓dropout是指按比例抑制部分输出,这种方式可以增加模型的泛化能力并防止模型过拟合。i,f,o,g分别是四个“门”,用来防止向后传递中误差消失和误差爆炸的情况。sigm和tanh函数由如下公式定义:

sigm函数:

tanh函数:

sigm的值域范围为[0,1],tanh的值域范围为[-1,1],它们的求导结果简洁,方便在误差向后传递时计算归并和约简,主要作为激活函数使用。为了对模块之间能耗的相对影响进行建模,本发明引入了dense层网络,即节点的全连接层。能耗模型属于回归模型,最后需要将多参数输入整合成单值输出,本发明采用线性回归层进行预测能耗输出,具体即对e预测=wtx+b的中间结果向量x的计算权重w和偏移b进行回归学习。能耗模型中lstm单元层网络、dense层网络和线性回归层的调节参数不能初始化为同一值,因为神经网络需要不对称性去实现自身的自我调整。

图6示出了本发明一个实施例的能耗模型训练模块示意图。实线表示数据流,箭头607表示dropout连接,箭头608表示全连接。数据预处理单元601将能耗模型训练数据集506分成能耗模型验证数据集602和能耗模型训练数据集603(其中,训练数据集603占大部分),分别对应着训练过程和验证过程,每隔一定数量的训练迭代进行一次模型验证。接下来的处理由能耗模型训练单元618完成,在每次训练迭代时,数据预处理单元604从能耗模型训练数据集603获取训练数据进行预处理,包括数据归一化和数据打包操作。归一化操作是对上述采集的屏幕亮度数据进行的,将亮度范围归一化到[0,1]区间,这样有助于模型参数更快的修正。数据打包可以使模型训练进行更少的数据读写和数据交换工作,使训练过程得以加速。在预处理完成之后,训练数据拆分成由“[特征数据]”和“实际能耗”组成的能耗特征数据集605和设备实际能耗数据集612,其中,[特征数据]是由上述采集的各个特征的数值数据,可由空格间隔。打包好的数据进入能耗模型结构611进行单次训练。能耗模型包括一定数量由dropout操作607连接的lstm单元层606和少量由全连接608相连的dense层609组成,lstm单元层606和dense层609按参数规模和具体需求不同调整层内节点数。在输出前经过一个线性回归层610输出打包训练数据对应的预测能耗数据集613。将612和613通过误差计算单元614计算得到误差数据615。在单次训练迭代中,误差向后传递单元616选用适当的梯度下降法计算模型中各个参数的误差值进行误差调节。每隔一定次数的训练迭代进行一次能耗模型验证,处理流程和训练过程类似,不同之处在于,误差计算单元614计算出误差数据615之后不作误差向后传递,而是将验证的数据误差变化储存到验证数据误差变化数据617中,并通过该数据分析训练过程是否收敛,即误差变化是否在一个较小的误差值附近平稳,若收敛可停止训练过程。

能耗模型结构611可用于与训练设备202相同或相似型号的安卓设备的能耗分析。图7示出了根据本发明的一个实施例的分析待测安卓设备能耗的方法的流程图。该方法包括:

s710:获得待测安卓设备的能耗特征数据;

s720:以所述能耗特征数据为输入,利用训练好的基于lstm的能耗模型获得待测安卓设备的能耗。

安卓设备的能耗预测可在pc中进行,以不影响安卓设备的性能,如图8所示,pc101安装有能耗量化分析软件并搭载s101得到的软件平台,安卓设备702与训练过程使用的设备202是相同的品牌型号,703是连接使用的usb线,用作数据流和控制流传输。此外,安卓设备本身也可安装能耗量化分析软件以实施的监测能耗。

参见图9所示的例子,具体训练过程是:

安卓设备702上部署的安卓端驱动能耗特征数据采集模块801的结构如图4所示,采集的原始能耗特征经过pc端驱动数据能耗特征采集模块802处理得到解析后的能耗特征数据集803,802的结构类似于图5,在利用模型进行能耗预测的阶段不需要采集设备能耗数据,只需生成能耗特征数据集803,获得能耗特征数据的过程可参见步骤s102的内容。能耗特征数据预处理单元804从803中逐条取出能耗特征数据并对其中的显示屏能耗特征归一化,之后输入训练好的能耗模型611,得到单条能耗预测数据805,最后由预测能耗可视化单元806进行数据可视化。

本发明的方法可应用于安卓设备的能耗分析,例如,分析一段时间内或某个app运行过程的耗电量。经过验证,本发明的量化误差可保持在11.3%以下,同时开销较低,例如,将本发明方法应用于nexus4,能耗特征采集的运行能耗为30.3mw,cpu运行占用率为1.6%。

应理解的是,尽管为了清楚起见,图3、图4、图5、图6和图8以功能模块的形式示例了基于本发明的安卓设备的能耗分析方法,在不违背本发明的精神和范围的情况下,本领域的技术人员可进行适当的变型或改变。

本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1