覃 磊 熊 焰 黄文超 孟昭逸
(中国科学技术大学计算机科学与技术系 安徽 合肥 230026)
对于移动设备,如智能手机和平板来说,电量是一种关键的资源。随着互联网的普及和互联网应用的日渐丰富,移动设备网络模块的功耗在移动设备总功耗中占据了重要地位[1],因此针对网络模块电量优化的研究有着极其重要的价值。目前已有的安卓网络电量优化研究中,大多通过减少尾时间[2]、合并网络请求[3-4]、快速休眠网络[5]、云计算云端优化[6]、水平/垂直切换无线信道[7]、使用跨层和功率优化的认知无线电架构[8]、预测网络视频资源需求[9]等方法来降低手机的网络能耗,但是还没有研究针对网络传输任务的电量消耗进行优化。根据我们的观察,网络传输任务在网络信号弱或网络拥塞等网络不佳状态下的电量消耗会比网络良好时的电量消耗高50%以上。如果研究者忽略传输任务的状态对能耗的影响,将会错失一个显著优化电量的机会。
为了找到网络传输任务中的优化点,我们对其进行了初步的调研。调研结果显示,由于移动网络流量越来越便宜,许多用户开始使用流量下载大文件,而不是使用Wi-Fi进行下载。移动网络在信号强度较弱时,会提高发射功率以便保证网络的正常传输,而更高的发射功率也带来了更大的电量消耗。在网络信号弱时传输的数据量仅占传输任务总数据量的极少部分,却消耗着大量的电量资源。如果此时增加移动网络接入的重试间隔,减少重试次数,就能降低网络传输任务的整体功耗。类似地,在网络拥塞时选择将下载任务延迟到网络情况改善时进行,也能达到节约电量的目的。但是大部分用户不愿意耗费精力,而且也没有足够的信息来确定网络的状况,进而采取手动暂停传输任务等方式节约电量。因此,我们提出了一种面向安卓网络传输任务的智能感知节能技术,能够感知下载任务处于何种状态以及当前网络的状况,并应用针对性的节能方案对手机的电量消耗进行优化。本文的主要贡献有:
(1) 对安卓网络传输任务的特点进行了研究,发现了不同状态下的网络传输任务的特点。
(2) 提出了一种面向安卓网络传输任务的智能感知节能技术。该技术无需用户参与,通过感知网络传输任务所处的状态,应用特定的节能手段来优化电量的使用。
(3) 以该技术为原型实现了一个任务智能感知节能系统。同时,进行了大量实验来验证该系统的实用性。实验结果表明,在使用全部节能方案后,传输任务的单位数据能耗平均降低了44%。
3G和4G是当前主流使用的移动蜂窝网络。3GPP[10]和4GPP[11]是当前主要采用的3G/4G标准。相比于Wi-Fi的耗电,移动蜂窝网络的耗电特点更为复杂:
(1) 多频段、多制式的移动蜂窝网络信号。手机在移动蜂窝网络中时会不断地扫描无线电波,决定应该接受哪个基站发出的信号。目前的移动通信网络不仅包括4G网络,还有GSM(2G)、WCDMA、TD-SCDMA、CDMA2000(3G)等多种制式的网络。这些不同制式的网络使用的是不同的频段,因此手机射频天线需要不停地在多个频段扫描多种制式的网络信号,功耗较高。而Wi-Fi一般使用2.4 GHz频段,频率固定,支持范围有限,在相同网络状况下的功耗较低。
(2) 信号弱时射频天线搜索更频繁,信号功率更高[12]。4G的传输速率虽然较高,但是其穿透能力和覆盖范围并不如3G。特别是一些高层建筑、地下设施往往存在4G信号的盲区。此时如果使用4G网络,射频天线为了保证网络连接的可靠,会提高其功率,并频繁地搜索各个频段的信号,造成手机电量消耗剧增。
1) 观察1:网络信号差会增加电量消耗的速度。根据“移动蜂窝网络在信号弱时会提高功率,并且更频繁地搜索信号”的特点,我们进行了实验。我们抽取了应用市场上20个文件传输型应用,测量了它们在不同网络环境下用于网络传输任务的电量消耗。实验表明,网络传输任务约占应用程序非空闲状态下电量消耗的67%,其中大约35%的电量消耗在了网络信号差所引起的更高的传输功率上。
然而由于网络信号弱时传输速率较低,其传输的数据量仅占传输任务总数据量的极少部分,而绝大部分数据传输主要依靠信号强时的高速数据传输。同理,网络拥塞时传输任务的速率也较低,此时即使继续进行传输,任务也无法在合理时间内完成,反而会白白消耗移动设备宝贵的电量资源。我们将网络信号弱状态和网络拥塞状态统称为低速传输状态。如果能够识别出此种状态,采用特定的推迟算法,将传输任务推迟到网络状况改善时再进行,避免手机提高功率和频繁尝试重连,就能够节约大量的电量。
2) 观察2:无用的网络连接会占用手机的资源。在上述实验中,我们还发现大部分传输任务会选择TCP作为传输层协议,而部分用于任务传输的TCP连接在传输完成后并不会被关闭。具体来说,网络传输任务结束后,客户端发送FIN报文,并接收客户端的ACK。然后客户端等待服务器发送的FIN报文,对齐进行确认,并进入TIME_WAIT状态。此状态可能会持续长达30秒、1分钟或2分钟,甚至更长时间(取决于具体实现)。由于某些网络原因,客户端可能会长期处于TIME_WAIT状态,连接会一直保持,消耗着客户端的资源(端口号)。另外,有的TCP连接在传输任务完成后并未断开,而是继续保持打开状态。然后应用程序会通过这些TCP连接与服务器同步数据,使得系统频繁唤醒,不能快速进入睡眠模式,这也会增加电量消耗。如果能及时发现这些无用的连接,推迟同步数据包的发送或关闭连接,将会有助于节约电量。
根据上述观察,我们认为一个传输任务应该长期处于高速、稳定的状态,并且要及时处理无效的网络连接,以便能够快速且节能地完成任务。针对观察1,我们应该能够识别传输任务是否处于低速传输的状态。此时传输速率很低,应该选择暂停传输任务,并在适当的时间恢复传输。针对观察2,我们应该能够识别传输任务是否处于完成状态。传输任务完成后所有与该传输任务有关的连接均为无用连接,应该推迟其数据包的发送或及时关闭连接以节约电量。
使用TCP连接的传输任务在网络信号弱和网络拥塞状态下都会出现大量的重复确认报文,因此可以将其作为特征之一。然而,有的传输任务使用的是UDP协议或自定义的传输协议,在UDP协议的基础上添加自定义的拥塞控制、应用层重传等逻辑。针对这种情况,可以将任务的实时传输速率作为补充特征。因为传输任务的文件一般比较大,在网络良好时期会产生较大的网络流量,而在网络信号弱和网络拥塞时几乎没有流量产生。根据经验,网络信号弱和网络拥塞状态下的传输速率一般不超过10 KB/s,具体的阈值可以通过进一步的实验来确定。
在实验中我们还观察到,从网络良好状态进入网络信号弱状态和从网络良好状态进入网络拥塞状态是有区别的。具体体现为,从网络良好状态进入网络信号弱状态时,其传输速率会逐渐下降,并且下降速度会逐渐变慢。考虑到多数网络信号弱的场景是用户从信号良好的区域慢慢移动至地铁、高层建筑等信号弱的区域,而信号强度与手机与接入点的距离的平方成反比,所以可以推断此种情况网络速率应该是先快速下降,然后缓慢下降,直到低于阈值。我们的实验数据证实了这一推断。
而网络拥塞是指在分组交换网络中传送分组的数目太多时,由于存储转发节点的资源有限而造成网络传输性能下降的情况。相比于前一种情况,从网络良好状态进入网络拥塞状态时,传输任务的瞬时传输速率会瞬间降到阈值以下。网络拥塞状态时有发生,但是一般不会持续太久,而后传输速率又会迅速回到正常值,因此传输速率会呈现稳定的多个瞬时下降的反尖峰。同样实验数据也证实了这一推断。
然而,当实时速率低于阈值时,任务也可能处于已完成状态,所以需要将其区分出来。
在我们的实验过程中,传输任务的文件较大,会产生较大的网络流量。而当传输任务完成时几乎不再出现大的分组,只有一些零星的带控制信息的分组,并且传输任务所打开的要传输文件的文件描述符会立刻关闭。
根据传输任务完成时传输文件立刻关闭这一现象,我们进行了实验。实验发现,网络传输任务通常需要以下流程:打开网络连接,打开文件,网络传输,关闭文件,关闭网络连接。并且流程中的网络连接操作和文件操作是连续发生的。任务开始时,打开网络连接,然后紧接着执行打开文件的操作。任务完成时,关闭文件,然后紧接着执行关闭网络连接的操作。根据实验数据可知,打开/关闭网络连接操作和打开/关闭文件操作的时间差均不大于0.03秒。
因此,我们可以通过跟踪网络连接建立时的打开文件列表,筛选出与该连接有关的文件。如果该连接的网速降低到网速阈值后关联文件立刻就关闭了,那么说明传输任务刚刚完成或者网络中断。而如果该连接的网速降低到网速阈值后关联文件一段时间都未关闭,那么说明是网络信号差/网络堵塞导致的网络下降,而传输任务还未完成。通过设定一个合适的文件关闭等待时间,我们可以将网络信号差/网络堵塞状态识别出来。而对于关联文件立刻关闭的情况,可以获取当前手机的网络可用状态来判断传输任务是处于网络不可用状态还是已完成状态。
综合上述情况,我们整理得出识别任务状态的流程图,如图1所示。
图1 识别任务状态的流程图
(1) 状态识别开始。进入(2)。
(2) 如果当前网络中存在属于该传输任务的大量重传数据包,则识别为低速传输状态,进入(5);否则进入(3)。
(3) 如果传输速率在一段时间内始终低于某个阈值,则进入(4);否则为任务进行中状态,不需要优化。
(4) 如果关联文件关闭,则进入(5);否则进入(6)。
(5) 如果传输速率下降速度逐渐变慢,则为网络信号弱状态;否则为网络拥塞状态。
(6) 如果网络不可用/连接断开,则为网络不可用/任务已完成但连接已断开状态,不需要优化;否则为任务已完成但连接未断开状态。
智能感知节能系统由三个模块组成:信息采集和状态监测模块,任务状态识别模块,电量优化模块,如图2所示。
图2 智能感知节能系统框架图
我们使用数据包捕获工具tcpdump[13]捕获经过本机接口的所有网络数据包,并解析其中相应字段的信息。重传对应的标志位可以用来判断重传报文,流经的网络数据包大小可以用来计算瞬时传输速率,首次收到新端口号的报文的时间即为连接的建立时间,打开文件描述符列表中文件的访问时间即为文件创建时间。
4.1.1重传报文的检测
使用数据包捕获工具捕获数据包,并查看其中重传对应的标志位,就可以判断重传报文。如果长期出现大量重传报文,说明当前传输任务处于低速传输状态。
4.1.2传输任务瞬时传输速率的计算
由于每一个传输任务使用独特的端口号进行传输,因此我们可以通过捕获流经该端口的网络数据包来计算瞬时传输速率。有的数据包中传输的不是待传输文件的数据,而是一些控制信息(例如丢包重传、速率控制等),因此不能直接将网速大于0作为传输任务正在进行的特征,而是要设定一个阈值。当实时传输速率大于某个阈值时,认为传输任务处于正在进行中的状态。
采用滚动法计算瞬时传输速率,即每次取距离当前时刻最近的若干个时间片内的数据包,对它们的大小求和,然后除以时间片的长度。相对于固定时间片计算网速的方法,滚动计算得到的实时传输速率的变化曲线更加平滑,更适用于我们后面通过瞬时传输速率的变化来判断网络信号差或网络拥塞的方案。
4.1.3传输任务关联文件的确定
在传输速率低于阈值时,还需要关联文件的打开/关闭状态来辅助我们进行判断。因为在传输任务流程中打开文件操作是紧接着打开网络连接操作之后发生的,因此可以通过网络连接的建立时间来找到与该连接相关的打开文件。首先,使用检测程序[14]监测有无新的网络连接产生。一旦产生新的网络连接,记录其连接建立时间,并与当前应用打开的文件列表中的所有文件进行对比,找出文件创建时间紧邻连接建立时间的文件,这些文件就是该传输任务所对应的传输文件。根据实验数据,打开/关闭网络连接操作和打开/关闭文件操作的时间差均不大于0.03秒。因此,我们将关联文件关闭等待时间设定为0.03秒。
任务状态识别模块主要负责识别传输任务的网络信号弱、网络拥塞、已完成状态。
1) 用于区分传输任务处于高速/低速传输状态的速率阈值的设定与低速传输保持时间的设定。为了选取一个合适的速率阈值,我们使用了大量应用程序进行实验。根据实验结果,低速传输状态绝大部分时间中,传输速率都低于2.7 KB/s。因此,我们认为速率阈值设定在2.7 KB/s时划分效果较好。
然而仅使用速率阈值作为区分传输任务处于高速/低速状态容易造成误判,所以需要传输速率在一定时间内都低于该速率阈值,才能认为任务处于低速状态。我们称该时间为低速传输保持时间。根据实验数据,将其设定为6.2秒时划分效果最好。
2) 使用传输速率下降的快慢区分网络信号差状态和网络拥塞状态。根据之前的观察,“从网络良好状态进入网络信号弱状态时,其传输速率的下降速度是逐渐变慢的”,我们可以用相邻时间片的滚动瞬时传输速率的差值和时间片的长度计算得到传输速率的变化率,即加速度。当加速度呈现下降趋势且传输速率下降到速率阈值以下并保持一定时间时,我们就可以认为当前处于网络信号弱状态,否则处于网络拥塞状态。
3) 使用网络连接建立时间和关联文件创建时间识别任务已完成状态。如果传输任务的网络连接已断开,则不再进行后面的优化工作。当传输任务经历一次完整的连接建立->文件打开->文件关闭过程且相邻步骤的时间间隔小于0.03秒,但是网络连接没断开,表示任务虽已完成,但是其对应的网络连接仍然保持打开状态,需要我们进行后续的优化。
电量优化模块分别为处于网络信号弱、网络拥塞、已完成状态的任务使用相应的优化方案。
1) 网络信号差状态和网络拥塞状态下应用随机后退算法。因为网络信号差一般是和手机所处的位置、接入点的硬件设施有关,短期内无法恢复。因此,对于网络信号差的情况,我们会将移动网络接入的重试间隔设置得较长。而在网络拥塞时,通常是链路上数据传输过多造成信道拥挤,一般能在短时间内恢复正常,此时我们重试数据传输的间隔应该短一些。
我们对网络信号差状态采用指数时间随机后退算法。当传输任务进入网络信号差状态,意味着移动网络连接会时常断开,故应隔一段时间尝试重新接入网络,但是尝试不能过于频繁。具体来说,经历了一连串的n次移动网络接入失败后,将随机地从{0,1,2,3,4,…,2n-1}中选择一个K值,然后推迟K×512比特时间(512比特时间为进入以太网所需的时间)再继续尝试接入网络。传输任务经历的网络接入失败次数越多,K选择的间隔就越大,最大为210,直到接入成功后将间隔重新设置为0。
而对于网络拥塞状态,我们采用线性时间随机后退算法。当传输任务进入网络拥塞状态,意味着数据传输会时常中断或处于低速,故应隔一段时间尝试继续数据传输,但是尝试不能过于频繁。具体来说,经历了一连串的n次数据传输中断或低于阈值后,将随机地从{0,1,2,3,4,…,n-1}中选择一个K值,然后推迟K×512比特时间再继续尝试传输。传输任务经历的重启尝试失败次数越多,K选择的间隔就越大,最大为210,直到数据传输速度正常后将间隔重新设置为0。
2) 传输任务已完成状态下应用数据包延迟发送算法。在识别传输任务处于已完成状态后,仍保持传输任务对应的网络连接以便完成一些后续工作或用于下一次任务传输,但是对通过该连接发送的数据包采取延迟发送处理。首先选择一个固定长度的时间槽,在同一个时间槽内发送的数据包将会被延迟到时间槽的尾部统一发送,以减少手机被唤醒的次数,达到节约电量的目的。
我们从安卓应用市场选取了一定数量的带网络传输任务的安卓应用,并在主流安卓机型上进行了实验。实验结果显示,该系统能准确识别安卓网络传输任务的状态,并能有效降低网络传输任务的能耗。
我们在豌豆荚、应用宝、Google play等应用市场下载了1 364个安卓应用,并筛选了其中带有网络传输任务的120个应用进行实验。实验使用的安卓手机机型包括三星Note 7、华为荣耀、小米5、Nexus 4共4款。在测试过程中,所有手机均关闭自带的节能模式。我们使用高性能移动工作站、USRP B210、天馈系统和Ubuntu 16.04、OpenAirInterface软件建立4G LTE伪基站,供手机接入。我们还记录了网络请求的开始时间、延迟时间、结束时间,使用文献[15]的方式模拟计算任务的耗电。
1) 测试系统识别不同任务状态的准确率。测试网络信号弱状态的识别准确率:首先建立一个基站,降低该基站的无线信号发射功率,制造一个网络信号弱的区域。类似地,我们建立另一个基站,保证该基站移动网络的信号良好。将此网络接入范围内的区域记为网络良好区域。然后选定一部手机和一个待测试应用程序。一轮实验开始时,测试人员首先位于网络良好区域,接入该无线网络,然后在手机上开启系统和待测试的应用程序,开始网络传输任务,待传输速率稳定后,再以正常速度走到网络信号弱区域,实验结束。对每个应用程序重复进行20轮。待所有应用程序测试完成后,再换另一部手机,重复以上实验。
测试网络拥塞状态的识别准确率:首先在多台移动设备上安装网络数据包自动发送程序,移动设备能够启动该程序,使得基站移动网络的信道堵塞。然后建立一个基站,让这些移动设备接入该基站。接着选定一部手机和一个待测试应用程序。一轮实验开始时,测试人员首先将手机接入该无线网络,然后在手机上开启本系统和待测试的应用程序,开始网络传输任务,待传输速率稳定后,再启动数据包自动发送程序使得基站的移动网络堵塞,实验结束。对每个应用程序重复进行20轮。待所有应用程序测试完成后,再换另一部手机,重复以上实验。
测试传输任务已完成状态的识别准确率:首先我们建立一个基站,保证该基站移动网络信号良好,信道畅通。将此网络接入范围内的区域记为网络良好区域。然后选定一部手机和一个待测试应用程序。一轮实验开始时,测试人员首先位于网络畅通区域,接入该无线网络,然后在手机上开启系统和待测试的应用程序,开始网络传输任务,直到传输任务完成,实验结束。对每个应用程序重复进行20轮。待所有应用程序测试完成后,再换另一部手机,重复以上实验。
2) 测试系统各节能方案的效果。网络信号弱状态下使用指数时间随机后退算法,实验环境设置与之前识别实验保持一致。在测试过程中,测试人员携带手机交替地在网络信号弱区域和网络良好区域活动,确保在两个区域停留的时间大致相等。每一轮实验进行一次完整的任务传输,每个待测试应用程序重复20轮。待所有应用程序测试完成后,再换另一部手机,重复以上实验。
网络拥塞状态下使用线性时间随机后退算法,实验环境设置与之前识别实验保持一致。在测试过程中,测试人员携带手机交替地在网络拥塞区域和网络畅通区域活动,确保在两个区域停留的时间大致相等。每一轮实验进行一次完整的任务传输,每个待测试应用程序重复20轮。待所有应用程序测试完成后,再换另一部手机,重复以上实验。
传输任务已完成状态下使用数据包延迟发送算法进行测试。在测试过程中,测试人员携带手机待在网络良好区域。每一轮实验进行一次完整的任务传输,每个待测试应用程序重复20轮。待所有应用程序测试完成后,再换另一部手机,重复以上实验。
另外,我们测试在三种任务状态下不使用电量优化方案的效果,其他条件保持一致,作为对照组。
因为各个传输任务的数据量不同,我们对测量得到的时间和功耗数据等均做了归一化处理。
1) 系统识别网络信号弱状态、网络拥塞状态、传输任务已完成状态的准确率分别为92.50%、90.00%、82.50%,如表1所示。
表1 任务状态识别实验结果 %
相较于其他3种机型,Nexus4的三种网络任务状态识别率均较低。因为传输速率阈值和低速传输保持时间的值是根据4种不同安卓机型下的实验结果加权平均而得。所有4种机型中,只有Nexus4属于较老的机型,而其他3种机型均较新。新机型的权重占比较高,因此设定的传输速率阈值和低速传输保持时间对于新机型更加合适,识别各任务状态的准确率也更高。
2) 在网络信号弱状态下应用指数时间随机后退算法后,任务的高速传输时间几乎没有变化,射频模块处于高功率的时间减少了91.0%,但是任务传输也被推迟,导致完成时间增加了7.9%。最终传输任务的单位数据能耗平均降低了60.5%。如表2和表3所示。
表2 指数时间随机后退算法效果(应用节能方案)
表3 指数时间随机后退算法效果(不应用节能方案)
相较于其他3种机型,Nexus4的射频模块高功率搜索信号时间更长。推测是新机型的射频模块更加先进,针对信号弱状态下的信号搜索进行了优化所致。
3) 在网络拥塞状态下应用线性时间随机后退算法后,任务的高速传输时间几乎没有变化,任务在拥塞状态下传输的时间减少了94.1%,但是任务传输也被推迟,导致完成时间增加了3.5%。最终传输任务的单位数据能耗平均降低了35.3%。如表4和表5所示。
表4 线性时间随机后退算法效果(应用节能方案)
表5 线性时间随机后退算法效果(不应用节能方案)
不同机型的实验效果之间没有明显差异。
4) 在传输任务已完成状态下应用数据包延迟发送算法后,由网络引起的手机唤醒次数减少了67%。如表6所示。
表6 线性时间随机后退算法效果
不同机型的实验效果之间没有明显差异。
我们对安卓网络传输任务进行了研究,发现了安卓网络传输任务不同状态的特点,并提出了一种面向它的智能感知节能技术。它能针对传输任务不同状态的特点感知任务状态,对其采用不同的电量优化方案,降低设备功耗和减少不必要的网络传输行为。我们利用此技术实现了原型系统,应用在安卓真机上,并且比较了采用优化方案前后的测试与统计结果,验证了该技术的有效性。与从硬件上降低电量消耗的方案相比,该优化方案的代价较小,更容易部署与实现。