【技术实现步骤摘要】
一种负载感知的软件配置参数调整方法
[0001]本专利技术涉及大型软件中的配置约束提取和配置故障预防领域,具体涉及一种负载感知的软件配置参数调整方法。
技术介绍
[0002]随着社会的不断进步,软件系统已经在各个领域得到广泛应用,在现代社会中扮演着举足轻重的角色,发挥了重要的作用。配置作为软件的重要组成部分,在提升软件功能多样性、可定制性和适应性方面发挥了重要的作用。软件用户可以利用配置选择不同实现的库、策略、规则等定制不同的功能,并有效控制软件的资源使用从而适应不同环境与工作负载,满足用户的不同需求。目前,为适应负载环境与应用需求变化,大规模软件系统均向高可配置化方向发展,从而提升软件服务的可靠性和可用性。
[0003]然而,随着软件规模的持续增长和运行环境的日益复杂,软件用户在体验配置带来便利性的同时,也经历了相应的配置故障的影响,导致软件系统服务失效频发,逐渐引起了业界的广泛关注。其中,负载敏感的配置故障,即软件在特定负载下由合法配置取值导致的配置故障,已占据了软件配置故障的很大比例。Zuoning Yin等人在面向四款常用开源基础软件和一款商用基础软件配置故障存在现状的调研中发现,46.3%~61.9%的案例中相关配置参数取值均满足对应合法取值范围约束,但仍会导致软件系统出现配置故障。Tianyin Xu等人也通过调研发现,在三款开源软件和一款商用软件中,高达53.3%的配置故障是由与运行时环境和负载相关的配置参数取值不当导致的。
[0004]目前,现有配置参数调整技术重点关注于面向配置的性能 ...
【技术保护点】
【技术特征摘要】
1.一种负载感知的软件配置参数调整方法,其特征在于包括以下步骤:第一步,构建配置参数调整系统,配置参数调整系统由配置相关分支交互分析模块和动态监控模块组成;配置相关分支交互分析模块从文件系统读入软件源码F和配置信息文件,在软件源码F中识别定位配置相关分支交互,并进行代码插桩,将插桩后的软件源码F
‘
输出到文件系统中;然后用户对F
‘
进行编译、链接,得到可执行软件F“;动态监控模块监控F
‘’
运行时在文件系统中的输出,提取并输出当前负载影响下的配置约束信息,并在F“负载产生变化导致当前配置取值不满足配置约束信息时,根据相关配置约束信息自动调整配置参数取值;第二步,配置相关分支交互分析模块从文件系统读取软件源码F和配置信息文件,从软件源码F中定位识别配置相关分支交互代码段,并在配置相关分支交互代码段位置插桩程序探针,将插桩后的软件源码F
‘
输出到文件系统中,方法是:2.1配置相关分支交互分析模块从文件系统读入存储配置信息文件,配置信息文件存储有<配置参数名称,配置变量名称>二元对列表,从配置信息文件得到软件源码F中所有的配置参数名称和对应配置变量二元对集合CS,CS={<cn1,cv1>,<cn2,cv2>,...,<cn
n
,cv
n
>,...,<cn
N
,cv
N
>},其中cn
n
为CS中第n个配置参数名称,cv
n
为CS中cn
n
在软件源码中对应的配置变量名称,N为软件源码F中配置参数总数,1≤n≤N;2.2使用LLVM编译器框架的Clang前端解析软件源码F,生成软件源码F对应的抽象语法树AST
root
,AST
root
中的每个节点表示软件源码F中的一种结构,且不同结构之间同样以树的结构表示相应从属关系;2.3在抽象语法树AST
root
中定位与cv1,cv2,...,cv
n
,...,cv
N
相关的分支交互,具体方法如下:2.3.1在抽象语法树AST
root
中使用Clang提供的相关遍历接口遍历AST
root
,定位使用cv1,cv2,...,cv
n
,...,cv
N
的代码位置,并加入到配置变量使用位置集合CL1,CL2,...,CL
n
,...,CL
N
中,CL
n
表示AST
root
中使用cv
n
的代码位置,CL
n
={cl
n1
,cl
n2
,...,cl
nj
,...,cl
nJ
},其中cl
nj
表示cv
n
在AST
root
中第j次被使用的位置,J为cv
n
在AST
root
中使用位置的总数,1≤j≤J;2.3.2初始化变量n=1;2.3.3初始化变量j=1,初始化cv
n
的相关的候选分支交互集合Cand_BI
n
={},初始化cv
n
相关的备用配置变量集合Alternative_CV
n
={};2.3.4检查cv
n
和cl
nj
是否满足以下三种场景中的使用情况,方法是:2.3.4.1若cv
n
直接在软件源码F的分支语句br的分支条件中被使用,即作为分支判断条件的一部分进行运算后控制程序执行的控制流向,则将br加入到cv
n
的相关的候选分支交互集合Cand_BI
n
中,转2.3.5,否则转2.3.4.2;2.3.4.2若cv
n
被赋值给其他程序变量lv,且lv直接在分支语句br的分支条件中被使用,则将br加入到cv
n
的相关的候选分支交互集合Cand_BI
n
中,并将lv加入到cv
n
相关的备用配置变量集合Alternative_CV
n
中,转2.3.5;否则转2.3.4.3;2.3.4.3若函数func共有I个参数,I≥1,且cv
n
被函数func作为第i个参数使用,1≤i≤I,且在函数func实现中,函数func对应的第i个形参param
i
直接在分支语句br的分支条件中被使用,则将br加入到cv
n
的相关的候选分支交互集合Cand_BI
n
中,并将param
i
加入到cv
n
相关的备用配置变量集合Alternative_CV
n
中,转2.3.5;否则直接转2.3.5;2.3.5令j=j+1,若j≤J,转2.3.4;否则得到cv
n
相关的候选分支交互集合Cand_BI
n
,Cand_BI
n
={cand_bi
n1
,cand_bi
n2
,..,cand_bi
nk
,...,cand_bi
nK
},其中cand_bi
nk
为Cand_BI
n
集合中cv
n
的第k个候选分支交互,K为Cand_BI
n
中cv
n
的候选分支交互总数,1≤k≤K,转2.3.6;2.3.6对cv
n
相关的候选分支交互集合Cand_BI
n
中相关分支语句的分支条件和分支处理类型进行解析和识别,得到五元组<cn
n
,rcv
n
,ps
nk
,op
nk
,loc
nk
>,rcv
n
为配置变量cv
n
在该位置的取值、ps
nk
为与配置变量cv
n
交互的程序状态取值、op
nk
为与配置变量cv
n
交互的对应操作符,loc
nk
为compare_condition所在分支语句代码位置,compare_condition为包含cv
n
或包含cv
n
在对应位置的备用配置变量acv的叶子节点中的逻辑表达式;依照五元组<cn
n
,rcv
n
,ps
nk
,op
nk
,loc
nk
>信息在软件源码AST
root
的loc
nk
位置进行插桩,插桩代码段功能是在软件源码F运行时记录cn
n
、rcv
n
、ps
nk
、op
nk
四类信息并输出到文件系统中,记录插桩在软件源码F中的位置;2.3.7令n=n+1,若n≤N,转2.3.3;否则转2.4;2.4对软件源码F插桩完成,向文件系统输出插桩后的软件源码F
‘
;第三步,人工对F
‘
进行编译、链接,得到可执行软件F“,并运行软件F“;第四步,动态监控模块监控F“在文件系统中的输出,提取当前负载影响下的配置约束信息,并在F“中配置取值不满足约束条件时,根据相关配置约束信息自动调整配置参数取值,方法是:4.1动态监控模块监控F“一段时间T内在文件系统中的输出;4.2初始化变量n=1;4.3动态监控模块检查时间T内cn
n
相关的所有监控信息序列<rcv
n
,ps
n1
,op
n1
,loc
n1
>,<rcv
n
,ps
n2
,op
n2
,loc
n2
>,...,<rcv
n
,ps
ns
,op
ns
,loc
ns
>,...,<rcv
n
,ps
nS
,op
nS
,loc
nS
>中配置变量取值、与配置变量交互的程序状态取值是否满足配置变量交互的对应操作符描述的大小关系,其中S为T时间内F“输出的与cn
n
相关的监控信息总数量,<rcv
n
,ps
ns
,op
ns
,loc
ns
>为其中第s次监控信息,1≤s≤S;若S个监控信息均满足,则通过检查,转4.4;若S个监控信息中存在不满足的监控信息,则使用最小程序状态阈值min_threshold记录所有不满足的监控信息中与配置变量交互的程序状态取值的最小值,使用最大程序状态阈值max_threshold记录所有不满足的监控信息中与配置变量交互的程序状态取值的最大值,转4.4;4.4动态监控模块结合监控信息序列<rcv
n
,ps
n1
,op
n1
【专利技术属性】
技术研发人员:李姗姗,周书林,郑思,徐尔茨,马俊,李小玲,贾周阳,徐如林,黄响兵,周海芳,廖湘科,
申请(专利权)人:中国人民解放军国防科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。