一种负载感知的软件配置参数调整方法技术

技术编号:36212536 阅读:13 留言:0更新日期:2023-01-04 12:08
本发明专利技术公开了一种负载感知的软件配置参数调整方法,目的是解决目前无法对软件配置参数进行自动调整以应对负载敏感的配置故障的问题。技术方案为:构建由配置相关分支交互分析模块和动态监控模块构成的配置参数调整系统;配置相关分支交互分析模块基于静态程序分析方法定位软件源码中配置相关的分支交互代码段,实现代码插桩;软件运行时,动态监控模块自动提取相关负载影响下配置参数所需满足的约束信息,并在软件负载产生变化时,根据配置约束信息自动调整配置参数取值,从而避免负载敏感配置故障。采用本发明专利技术可有效获得负载敏感的配置约束信息,帮助用户自动调整配置参数取值从而满足变化负载的需求,可以避免负载敏感的配置故障。的配置故障。的配置故障。

【技术实现步骤摘要】
一种负载感知的软件配置参数调整方法


[0001]本专利技术涉及大型软件中的配置约束提取和配置故障预防领域,具体涉及一种负载感知的软件配置参数调整方法。

技术介绍

[0002]随着社会的不断进步,软件系统已经在各个领域得到广泛应用,在现代社会中扮演着举足轻重的角色,发挥了重要的作用。配置作为软件的重要组成部分,在提升软件功能多样性、可定制性和适应性方面发挥了重要的作用。软件用户可以利用配置选择不同实现的库、策略、规则等定制不同的功能,并有效控制软件的资源使用从而适应不同环境与工作负载,满足用户的不同需求。目前,为适应负载环境与应用需求变化,大规模软件系统均向高可配置化方向发展,从而提升软件服务的可靠性和可用性。
[0003]然而,随着软件规模的持续增长和运行环境的日益复杂,软件用户在体验配置带来便利性的同时,也经历了相应的配置故障的影响,导致软件系统服务失效频发,逐渐引起了业界的广泛关注。其中,负载敏感的配置故障,即软件在特定负载下由合法配置取值导致的配置故障,已占据了软件配置故障的很大比例。Zuoning Yin等人在面向四款常用开源基础软件和一款商用基础软件配置故障存在现状的调研中发现,46.3%~61.9%的案例中相关配置参数取值均满足对应合法取值范围约束,但仍会导致软件系统出现配置故障。Tianyin Xu等人也通过调研发现,在三款开源软件和一款商用软件中,高达53.3%的配置故障是由与运行时环境和负载相关的配置参数取值不当导致的。
[0004]目前,现有配置参数调整技术重点关注于面向配置的性能调优,以Shu Wang等人在ASPLOS2018发表的“Understanding and auto

adjusting performance

sensitive configurations(理解并自动调整性能敏感配置参数)”和Miguel Velez等人在ICSE2021发表的“White

box analysis over machine learning:Modeling performance of configurable systems(基于白盒分析和机器学习的可配置软件性能模型构建研究)”为代表,主要通过搜索或者构建描述配置参数取值与软件性能表现关系模型的方法,在软件配置参数的巨大取值空间中快速寻找使得软件性能表现最优的配置参数取值组合,从而调整对应配置参数取值以提升软件性能。然而上述方法均要求预先提供配置参数的合法取值范围,而现有获取配置参数取值范围的方法主要包括两类工作。第一类工作以Tianyin Xu等人在SOSP2013发表的“Do Not Blame Users for Misconfigurations(不要因为配置故障而责备用户)”为代表,主要通过静态分析技术从软件源码中提取配置项约束信息,从而指导用户在合法范围内设置配置项取值,预防因人为因素导致的配置故障。此类工作主要基于静态分析实现,并未考虑软件负载对于配置约束的影响,因此可能导致软件在配置参数调整过程中产生负载敏感的配置故障。第二类工作,以Xudong Sun等人在OSDI2020发表的“Testing Configuration Changes in Context to Prevent Production Failures(在上下文中测试配置修改从而预防生产故障)”为代表,主要通过充分利用软件系统已有测试用例提前检测错误的配置修改,以避免生产环境中的配置故障。然而,此类工作目前仅能模拟
简单的运行上下文环境,无法真实模拟软件系统在生产环境中所面临的多样负载和复杂上下文环境,对于负载敏感的配置故障预防能力同样有限。
[0005]综上所述,如何对负载敏感的软件配置参数进行自动调整,帮助用户有效应对负载敏感的配置故障,提升软件的可靠性,是本领域技术人员正在探讨的热点问题。

技术实现思路

[0006]本专利技术要解决的技术问题是提供一种负载感知的软件配置参数调整方法,解决现有软件配置参数调整方法中未考虑负载对配置参数约束影响,导致无法对软件配置参数进行自动调整,无法应对负载敏感的配置故障,导致软件可靠性不高的问题。
[0007]本专利技术通过向软件源码中配置相关分支交互代码段(即配置相关程序变量(简称为配置变量)与其他程序变量在分支语句中产生交互从而影响软件运行时行为的代码段)进行代码插桩,从而在软件运行时有效监控程序相关状态,提取负载敏感配置约束,并根据负载敏感配置约束调整配置取值以预防负载敏感的配置故障,及时恢复软件正常运行。
[0008]为解决上述技术问题,本专利技术的技术方案为:首先构建由配置相关分支交互分析模块和动态监控模块构成的配置参数调整系统;然后,配置相关分支交互分析模块读入软件源码和<配置参数名称,配置变量名称>二元对文件,基于静态程序分析方法定位软件源码中配置相关的分支交互代码段,实现代码插桩;当软件运行时,动态监控模块不断读取插桩代码在运行时的输出文件内容,自动提取相关负载影响下配置参数所需满足的约束信息,当软件负载产生变化时,根据配置约束信息自动调整配置参数取值,从而避免负载敏感配置故障。
[0009]本专利技术包括以下步骤:
[0010]第一步,构建配置参数调整系统,配置参数调整系统由配置相关分支交互分析模块和动态监控模块组成。配置相关分支交互分析模块从文件系统读入软件源码F和配置信息文件(存储有<配置参数名称,配置变量名称>二元对列表),在软件源码F中识别定位配置相关分支交互,并进行代码插桩,将插桩后的软件源码F

输出到文件系统中;然后用户对F

进行编译、链接,得到可执行软件F“;动态监控模块监控F

'运行时在文件系统中的输出,提取并输出当前负载影响下的配置约束信息,并在F“负载产生变化导致当前配置取值不满足配置约束信息时,根据相关配置约束信息自动调整配置参数取值。
[0011]第二步,配置相关分支交互分析模块从文件系统读取软件源码F和配置信息文件,从软件源码F中定位识别配置相关分支交互代码段,并在配置相关分支交互代码段位置插桩程序探针,将插桩后的软件源码F

输出到文件系统中,方法是:
[0012]2.1配置相关分支交互分析模块从文件系统读入存储配置信息文件,配置信息文件存储有<配置参数名称,配置变量名称>二元对列表,从配置信息文件得到软件源码F中所有的配置参数名称和对应配置变量二元对集合CS,CS={<cn1,cv1>,<cn2,cv2>,...,<cn
n
,cv
n
>,...,<cn
N
,cv
N
>},其中cn
n
为CS中第n个配置参数名称本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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

【专利技术属性】
技术研发人员:李姗姗周书林郑思徐尔茨马俊李小玲贾周阳徐如林黄响兵周海芳廖湘科
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1