CN110109702A - 基于代码分析的Android计算迁移在线决策方法 - Google Patents
基于代码分析的Android计算迁移在线决策方法 Download PDFInfo
- Publication number
- CN110109702A CN110109702A CN201910405581.XA CN201910405581A CN110109702A CN 110109702 A CN110109702 A CN 110109702A CN 201910405581 A CN201910405581 A CN 201910405581A CN 110109702 A CN110109702 A CN 110109702A
- Authority
- CN
- China
- Prior art keywords
- obj
- time
- class
- node
- dep
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/76—Adapting program code to run in a different environment; Porting
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种基于代码分析的Android计算迁移在线决策方法。首先,基于代码分析技术,对应用的类、方法、对象及其调用关系建模;其次,基于动态分析,对应用的方法执行时间和数据传输的应用模型建模;最后,基于应用模型,提出了上下文模型帮助决策,通过适应度函数进行决策方案的评估和选择最优方案。本发明方法基于代码分析技术得到的对象调用图和方法执行时间和数据传输量,计算每个迁移决策方案的响应时间,并得到最优部署方案,从而能够减少执行时间及能量消耗。
Description
技术领域
本发明涉及一种基于代码分析的Android计算迁移在线决策方法。
背景技术
伴随着人工智能和大数据的兴起,移动应用程序的计算和数据处理愈发密集,同时,随着计算和通信技术的飞速发展,移动应用的计算平台已经从智能手机,平板电脑扩展到可穿戴设备、车辆、无人机等。由于用户体验需求的提升记忆计算越来越复杂的应用程序,因此移动应用的计算平台的两个关键限制变得日益突出。
一方面,不同计算平台硬件配置高度异构,导致同一应用在不同配置平台性能差异较大,所以即使是同一个移动应用程序在不同移动设备上的用户体验差别很大。另一方面,移动设备的电池电量存在局限性。大多数计算平台都是由电池供电,随着移动应用的复杂度和计算量越来越大,移动设备的耗电量也越来越大,现有的移动设备的电池容量已无法满足复杂移动应用的需求,针对移动设备所面临的上述两大局限性,计算迁移作为一种有效的方案被提出。计算迁移,就是让一些计算密集型的应用程序在远程服务器上执行,让应用程序可以利用远程服务器强大的硬件资源和电力供应从而提高其响应速度和降低移动端电量消耗,所以计算迁移是一种能够有效减少移动设备电量消耗同时提升移动应用性能的技术。
发明内容
本发明的目的在于提供一种基于代码分析的Android计算迁移在线决策方法,该方法基于代码分析技术得到的对象调用图和方法执行时间和数据传输量,计算每个迁移决策方案的响应时间,并得到最优部署方案,从而能够减少执行时间及能量消耗。
为实现上述目的,本发明的技术方案是:一种基于代码分析的Android计算迁移在线决策方法,首先,基于代码分析技术,对应用的类、方法、对象及其调用关系建模;其次,基于动态分析,对应用的方法执行时间和数据传输的应用模型建模;最后,基于应用模型,提出了上下文模型帮助决策,通过适应度函数进行决策方案的评估和选择最优方案。
在本发明一实施例中,所述对应用的类、方法建模的具体过程如下:
在对象调用图中,顶点是由对象的集合OBJ组成,而每个对象定义为obji=<objectID,Ct,Mrs>,其中,objectId是对象唯一的标识符,Ct表示相应对象所属的类,Mrs表示创建相应对象的方法;通过静态代码分析获得每个对象所属的类Ct和创建相应对象的方法Mrs,Android应用程序代码的类的集合和每个类中所有方法的集合定义如下:
类的集合定义为C={C0,C1,C2,...,Ci},其中,Ci表示类名,C表示Android应用程序中所有类名的集合;
方法的集合定义为Mi={Mi0,Mi1,...,Mij},其中Mij表示Ci的Mj方法,Mi集合表示Ci中所有方法的方法名的集合;
采用Soot工具对Android应用程序代码进行分析可直接获得类的集合和所有类的方法的集合,此外,对每个函数方法体进行代码分析,得到函数方法体的五个代码特征,定义如下:
函数Mij的集合由其方法体的五个特征组成,每个函数方法体的特征为Mij=<blockDepth,percentBranchStatements,complexity,statements,calls>,blockDepth表示函数深度,函数深度指示函数中分支嵌套的层数;percentBranchStatements表示分支语句比例,该值表示分支语句占语句数目的比例,此处的分支语句指的是使程序不顺序执行的语句,包括if、else、for、while和switch;complexity表示方法的圈复杂度,圈复杂度指示一个函数可执行路径的数目,其计算公式为:complexity=e-n+2,e为控制流图的边的数量,n为控制流图的节点数;statement表示方法的语句数,calls表示方法内部调用的次数;
类方法之间的关系为
表示Mij方法的函数体内调用了Mnm的次数为callTime,使用hashmap的key为Mij@Mnm,value为callTime,如果key相同则callTime自加1,从而得到callTime,定义Mnm是Mij的后继,记所有Mnm组成了Mij的后继集合Post(Mij)。
在本发明一实施例中,所述对应用的对象及其调用关系建模的具体过程如下:
首先定义对象调用图的节点是对象的集合,节点与节点之间的边是对象与对象之间的调用关系:
在对象调用图G=<OBJ,INVOKE>中,顶点是由对象的集合OBJ组成,OBJ={obj0,obj1,...,obji},而每个对象定义为obji=<objectID,Ct,Mrs>,其中,objectId是对象唯一的标识符,Ct表示相应对象所属的类,Mrs表示创建相应对象的方法;INVOKE表示对象之间调用关系的集合,定义为INVOKE的元素,表示对象obji的Mrs方法中调用了objj的Mpq方法,invokeTimes表示obji执行Mrs方法时,内部调用了objj的Mpq方法的次数;
基于对象调用图定义,使用Soot工具将Android应用程序源码编译为Jimple中间表达式,然后对编译后的语言使用如下算法进行分析,得到Android应用程序的对象调用图;具体采用算法流程如下:
步骤S1:遍历Urs集合并识别中的中是否含有关键字,其中,Urs为Mrs的语句集合,为Mrs的第k句代码;
步骤S2:根据步骤S1所遍历的结果来更新OBJ和INVOKE这两个集合;
步骤S3:如果检测到方法中有调用方法,则跳转入被调用的方法,执行步骤S1。
在本发明一实施例中,所述对应用的方法执行时间和数据传输的应用模型建模的具体过程如下:
(1)方法执行时间直接计算:
首先使用动态代码分析技术对Android应用程序代码进行程序插桩,并在程序历史执行过程中,记录运行时创建的对象,对象调用方法的执行时间以及每一个方法除去内部调用的执行时间以及每一次方法执行过程的数据量,如下所示:
每个方法执行时间为
表示为方法Mij在计算节点nk上的执行时间和数据传输量的集合,其中EdataSizeij表示Mij的数据传输量,Etime为执行时间;
方法除去外部调用的时间为
表示为方法Mij在计算节点nk上的除去外部调用的执行时间和数据传输量的集合,其中SdataSizeij表示Mij的数据传输量,Stime为执行时间;
由于方法除去外部调用的时间无法直接获得,根据方法除去外部调用的时间等于每个方法的执行时间减去所有外部调用方法的时间的关系,所以根据类之间的关系得出下式;
上式的含义即方法Mij在计算节点nk除去方法外部调用的时间,为方法Mij在计算节点nk的全部执行时间减去方法Mij后继集合中所有方法在计算节点nk上的全部执行时间乘以其被调用次数的时间;
(2)方法执行时间间接评估:
由于动态代码分析技术的缺点是不能保证被分析的源代码的全部覆盖率,因此采用随机森林的方法对在动态代码分析中未收集到方法的数据进行回归预测;定义可以收集到方法执行时间的方法的blockDepth、percentBranchStatements、complexity、statements、call信息为特征属性,如下式所示:
Time=P(X);
X=(blockDepth,percentBranchStatement,complexity,statements,calls)
其方法执行时间为预测属性组成训练集,之后采用十折交叉验证法来验证模型,并使用模型来预测未收集到方法执行时间;
对于没有检测到方法的数据传输量,以方法的方法名MethodName,根据可以收集到已收集到数据传输量方法的blockDepth、percentBranchStatements、complexity、statements、calls信息为特征属性,并使用代码分析技术收集所有方法的参数类型,将所有参数类型进行字符串排序后每一种参数类型作为一个参数特征,方法中含有这个参数类型则加1,如下式所示:
Data=P(X);
X=(MethodName,blockDepth,percentBranchStatem ent,complexity,statements,calls,Parm1,Parm2...ParmN);
MethodName表示方法的方法名,Parm1,Parm2...ParmN代表参数;
其数据传输量为预测属性组成训练集合,之后采用十折交叉验证法来验证模型,并使用模型来预测未收集到方法执行时间的方法的数据传输量;由于对于没有收集到的方法的数据传输量对于迁移性能影响十分微小,因此对于没有收集到方法的数据传输量设置为0kb。
在本发明一实施例中,所述基于应用模型,提出了上下文模型帮助决策,通过适应度函数进行决策方案的评估和选择最优方案的具体过程如下:
计算迁移中对象obji响应时间是由对象obji在计算节点上执行的时间Te(objj)和其迁移到该节点上所消耗的网络传输时间Td(objj)决定,如下式所示:
T(obji)=Te(obji)+Td(obji)
每个对象迁移到一个节点上所消耗的网络传输时间Td(obji)由下式可以计算得到
其中,元素rttij表示在位置i情况下,移动设备与远程节点nj之间的网络往返时延,它是通过对客户端对收集到的历史数据RTTij进行平均得到的:
每个对象迁移到一个节点上所需要的执行时间Te(objj)由下式可以计算得到:
其中,元素vij表示在位置i情况下,移动设备与远程节点nj的网络传输速率,它是通过对客户端收集到的历史数据Vij进行平均得到的:
那么对于整个Android应用程序的的响应时间即为所有对象的响应时间之和,所以Android应用程序的的响应时间的适应度函数如下式所示:
将Android应用程序的对象调用图G=<OBJ,INVOKE>和上下文环境信息的网络拓扑图作为算法的输入;将生成所有的对象部署方案存入DEP集合,其中DEP=(dep(obj0),dep(obj2),...,dep(objn)),dep(obji)表示每个obji的部署节点,然后对DEP集合进行遍历,如果DEP的一组部署方案中不能满足通信或迁移的条件,则不考虑该组迁移方案,遍历下组部署方案;如果DEP的部一组署方案满足通信和迁移的条件,那么按照适应度函数公式来计算Tresponse,并比较是否比之前得到的(Tresponse)smallest时间更短,如果更短,则将这组部署方案覆盖(DEP)optimal,并更新(Tresponse)smallest;如果没有更短,则遍历下一组部署方案;最终得到迁移时间最优的部署方案(DEP)optimal和最短响应时间(Tresponse)smallest。
相较于现有技术,本发明具有以下有益效果:本发明方法基于代码分析技术得到的对象调用图和方法执行时间和数据传输量,计算每个迁移决策方案的响应时间,并得到最优部署方案,从而能够减少执行时间及能量消耗。
附图说明
图1为本发明方法流程图。
图2为一个简单的对象调用图示例。
具体实施方式
下面结合附图,对本发明的技术方案进行具体说明。
本发明提供了一种基于代码分析的Android计算迁移在线决策方法,首先,基于代码分析技术,对应用的类、方法、对象及其调用关系建模;其次,基于动态分析,对应用的方法执行时间和数据传输的应用模型建模;最后,基于应用模型,提出了上下文模型帮助决策,通过适应度函数进行决策方案的评估和选择最优方案。
以下为本发明的具体实现过程。
1、方法概览
如何根据应用程序的计算复杂度和耦合度不同和移动设备上下文信息的变化来动态选择迁移的计算节点。本申请提出了一个新的基于对象迁移的在线决策方法,它支持移动应用程序在移动边缘计算环境下的迁移决策方面具有良好的服务能力。如图1所示。
首先,为了使移动设备的上下文环境发生改变时,Android应用程序依然保持可用状态,并可以以动态方式在移动设备,移动边缘和云端之间迁移。本申请提出了一种新的对象代理机制来支持移动边缘计算环境下的自适应迁移。计算迁移被设计为远程创建,迁移和调用执行计算的对象
其次,决策模型被设计为根据移动设备上下文环境自动确定迁移方案,其中应用程序的不同部分可以在移动设备上执行,移动边缘和云。本申请使用代码分析技术抽取应用程序的对象关系调用图,并定义哪些对象是可迁移的。
然后,本申请引入信息模型来收集关于每个方法调用的平均数据流量的历史数据,以及它们在移动设备、云和每个移动边缘上的执行时间,对于没有收集到的方法的数据,本申请使用机器学习的方法进行预测,基于此本申请提出了一种算法来找到每个对象的最佳部署位置。
对于一个给定的客户端应用程序,本申请首先对它的源程序代码中的所有类进行预处理,即当发现有对象被创建时,就记录当前创建的对象与创建对象的位置。预处理完就进行对象的转换,这步需要用到代理模式,同步构造一个与其等价的代理对象,可为目标对象提供另外的访问方式,即通过代理对象访问目标对象。最后,获取运行时的信息。通过代理模式,为所有运行时对象创建代理类。拦截器会拦截所有运行时使用的类,然后通过一些记录调用路径的函数及数据结构来确定对象间的关系,并记录下相关信息,例如调用方法,输入参数,输出结果等等。通过上述步骤就可以在不改变软件功能和外部可见性的情况下得到系统运行时的软件体系结构。
2、设计模式
2.1、类和方法建模
在对象调用图中,顶点是由对象的集合OBJ组成,而每个对象定义为obji=<objectID,Ct,Mrs>,所以本申请需要通过静态代码分析获得每个对象所属的类Ct和创建该对象的方法Mrs。本文中定义Android应用程序代码的类的集合和每个类中所有方法的集合。
定义4-1.类的集合定义为C={C0,C1,C2,...,Ci},其中Ci表示类名,C表示Android应用程序中所有类名的集合
定义4-2.方法集合定义为Mi={Mi0,Mi1,...,Mij},其中Mij表示Ci的Mj方法,Mi集合表示Ci中所有方法的方法名的集合。
本申请使用Soot工具对Android应用程序代码进行分析可以直接获得类的集合和所有类的方法的集合,此外,本申请还对每个函数方法体进行了代码分析,得到了函数方法体的五个代码特征,如定义4-3。
定义4-3.函数Mij的集合由其方法体的五个特征组成,每个函数方法体的特征为Mij=<blockDepth,percentBranchStatements,complexity,statements,calls>。
定义4-3中的blockDepth表示函数深度,函数深度指示函数中分支嵌套的层数。percentBranchStatements表示分支语句比例,该值表示分支语句占语句数目的比例,这里的“分支语句”指的是使程序不顺序执行的语句,包括if、else、for、while和switch。complexity表示方法的圈复杂度,圈复杂度指示一个函数可执行路径的数目,其计算公式如公式(4-1)所示,e为控制流图的边的数量,n为控制流图的节点数。statement表示方法的语句数,calls表示方法内部调用的次数,使用Soot工具可以直接得到以上特征参数。
complexity=e-n+2 (4-1)
定义4-4.类方法之间的关系为
表示Mij方法的函数体内调用了Mnm的次数为callTime,使用hashmap的key为Mij@Mnm,value为callTime,如果key相同则callTime自加1,从而得到callTime,定义Mnm是Mij的后继,记所有Mnm组成了Mij的后继集合Post(Mij)。
2.2、对象和调用建模
对得到整个应用程序的对象调用图,对象集合,对象之间的调用关系及次数。首先本申请定义对象调用图的节点是对象的集合,节点与节点之间的边是对象与对象之间的调用关系。
定义4-5.对象调用图定义为G=<OBJ,INVOKE>。
OBJ表示对象的集合,表示为OBJ={obj0,obj1,...,obji},每个对象表示为obji=<objectId,Ct,Mrs>,其中objectId是该对象唯一的标识符,Ct表示该对象所属的类,Mrs表示创建该对象的方法;INVOKE表示对象之间调用关系的集合,定义为INVOKE的元素,表示对象obji的Mrs方法中调用了objj的Mpq方法,invokeTimes表示obji执行Mrs方法时,内部调用了objj的Mpq方法的次数。
基于以上这些定义,本申请使用Soot工具将Android应用程序源码编译为Jimple中间表达式,然后本申请对编译后的语言使用算法1进行分析,得到Android应用程序的对象调用图。整个算法流程主要包括三大步骤。
步骤S1:遍历Urs集合并识别中的中是否含有关键字,其中,Urs为Mrs的语句集合,为Mrs的第k句代码;
步骤S2:根据步骤S1所遍历的结果来更新OBJ和INVOKE这两个集合;
步骤S3:如果检测到方法中有调用方法,则跳转入被调用的方法,执行步骤S1。
算法1具体实现如下:
首先本申请将Android应用程序的Jimple中间表达式作为整个程序的输入,并遍历查找到mainactivity方法,并将mainactivity方法初始标记为Mrs,Urs为Mrs的语句集合,为Mrs的第k句代码。本申请先生成两个空集合,分别为OBJ和INVOKE,然后将方法Mrs的方法名作为generateG函数的参数,之后本申请在generateG函数内对方法Mrs的语句集合Urs进行遍历,如果语句中同时存在“invoke”和“<init>”这两个关键词,则说明这个语句是一个生成对象的语句,本申请将根据语句中的其他信息来获取生成对象的信息,并生成对象的信息存入对象obji中,并将obji对象加入对象集合OBJ。如果语句中存在“invoke”关键词但不存在“<init>”这个关键词,则说明这个语句是调用语句,那么本申请将根据语句中其他信息来获取这个语句中调用外部函数的对象名objj和方法名Mpq,从而生成对象之间的调用关系并将加入INVOKE集合,因为有调用外部函数,所以本申请采用深度优先遍历的算法,将外部调用函数的方法名Mpq作为generateG函数的参数继续遍历。最终生成整个Android应用程序的对象调用图G=<OBJ,INVOKE>。如图2,为本申请举的一个简单的对象调用图的例子。
3、基于动态分析的应用建模
由于静态代码分析是不执行实际程序的,所以对于分析代码的执行执行的方法间的数据传输量问题是无能为力的。程序的动态分析是相对于静态代码分析的另外一种的程序分析策略,它是需要实际执行程序的。动态代码分析相对于静态代码分析的优势是能够检测静态分析中无法检测的依赖项,例:使用反射、依赖注入、多态的动态依赖关系和可以收集时间信息。本申请使用动态代码分析技术,在Android应用程序代码中进行程序插桩,以此来收集每个对象调用某个方法时,这个方法的执行时间。
3.1、方法执行时间直接计算
根据这些建模的信息来建立起目标时间评估函数,所以需要得知每个方法的执行时间和方法间的数据传输量,但由于之前的静态数据无法获取每个方法的执行时间和数据传输量,因此提出动态代码分析技术,在运行时收集方法间的数据传输量和方法执行时间,并对其进行建模。本申请首先对Android应用程序代码进行程序插桩,并在程序历史执行过程中,记录运行时创建的对象,对象调用方法的执行时间以及每一个方法除去内部调用的执行时间以及每一次方法执行过程的数据量。
定义4-6.每个方法执行时间为
表示为方法Mij在计算节点nk上的执行时间和数据传输量的集合,其中SdataSizeij表示Mij的数据传输量,Etime为执行时间,nk为计算节点。
因为本文中的迁移最小单位时对象,所以本申请通过动态代码分析收集到的方法执行时间并不是真正的这个对象的执行时间,方法中可能会有其他对象调用方法,而是要除去对象所执行方法中除去外部调用的时间才是这个对象调用方法的执行时间。
定义4-7.方法除去外部调用的时间为
表示为方法Mij在计算节点nk上的除去外部调用的执行时间和数据传输量的集合,其中SdataSizeij表示Mij的数据传输量,Stime为执行时间,nk为计算节点。
因为方法除去外部调用的时间无法直接获得,根据方法除去外部调用的时间等于每个方法的执行时间减去所有外部调用方法的时间的关系,所以本申请根据类之间的关系得出公式(4-2)。公式(4-2)的含义即方法Mij在上节点nk除去方法外部调用的时间为方法Mij在上节点nk的全部执行时间减去方法Mij后继集合中所有方法在节点nk上的全部执行时间乘以其被调用次数的时间。
3.2、方法执行时间间接评估
由于动态代码分析技术的缺点是不能保证被分析的源代码的全部覆盖率,所以本申请在客户端收集的历史数据中存在没有收集到的部分方法的数据。因为机器学习是通过训练数据学习一些模型,然后进行预测,并被广泛应用于解决数据预测问题,且随机森林算法已经被证明能够更加有效地处理不平衡数据问题,并大大提高鲁棒性,所以本文采用weka中随机森林的机器学习算法对在动态代码分析中未收集到方法的数据进行回归预测。本申请根据定义4-3可以收集到执行时间的方法的blockDepth、percentBranchStatements、complexity、statements、call信息为特征属性,如下公式(4-3)。其执行时间为预测属性组成训练集,训练集如表4-1,之后采用十折交叉验证法来验证模型,并使用模型来预测未收集到执行时间的方法的执行时间。
表4-1时间训练集表
对于没有检测到方法的数据传输量,以方法的方法名,并根据定义4-3可以收集到已收集到数据传输量方法的blockDepth、percentBranchStatements、complexity、statements、calls信息为特征属性,并使用代码分析技术收集所有方法的参数类型,并将所有参数类型进行字符串排序后每一种参数类型作为一个参数特征,方法中含有这个参数类型则加1。如下公式(4-4)所示,其数据传输量为预测属性组成训练集合,其训练集如表4-2。之后采用十折交叉验证法来验证模型,并使用模型来预测未收集到执行时间的方法的数据传输量。
表4-2数据传输量训练集表
通过对应用的代码实际分析得知,对于动态测试没有收集到的方法数据传输量通常都是一些不经常执行的分支,这些方法的数据传输量都是对象头和基本的参数类型,所以传输量都是几十字节。然而这几十字节的数据传输量对于的迁移性能影响十分微小,所以在本文实验中,对于没有收集到方法的数据传输量设置为0kb。
4、基本信息建模
为了能够根据移动设备上下文信息的变化而动态地选择最优的计算迁移部署方案,那么首先对一些能影响计算迁移性能的信息进行建模分析。本申请将介绍影响计算迁移的信息如何进行建模,以及如何利用这些信息模型来减少计算迁移的执行时间和网络传输时间从而提高计算迁移的性能。
计算迁移中对象obji响应时间是由对象obji在计算节点上执行的时间Te(objj)和其迁移到该节点上所消耗的网络传输时间Td(objj)决定,如公式(5-1)所示。表5-1中列出了一些会影响计算迁移响应时间的因素,如可迁移对象obji的集合,节点之间的网络传输速率,可迁移的服务器集合等等。为了预测每个对象的响应时间,以便于评估哪些对象迁移到哪些计算节点能得到最短响应时间,本申请建立了服务器时间模型,网络时间模型和网络连接模型三个信息模型。网络时间模型是用来计算在不同网络连接的情况下计算迁移所需的网络传输时间,服务器时间模型是用来计算不同对象在不同的服务器上执行的时间。接下来,将详细介绍服务器模型,网络时间模型和网络连接三个信息模型。
T(obji)=Te(obji)+Td(obji) (5-1)
表5-1响应时间的影响因子列表
4.1、网络连接模型
由于移动设备具有移动性,所以移动设备的网络连接质量也因为移动设备的位置变化而变化。影响网络连接质量的因素主要是有移动设备和移动边缘计算节点的数据传输速率和往返的网络时间延时。
设N={n1,n2,…,nh}表示设备,云和移动边缘,L={l1,l2,…,lm}表示位置集合。如公式(5-2)所示,网络传输速率矩阵V表示不同网络环境下,设备与远程节点之间的网络传输速率的平均,其中元素vij表示在位置i情况下,移动设备与远程节点nj的网络传输速率,它是通过对客户端收集到的历史数据Vij进行平均得到的,如公式(5-4)所示。如公式(5-3)所示,网络延时矩阵RTT表示不同网络情况下,设备与节点之间的往返时间的预估值,其中元素rttij表示在位置i情况下,移动设备与远程节点nj之间的网络往返时延,它是通过对客户端对收集到的历史数据RTTij进行平均得到的,如公式(5-5)所示。
4.2、网络时间模型
影响网络传输时间的因素主要有对象之间的数据传输量,移动设备和可迁移的计算节点之间网络间的数据传输率和网络往返延时时间这三个因素。对于不同的对象,在执行时,它们输入数据和输出数据时完全不同的。本申请获得了可迁移的对象集合为OBJ={obj0,obj1,...,obji},obji表示可迁移的对象,对象i与j的调用关系为其次,本申请从设备上下文中获得有关服务器和网络连接信息,计算节点集合表示为N={n1,n2,…,nh},表示为节点ni与节点nj之间的数据传输速率,表示为节点ni与节点nj之间的往返时间,每个方法在节点nk除去外部调用的时间
对于每个obji都有其部署节点dep(obji)因此对于应用的OBJ向量有其对应的DEP向量表示为DEP=(dep(obj0),dep(obj2),...,dep(objn)),记Td(obji)表示对象obji在节点dep(obji)上的网络传输时间,由公式(5-6)可计算。
这里,详细解释下公式(5-6)的含义,即遍历对象关系调用集合INVOKE,如果对象调用关系中的被调用对象objn为部署节点dep(obji)的对象obji时,那么对象obji的数据传输时间Td(obji)为被调用方法Mpq的数据量除以调用对象obji与调用对象objm之间的网络传输速率加上调用对象obji与调用对象objm之间的网络延时时间rtt之和乘以被调用方法Mpq被调用的次数。
4.3、服务器时间模型
由于在Android应用程序中,不同对象所处理的任务不一样,所以不同对象的计算复杂度是完全不同的,不同服务器的计算节点由于其硬件设施的不同,所以不同服务器的计算节点的处理能力也是不同的。本申请使用的是动态代码分析技术,在Android应用程序源码中进行代码插桩,以此来收集本申请的Android应用程序在不同计算节点上的不同对象所调用方法的执行时间,由于动态代码分析技术的缺点是不能保证被分析的源代码的全部覆盖率,所以对于没有收集到的方法的时间本申请采用机器学习的算法进行回归预测。
对于每个obji都有其部署节点dep(obji)因此对于应用的OBJ向量有其对应的DEP向量表示为DEP=(dep(obj0),dep(obj2),...,dep(objn)),记Te(obji)表示对象obji在节点dep(obji)上的网络传输时间,由公式(5-7)可计算。
遍历对象关系调用集合INVOKE,如果对象调用关系中的被调用对象objn为部署节点dep(obji)的对象obji时,那么对象obji的执行时间Te(obji)为被调用方法Mpq的时间乘以被调用方法Mpq被调用的次数。
5、选择算法
每个对象obji响应时间是由对象obji在计算节点上执行的时间Te(obji)和其迁移到该节点上所消耗的网络传输时间Td(obji)决定,如公式(5-1)所示,而每个对象迁移到某个节点上所消耗的网络传输时间Td(obji)由公式(5-3)可以计算得到,每个对象迁移到某个节点上所需要的执行时间由公式(5-2)可以计算得到。那么对于整个Android应用程序的的响应时间则为所有对象的响应时间之和,所以Android应用程序的的响应时间的适应度函数如公式(5-8)所示。
对于给定的Android应用程序,代码被静态地分析为对象图,执行时间由动态分析得到,并且通过估计模型给出适应度函数。算法2以适应度函数、应用程序对象调用图和移动设备上下文环境信息作为输入集,输出为最优DEP部署方案,算法2给出了该算法的伪代码。
算法2具体如下:
将Android应用程序的对象调用图G=<OBJ,INVOKE>和上下文环境信息的网络拓扑图作为算法的输入;将生成所有的对象部署方案存入DEP集合,其中DEP=(dep(obj0),dep(obj2),...,dep(objn)),dep(obji)表示每个obji的部署节点,然后对DEP集合进行遍历,如果DEP的一组部署方案中不能满足通信或迁移的条件,则不考虑该组迁移方案,遍历下组部署方案;如果DEP的部一组署方案满足通信和迁移的条件,那么按照适应度函数公式来计算Tresponse,并比较是否比之前得到的(Tresponse)smallest时间更短,如果更短,则将这组部署方案覆盖(DEP)optimal,并更新(Tresponse)smallest;如果没有更短,则遍历下一组部署方案;最终得到迁移时间最优的部署方案(DEP)optimal和最短响应时间(Tresponse)smallest。
以上是本发明的较佳实施例,凡依本发明技术方案所作的改变,所产生的功能作用未超出本发明技术方案的范围时,均属于本发明的保护范围。
Claims (5)
1.一种基于代码分析的Android计算迁移在线决策方法,其特征在于,首先,基于代码分析技术,对应用的类、方法、对象及其调用关系建模;其次,基于动态分析,对应用的方法执行时间和数据传输的应用模型建模;最后,基于应用模型,提出了上下文模型帮助决策,通过适应度函数进行决策方案的评估和选择最优方案。
2.根据权利要求1所述的基于代码分析的Android计算迁移在线决策方法,其特征在于,所述对应用的类、方法建模的具体过程如下:
在对象调用图中,顶点是由对象的集合OBJ组成,而每个对象定义为obji=<objectID,Ct,Mrs>,其中,objectId是对象唯一的标识符,Ct表示相应对象所属的类,Mrs表示创建相应对象的方法;通过静态代码分析获得每个对象所属的类Ct和创建相应对象的方法Mrs,Android应用程序代码的类的集合和每个类中所有方法的集合定义如下:
类的集合定义为C={C0,C1,C2,...,Ci},其中,Ci表示类名,C表示Android应用程序中所有类名的集合;
方法的集合定义为Mi={Mi0,Mi1,...,Mij},其中Mij表示Ci的Mj方法,Mi集合表示Ci中所有方法的方法名的集合;
采用Soot工具对Android应用程序代码进行分析可直接获得类的集合和所有类的方法的集合,此外,对每个函数方法体进行代码分析,得到函数方法体的五个代码特征,定义如下:
函数Mij的集合由其方法体的五个特征组成,每个函数方法体的特征为Mij=<blockDepth,percentBranchStatements,complexity,statements,calls>,blockDepth表示函数深度,函数深度指示函数中分支嵌套的层数;percentBranchStatements表示分支语句比例,该值表示分支语句占语句数目的比例,此处的分支语句指的是使程序不顺序执行的语句,包括if、else、for、while和switch;complexity表示方法的圈复杂度,圈复杂度指示一个函数可执行路径的数目,其计算公式为:complexity=e-n+2,e为控制流图的边的数量,n为控制流图的节点数;statement表示方法的语句数,calls表示方法内部调用的次数;
类方法之间的关系为
表示Mij方法的函数体内调用了Mnm的次数为callTime,使用hashmap的key为Mij@Mnm,value为callTime,如果key相同则callTime自加1,从而得到callTime,定义Mnm是Mij的后继,记所有Mnm组成了Mij的后继集合Post(Mij)。
3.根据权利要求2所述的基于代码分析的Android计算迁移在线决策方法,其特征在于,所述对应用的对象及其调用关系建模的具体过程如下:
首先定义对象调用图的节点是对象的集合,节点与节点之间的边是对象与对象之间的调用关系:
在对象调用图G=<OBJ,INVOKE>中,顶点是由对象的集合OBJ组成,OBJ={obj0,obj1,...,obji},而每个对象定义为obji=<objectID,Ct,Mrs>,其中,objectId是对象唯一的标识符,Ct表示相应对象所属的类,Mrs表示创建相应对象的方法;INVOKE表示对象之间调用关系的集合,定义为INVOKE的元素,表示对象obji的Mrs方法中调用了objj的Mpq方法,invokeTimes表示obji执行Mrs方法时,内部调用了objj的Mpq方法的次数;
基于对象调用图定义,使用Soot工具将Android应用程序源码编译为Jimple中间表达式,然后对编译后的语言使用如下算法进行分析,得到Android应用程序的对象调用图;具体采用算法流程如下:
步骤S1:遍历Urs集合并识别中的中是否含有关键字,其中,Urs为Mrs的语句集合,为Mrs的第k句代码;
步骤S2:根据步骤S1所遍历的结果来更新OBJ和INVOKE这两个集合;
步骤S3:如果检测到方法中有调用方法,则跳转入被调用的方法,执行步骤S1。
4.根据权利要求3所述的基于代码分析的Android计算迁移在线决策方法,其特征在于,所述对应用的方法执行时间和数据传输的应用模型建模的具体过程如下:
(1)方法执行时间直接计算:
首先使用动态代码分析技术对Android应用程序代码进行程序插桩,并在程序历史执行过程中,记录运行时创建的对象,对象调用方法的执行时间以及每一个方法除去内部调用的执行时间以及每一次方法执行过程的数据量,如下所示:
每个方法执行时间为
表示为方法Mij在计算节点nk上的执行时间和数据传输量的集合,其中EdataSizeij表示Mij的数据传输量,Etime为执行时间;
方法除去外部调用的时间为
表示为方法Mij在计算节点nk上的除去外部调用的执行时间和数据传输量的集合,其中SdataSizeij表示Mij的数据传输量,Stime为执行时间;
由于方法除去外部调用的时间无法直接获得,根据方法除去外部调用的时间等于每个方法的执行时间减去所有外部调用方法的时间的关系,所以根据类之间的关系得出下式;
上式的含义即方法Mij在计算节点nk除去方法外部调用的时间,为方法Mij在计算节点nk的全部执行时间减去方法Mij后继集合中所有方法在计算节点nk上的全部执行时间乘以其被调用次数的时间;
(2)方法执行时间间接评估:
由于动态代码分析技术的缺点是不能保证被分析的源代码的全部覆盖率,因此采用随机森林的方法对在动态代码分析中未收集到方法的数据进行回归预测;定义可以收集到方法执行时间的方法的blockDepth、percentBranchStatements、complexity、statements、call信息为特征属性,如下式所示:
Time=P(X);
X=(blockDepth,percentBranchStatement,complexity,statements,calls)
其方法执行时间为预测属性组成训练集,之后采用十折交叉验证法来验证模型,并使用模型来预测未收集到方法执行时间;
对于没有检测到方法的数据传输量,以方法的方法名MethodName,根据可以收集到已收集到数据传输量方法的blockDepth、percentBranchStatements、complexity、statements、calls信息为特征属性,并使用代码分析技术收集所有方法的参数类型,将所有参数类型进行字符串排序后每一种参数类型作为一个参数特征,方法中含有这个参数类型则加1,如下式所示:
Data=P(X);
X=(MethodName,blockDepth,percentBranchStatem ent,complexity,statements,calls,Parm1,Parm2...ParmN);
MethodName表示方法的方法名,Parm1,Parm2...ParmN代表参数;
其数据传输量为预测属性组成训练集合,之后采用十折交叉验证法来验证模型,并使用模型来预测未收集到方法执行时间的方法的数据传输量;由于对于没有收集到的方法的数据传输量对于迁移性能影响十分微小,因此对于没有收集到方法的数据传输量设置为0kb。
5.根据权利要求4所述的基于代码分析的Android计算迁移在线决策方法,其特征在于,所述基于应用模型,提出了上下文模型帮助决策,通过适应度函数进行决策方案的评估和选择最优方案的具体过程如下:
计算迁移中对象obji响应时间是由对象obji在计算节点上执行的时间Te(objj)和其迁移到该节点上所消耗的网络传输时间Td(objj)决定,如下式所示:
T(obji)=Te(obji)+Td(obji)
每个对象迁移到一个节点上所消耗的网络传输时间Td(obji)由下式可以计算得到
其中,元素rttij表示在位置i情况下,移动设备与远程节点nj之间的网络往返时延,它是通过对客户端对收集到的历史数据RTTij进行平均得到的:
每个对象迁移到一个节点上所需要的执行时间Te(objj)由下式可以计算得到:
其中,元素vij表示在位置i情况下,移动设备与远程节点nj的网络传输速率,它是通过对客户端收集到的历史数据Vij进行平均得到的:
那么对于整个Android应用程序的的响应时间即为所有对象的响应时间之和,所以Android应用程序的的响应时间的适应度函数如下式所示:
将Android应用程序的对象调用图G=<OBJ,INVOKE>和上下文环境信息的网络拓扑图作为算法的输入;将生成所有的对象部署方案存入DEP集合,其中DEP=(dep(obj0),dep(obj2),...,dep(objn)),dep(obji)表示每个obji的部署节点,然后对DEP集合进行遍历,如果DEP的一组部署方案中不能满足通信或迁移的条件,则不考虑该组迁移方案,遍历下组部署方案;如果DEP的部一组署方案满足通信和迁移的条件,那么按照适应度函数公式来计算Tresponse,并比较是否比之前得到的(Tresponse)smallest时间更短,如果更短,则将这组部署方案覆盖(DEP)optimal,并更新(Tresponse)smallest;如果没有更短,则遍历下一组部署方案;最终得到迁移时间最优的部署方案(DEP)optimal和最短响应时间(Tresponse)smallest。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910405581.XA CN110109702B (zh) | 2019-05-16 | 2019-05-16 | 基于代码分析的Android计算迁移在线决策方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910405581.XA CN110109702B (zh) | 2019-05-16 | 2019-05-16 | 基于代码分析的Android计算迁移在线决策方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110109702A true CN110109702A (zh) | 2019-08-09 |
CN110109702B CN110109702B (zh) | 2021-07-13 |
Family
ID=67490424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910405581.XA Expired - Fee Related CN110109702B (zh) | 2019-05-16 | 2019-05-16 | 基于代码分析的Android计算迁移在线决策方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110109702B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782266A (zh) * | 2020-06-28 | 2020-10-16 | 中国工商银行股份有限公司 | 软件性能基准确定方法及装置 |
CN112328298A (zh) * | 2020-09-29 | 2021-02-05 | 北京迈格威科技有限公司 | 移动端的代码库裁剪方法及装置 |
CN112650505A (zh) * | 2020-12-21 | 2021-04-13 | 四川长虹电器股份有限公司 | 一种web项目生成部署配置方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105812461A (zh) * | 2016-03-09 | 2016-07-27 | 福州大学 | 一种移动云环境情景感知计算迁移方法 |
US20160342395A1 (en) * | 2015-05-20 | 2016-11-24 | Ab Initio Technology Llc | Visual program specification and compilation of graph-based computation |
CN107133101A (zh) * | 2017-04-27 | 2017-09-05 | 福州大学 | IoT系统中的自适应计算迁移中间件 |
CN107148620A (zh) * | 2014-10-10 | 2017-09-08 | 三星电子株式会社 | 用于迁移虚拟机以改善移动用户体验的方法和装置 |
CN108628600A (zh) * | 2018-05-08 | 2018-10-09 | 北京理工大学 | 基于控制流分析的软件动态行为建模方法和装置 |
CN108762749A (zh) * | 2018-05-24 | 2018-11-06 | 福州大学 | 基于代码分析的系统对象图自动生成方法 |
CN109376012A (zh) * | 2018-10-10 | 2019-02-22 | 电子科技大学 | 一种针对异构环境的基于Spark的自适应任务调度方法 |
-
2019
- 2019-05-16 CN CN201910405581.XA patent/CN110109702B/zh not_active Expired - Fee Related
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107148620A (zh) * | 2014-10-10 | 2017-09-08 | 三星电子株式会社 | 用于迁移虚拟机以改善移动用户体验的方法和装置 |
US20160342395A1 (en) * | 2015-05-20 | 2016-11-24 | Ab Initio Technology Llc | Visual program specification and compilation of graph-based computation |
CN105812461A (zh) * | 2016-03-09 | 2016-07-27 | 福州大学 | 一种移动云环境情景感知计算迁移方法 |
CN107133101A (zh) * | 2017-04-27 | 2017-09-05 | 福州大学 | IoT系统中的自适应计算迁移中间件 |
CN108628600A (zh) * | 2018-05-08 | 2018-10-09 | 北京理工大学 | 基于控制流分析的软件动态行为建模方法和装置 |
CN108762749A (zh) * | 2018-05-24 | 2018-11-06 | 福州大学 | 基于代码分析的系统对象图自动生成方法 |
CN109376012A (zh) * | 2018-10-10 | 2019-02-22 | 电子科技大学 | 一种针对异构环境的基于Spark的自适应任务调度方法 |
Non-Patent Citations (1)
Title |
---|
谢岩松等: "基于函数近似的知识迁移", 《软件》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782266A (zh) * | 2020-06-28 | 2020-10-16 | 中国工商银行股份有限公司 | 软件性能基准确定方法及装置 |
CN111782266B (zh) * | 2020-06-28 | 2023-08-25 | 中国工商银行股份有限公司 | 软件性能基准确定方法及装置 |
CN112328298A (zh) * | 2020-09-29 | 2021-02-05 | 北京迈格威科技有限公司 | 移动端的代码库裁剪方法及装置 |
CN112650505A (zh) * | 2020-12-21 | 2021-04-13 | 四川长虹电器股份有限公司 | 一种web项目生成部署配置方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110109702B (zh) | 2021-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106970788B (zh) | 一种基于时态的对象依赖关系发现方法和系统 | |
CN110109702A (zh) | 基于代码分析的Android计算迁移在线决策方法 | |
Lavrov et al. | Mathematical models for reducing functional networks to ensure the reliability and cybersecurity of ergatic control systems | |
Welsh et al. | Self-explanation in adaptive systems based on runtime goal-based models | |
CN110110529B (zh) | 一种基于复杂网络的软件网络关键节点挖掘方法 | |
CN111143097A (zh) | 面向gnss定位服务的故障治理系统和方法 | |
Koriem | A fuzzy Petri net tool for modeling and verification of knowledge-based systems | |
CN111178545B (zh) | 一种动态强化学习决策训练系统 | |
Gore et al. | Augmenting bottom-up metamodels with predicates | |
CN110866602A (zh) | 一种集成多任务模型的方法和装置 | |
Nassif et al. | A regression model with mamdani fuzzy inference system for early software effort estimation based on use case diagrams | |
Izadkhah et al. | E-cdgm: an evolutionary call-dependency graph modularization approach for software systems | |
Fishwick | FUZZY SIMULATION: SPECIFYING AND IDENTIFYING QUALITATIVE MODELS∗ | |
Balbo et al. | Understanding parallel program behavior through petri net models | |
Calinescu et al. | Using runtime quantitative verification to provide assurance evidence for self-adaptive software: advances, applications and research challenges | |
Tappler et al. | Automata learning meets shielding | |
Khoshgoftaar et al. | Attribute selection using rough sets in software quality classification | |
Mulder et al. | Agent Modelling in METATEM and DESIRE | |
CN111881620A (zh) | 一种基于强化学习算法和gan模型的用户软件行为模拟系统及其工作方法 | |
Fortino et al. | A Discrete-Event Simulation Framework for the Validation of Agent-based and Multi-Agent Systems. | |
CN116578336A (zh) | 一种基于抄袭者-检测器对抗的软件克隆检测方法 | |
CN114611990A (zh) | 一种网络信息体系要素体系贡献率评估方法和装置 | |
Carreno et al. | Explaining temporal plans with incomplete knowledge and sensing information | |
Younes | Current tools for assisting intelligent agents in real-time decision making | |
CN112231175B (zh) | 一种基于动态仿真的软件状态监控点选择方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20210713 |