法律状态公告日
法律状态信息
法律状态
2022-07-22
公开
发明专利申请公布
技术领域
本发明涉及大型软件的性能调优领域,具体涉及一种软件配置项预选方法。
背景技术
为了使软件能够适应不同的应用场景和生产环境,而不用对软件源代码进行修改,开发人员通常会为软件设置配置项来为用户提供调节软件行为的接口。然而,随着应用场景和用户需求日益多样,现代软件的规模和复杂度日益增加,软件配置项的数量也与日俱增。例如MySQL中有900余个配置项,GCC中的配置项数量更是超过1000个。数量繁多的配置项给用户进行配置软件带来了极大的困难,提高了软件使用的门槛。用户难以通过调节软件配置项来满足自己的意图。
用户在使用软件时通常会带着各种各样的意图,例如提高软件性能(如软件的吞吐率、执行时间、读写速度等)、增强软件可靠性、防止信息泄露等。这其中提高软件性能是最普遍也是用户最关心的意图之一。由于相对于其他意图,软件性能更容易定量度量,如何通过调整软件配置项使软件达到最佳性能,即通过调整软件配置进行性能调优,是当前研究的一个热点问题。
当前配置调优工作通常将所有配置项作为输入,在特定负载下,通过改变配置项的取值进行大量性能测试,得到配置项取值和软件性能之间的对应关系。当前性能调优工作存在配置搜索空间大的问题,导致性能调优耗时长,得到最优性能对应的配置需要消耗大量时间。
针对配置搜索空间过大的问题,现有技术主要通过预筛出对性能有重要影响的配置项来减小配置搜索空间,主要有两种方法。第一种是Zhen Cao等人在FAST’2020发表的Carver:Finding Important Parameters for Storage System Tuning(Carver:为存储系统性能调优选择关键配置项),Carver方法(简称背景技术一)通过拉丁超立方采样(LatinHypercube Sampling,LHS)的方式对配置空间进行采样,在进行性能测试之后采用基于方差的性能矩阵来评估不同配置项对于性能的重要程度,最后使用贪心算法选择对性能影响最大的N(N由用户指定)个配置项,将这些配置项预选给用户来作为自动调优工具的输入。他们的研究通过实验证明了不同配置项对性能影响的重要程度不同,有一小部分配置项对提高软件性能尤为重要,肯定了进行面向性能调优的软件配置项预选的重要性。第二种是Konstantinos Kanellis等人在HotStorage’2020发表的Too Many Knobs to Tune?Towards Faster Database Tuning by Pre-selecting Important Knobs(需要调优的配置项太多了?通过预选重要的配置项来更快进行数据库系统调优,简称背景技术二)工作首先使用拉丁超立方采样方法对配置空间进行采样,之后测试了不同负载下Cassandra和PostgreSQL这两个数据库类系统软件的性能与软件配置的对应关系,分析出不同配置项对软件性能影响的重要程度排序,通过对比不同负载下对性能影响最大的前15个配置项,指出软件中对性能影响最大的几个配置项通常是固定的。他们通过实验证明:在只对Cassandra中对性能影响最大的前5个配置项进行性能调优的情况下,在吞吐率(Throughput)、读延迟(Read latency)和写延迟(write latency)上能够达到和对30个配置项进行调优的相近水平,在读延迟和写延迟上甚至有更好的表现。这两种方法都实现了对软件配置项的预选,但是为获取数据进而得到配置项对于软件性能的重要性时,仍然需要大量的性能测试,而且不同工作负载下预选出的配置项也有一定的差异性,预选结果强烈依赖于性能测试时所选用的工作负载。另外,这些方法只关注于如何提升软件性能,不考虑是否会给软件的可靠性、安全性带来隐患,缺少对用户意图的综合考虑。
综上,如何构建多意图敏感的、负载无关的轻量级配置项预选方法,以辅助现有性能调优工作并警示用户调优可能产生的副作用,是本领域研究人员亟待解决的问题。
发明内容
本发明要解决的技术问题是针对现有对配置项进行的性能调优方法存在耗时长、仅考虑性能这一单一意图的问题(即当用户有性能以外的意图时,现有技术无法工作),提供一种面向性能调优的软件配置项预选方法,该方法具有运行时间短且综合考虑用户多种意图的优点,辅助用户对性能之外的意图进行配置调优。
为解决上述技术问题,本发明的技术方案为:首先,构建由配置项意图数据自动扩增模块和配置项预选模块构成的面向性能调优的软件配置项预选系统;之后从数据集来源软件中随机选取部分配置项由人工进行意图标注,得到标注配置项集合;配置项意图数据自动扩增模块迭代式扩增标注配置项集合,得到扩增后的标注配置项集合;然后利用扩增后的标注配置项集合训练配置项预选模块;最后训练好的配置项预选模块根据目标软件的配置文档对目标软件的配置项进行分类,选择不同类别的意图对应的配置项集合。这些不同类别的意图对应的配置项集合反映了用户进行性能调优时的考虑的几个主要因素,用户可以根据对软件调节的需要,采用相应类别的意图对应的配置项集合进行性能调优达到提高软件性能的目的。
本发明包括以下步骤:
第一步,构建面向性能调优的软件配置项预选系统,面向性能调优的软件配置项预选系统由配置项意图数据自动扩增模块和配置项预选模块构成。
配置项意图数据自动扩增模块与配置项预选模块相连,还与数据集来源软件相连。数据集来源软件包括两部分:标注配置项集合和未标注配置项集合。标注配置项集合指通过人工标注的方式根据每个配置项文档对配置项进行意图类别标注构建的数据集。配置项意图数据自动扩增模块预处理标注配置项集合,对未标注配置项集合中的未标注配置项进行标注,,将新标注的数据从未标注配置项集合加入标注配置项集合中,直到标注配置项集合中配置项的数量不再改变,得到扩增后的标注配置项集合,将扩增后的标注配置项集合发送给配置项预选模块。
配置项预选模块与配置项意图数据自动扩增模块相连,从配置项意图数据自动扩增模块接收扩增后的标注配置项集合。配置项预选模块包含一个TF-IDF编码器encoder和一个配置项预选模型RF。encoder对配置项文档中的句子进行编码,得到句子对应的向量;RF是一个具有两层结构的随机森林模型,该模型使用扩增后的标注配置项集合进行训练,得到随机森林模型的参数。配置项预选模块根据目标软件的配置数据(一般通过人工提取)对目标软件的配置项进行分类,预选出不同意图类别对应的配置项,得到预选的配置项集合。
第二步,从数据集来源软件的配置项集合D
2.1数据集来源软件包括MySQL、Cassandra、MariaDB、Apache-Httpd、Nginx、Hadoop-Common、MapReduce、Apache-Flink、HDFS、Keystone、Nova、GCC、Clang共13款软件。按以下条件从数据集来源软件选取部分配置项:1)属于服务器端(server-side)的软件。这类软件通常对于软件的性能、可靠性、安全性等具有较高的要求,有利于研究配置项对软件的影响;2)具有大量的用户且在世界上最大的代码托管平台GitHub上有超过2,000星(星反映的是用户对软件的关注,星越多表示越多用户使用和关注这个软件)的软件。这类软件通常具有大量的用户,对这类软件的配置项进行标注能产生更大的影响;3)配置项数量超过100个的软件。这类软件配置项数目繁多,更需要进行性能调优。从同时满足上述3个条件的软件的7千余个配置项构成的配置项集合D
2.2根据选取的配置项的官方文档描述,对N个配置项进行意图标注,得到标注配置项集合为D
2.3记标注配置项集合D
记步骤2.1中未被选择的T=S-N个配置项构成的集合记为未标注配置项集合D
第三步,配置项意图数据自动扩增模块预处理标注配置项集合D
3.1配置项意图数据自动扩增模块预处理D
3.1.1定义字典类型(字典类型定义参见链接
3.1.2初始化单词映射最大下标index=8;
3.1.3定义字典类型变量f
3.1.4对单词进行编码并逐步构建f
3.1.4.1初始化变量n=1;
3.1.4.2对d
3.1.4.2.1初始化单词下标变量w
3.1.4.2.2将
3.1.4.2.3判断
3.1.4.2.4令index=index+1;
3.1.4.2.5若w
3.1.4.2.6令w
3.1.4.3若n=N,若是,则将D
3.1.4.4令n=n+1,转3.1.4.2;
3.2配置项意图数据自动扩增模块从D
3.2.1利用D′
3.2.2使用Chuancong Gao等人在WWW2008上发表的Efficient mining offrequent sequence generators(高效挖掘频繁序列生成器)中的FEAT算法,对序列集合SeqDB进行序列模式挖掘,得到序列集合P,P={p
3.2.3对P进行处理,保留其中和意图类别相关的序列,并计算每个序列对应的支持度和置信度,得到序列模式集合SP,方法是:
3.2.3.1初始化序列模式集合SP为空集;
3.2.3.2初始化序列遍历变量m=1;
3.2.3.3初始化序列模式计数变量m′=0;
3.2.3.4判断p
3.2.3.5令m′=m′+1,且令p
3.2.3.5.1初始化标注配置项下标循环变量n=1,并令m′=m′-1;
3.2.3.5.2令m′=m′+1;
3.2.3.5.3初始化支持度变量support
3.2.3.5.4初始化匹配度变量matched
3.2.3.5.5令p
3.2.3.5.6判断pattern
3.2.3.5.7若l
3.2.3.5.8若n=N,转3.2.3.5.10,若n 3.2.3.5.9令n=n+1,转3.2.3.5.2; 3.2.3.5.10计算p 3.2.3.6若m=M,得到序列模式集合SP,SP={Pattern 3.3配置项意图数据自动扩增模块对D 3.3.1初始化变量t=1; 3.3.2对dd 3.3.2.1初始化单词下标变量u 3.3.2.2将 3.3.2.3判断 3.3.2.4若u 3.3.3若t=T,将二元组(cc 3.3.4令t=t+1,转3.3.2; 3.4配置项意图数据自动扩增模块使用SP对D′ 3.4.1设置置信度阈值threshold,令0 3.4.2初始化变量t=1; 3.4.3初始化带有标签的配置项集合R 3.4.4初始化未加标签的配置项集合R 3.4.5初始化用于为第t个未标注配置项选择意图标签的字典类型变量selector,令selector[Label 3.4.6根据3.2得到的模式集合SP更新selector,方法是: 3.4.6.1初始化变量m′=1; 3.4.6.2从序列模式Pattern 3.4.6.2若confidence 3.4.6.3若pattern 3.4.6.4若confidence 3.4.6.5若m′=M′,则遍历完所有的序列模式,完成对selector的更新,转3.4.7;若m′ 3.4.7根据selector为dd′ 3.4.7.1初始化候选标签LC 3.4.7.2初始化标签下标变量i=2; 3.4.7.3若selector[label 3.4.7.4若i=7,转3.4.7.5;若i<7,令i=i+1,转3.4.7.3; 3.4.7.5若selector[LC 3.4.8若t=T,则完成了对未标注配置项集合D 3.4.9令t=t+1,转3.4.5; 3.4.10判断R 3.4.11令D 3.4.12将到达此步骤时的标注配置项集合D 第四步,利用扩增后的标注配置项集合D训练面向性能调优的软件配置项预选系统的配置项预选模块。训练配置项预选模块的方法是: 4.1使用D中的N′个配置项文档d 4.2使用encoder对D中的N′个文档进行编码,得到编码后的向量集合V′,方法是: 4.2.1初始化向量集合V′为空集; 4.2.2初始化循环下标变量n′=1; 4.2.3使用编码器encoder将d 4.2.4将v 4.2.5若n′=N′,则完成对D中N′个配置项文档的编码,得到编码后的向量集合V′,转4.3;若n′ 4.3使用训练集{ 第五步,训练后的配置项预选模块根据目标软件配置项进行配置项预选,得到预选的配置项集合。记目标软件配置项数据集合DT={ 5.1使用4.1训练得到的encoder对目标软件的A个配置项文档进行编码,记编码后的目标软件的向量集合为V 5.1.1初始化目标软件的向量集合V 5.1.2初始化循环下标变量a=1; 5.1.3使用编码器encoder将dt 5.1.4将vv 5.1.5若a=A,则完成对DT中A个配置项文档的编码,得到编码后的目标软件的向量集合V 5.2训练后的配置项预选模块根据V 5.2.1初始化预测的意图标签列表O为空列表; 5.2.2初始化循环下标变量a=1; 5.2.3将vv 5.2.3.1初始化第a个配置项的候选意图标签为o 5.2.3.2将vv 5.2.3.3若pprob 5.2.3.4判断性能相关配置项的意图标签,方法是: 5.2.3.4.1初始化候选意图标签下标ci=1; 5.2.3.4.2初始化循环下标变量i=1; 5.2.3.4.3若prob 5.2.3.4.4若i=6,则完成对RF第二层输出的遍历,令o 5.2.4将o 5.2.5若a=A,则完成对DT中所有配置项的预测,得到预测的意图标签列表O,转5.3;若a 5.3将配置项按照意图标签进行分类,得到相同意图类别配置项构成的集合,方法是: 5.3.1初始化7种意图标签对应的配置项集合为空集,即令 5.3.2初始化循环下标变量a=1; 5.3.3根据第a个配置项的意图标签o 5.3.4若a 至此,训练后的配置项预选模块完成了根据意图类别进行配置项预选的目标。 用户可根据性能调优时的意图选择合适的意图类别对应的配置项集合进行调优,例如当用户在进行性能调优时需要保证软件的可靠性时, 与现有技术相比,采用本发明能达到以下有益效果: 1、采用本发明能根据目标软件配置文档对目标软件进行配置项预选,不需要对配置项进行性能测试,结果与性能测试负载无关,使得配置项预选更加轻量化,既降低了性能调优的耗时,又大大缓解了现有技术受限于负载所导致的预选出的配置项不全的问题。 2、采用本发明能在预选性能攸关配置项的同时兼顾用户性能调优时的多样性意图,根据不同意图类别预选相应的配置项。相比背景技术所述方法(KonstantinosKanellis等人在HotStorage2020发表的Too Many Knobs to Tune?Towards FasterDatabase Tuning by Pre-selecting Important Knobs需要调优的配置项太多了?通过预选重要的配置项来更快进行数据库系统调优)仅关注性能而不考虑用户的多意图特征的缺陷,本发明综合考虑了用户进行性能调优时带来其他意图的潜在影响,使得用户使用预选配置项进行性能调优时还可满足用户对于性能之外的意图。 3、采用本发明能够自动化扩增数据集。本发明第三步给出了一种从标注数据中挖掘序列模式,扩增未标注数据的方法,能够有效减少数据标注过程中的人力和时间的消耗。实验证明,当标注数据占数据总量的20%(s=0.2)且置信度阈值设为0.85(threshold=0.85)时,使用该方法能扩增未标注数据的59.4%,具有86.4%的准确率,使得数据标注过程中的人力和时间消耗被大幅降低,提高了数据标注的效率。对比现有的技术,本发明能够在保持与现有技术相同水平的准确率的前进下,大大降低模型训练对有标记数据的依赖。 附图说明 图1是本发明的总体流程图; 图2是本发明第一步构建多意图敏感的软件配置项预选系统的逻辑结构图; 图3是本发明第三步配置项意图数据自动扩增模块预处理标注配置项集合D 具体实施方式 下面结合附图对本发明进行说明。 如图1所示,本发明包括以下步骤: 第一步,构建面向性能调优的软件配置项预选系统,面向性能调优的软件配置项预选系统如图2所示,由配置项意图数据自动扩增模块和配置项预选模块构成。 配置项意图数据自动扩增模块与配置项预选模块相连,还与数据集来源软件相连。数据集来源软件包括两部分:标注配置项集合和未标注配置项集合。标注配置项集合指通过人工标注的方式根据每个配置项文档对配置项进行意图类别标注构建的数据集。配置项意图数据自动扩增模块预处理标注配置项集合,对未标注配置项集合中的未标注配置项进行标注,,将新标注的数据从未标注配置项集合加入标注配置项集合中,直到标注配置项集合中配置项的数量不再改变,得到扩增后的标注配置项集合,将扩增后的标注配置项集合发送给配置项预选模块。 配置项预选模块与配置项意图数据自动扩增模块相连,从配置项意图数据自动扩增模块接收扩增后的标注配置项集合。配置项预选模块包含一个TF-IDF编码器encoder和一个配置项预选模型RF。encoder对配置项文档中的句子进行编码,得到句子对应的向量;RF是一个具有两层结构的随机森林模型,该模型使用扩增后的标注配置项集合进行训练,得到随机森林模型的参数。配置项预选模块根据目标软件的配置数据对目标软件的配置项进行分类,预选出不同意图类别对应的配置项,得到预选的配置项集合。 第二步,从数据集来源软件的配置项集合D 2.1数据集来源软件包括MySQL、Cassandra、MariaDB、Apache-Httpd、Nginx、Hadoop-Common、MapReduce、Apache-Flink、HDFS、Keystone、Nova、GCC、Clang共13款软件。按以下条件从数据集来源软件选取部分配置项:1)属于服务器端(server-side)的软件。这类软件通常对于软件的性能、可靠性、安全性等具有较高的要求,有利于研究配置项对软件的影响;2)具有大量的用户且在世界上最大的代码托管平台GitHub上有超过2,000星的软件。这类软件通常具有大量的用户,对这类软件的配置项进行标注能产生更大的影响;3)配置项数量超过100个的软件。这类软件配置项数目繁多,更需要进行性能调优。从同时满足上述3个条件的软件的7千余个配置项构成的配置项集合D 2.2根据选取的配置项的官方文档描述,对N个配置项进行意图标注,得到标注配置项集合为D 2.3记标注配置项集合D 记步骤2.1中未被选择的T=S-N个配置项构成的集合记为未标注配置项集合D 第三步,配置项意图数据自动扩增模块预处理标注配置项集合D 3.1配置项意图数据自动扩增模块预处理D 3.1.1定义字典类型变量f 3.1.2初始化单词映射最大下标index=8; 3.1.3定义字典类型变量f 3.1.4对单词进行编码并逐步构建f 3.1.4.1初始化变量n=1; 3.1.4.2对d 3.1.4.2.1初始化单词下标变量w 3.1.4.2.2将 3.1.4.2.3判断 3.1.4.2.4令index=index+1; 3.1.4.2.5若w 3.1.4.2.6令w 3.1.4.3若n=N,若是,则将D 3.1.4.4令n=n+1,转3.1.4.2; 3.2配置项意图数据自动扩增模块从D′ 3.2.1利用D′ 3.2.2使用Chuancong Gao等人在WWW2008上发表的Efficient mining offrequent sequence generators(高效挖掘频繁序列生成器)中的FEAT算法,对序列集合SeqDB进行序列模式挖掘,得到序列集合P,P={p 3.2.3对P进行处理,保留其中和意图类别相关的序列,并计算每个序列对应的支持度和置信度,得到序列模式集合SP,方法是: 3.2.3.1初始化序列模式集合SP为空集; 3.2.3.2初始化序列遍历变量m=1; 3.2.3.3初始化序列模式计数变量m′=0; 3.2.3.4判断p 3.2.3.5令m′=m′+1,且令p 3.2.3.5.1初始化标注配置项下标循环变量n=1,并令m′=m′-1; 3.2.3.5.2令m′=m′+1; 3.2.3.5.3初始化支持度变量support 3.2.3.5.4初始化匹配度变量matched 3.2.3.5.5令p 3.2.3.5.6判断pattern 3.2.3.5.7若l 3.2.3.5.8若n=N,转3.2.3.5.10,若n 3.2.3.5.9令n=n+1,转3.2.3.5.2; 3.2.3.5.10计算p 3.2.3.6若m=M,得到序列模式集合SP,SP={Pattern 3.3配置项意图数据自动扩增模块对D 3.3.1初始化变量t=1; 3.3.2对dd 3.3.2.1初始化单词下标变量u 3.3.2.2将 3.3.2.3判断 3.3.2.4若u 3.3.3若t=T,将二元组(cc 3.3.4令t=t+1,转3.3.2; 3.4配置项意图数据自动扩增模块使用SP对D′ 3.4.1设置置信度阈值threshold,令0 3.4.2初始化变量t=1; 3.4.3初始化带有标签的配置项集合R 3.4.4初始化未加标签的配置项集合R 3.4.5初始化用于为第t个未标注配置项选择意图标签的字典类型变量selector,令selector[Label 3.4.6根据3.2得到的模式集合SP更新selector,方法是: 3.4.6.1初始化变量m′=1; 3.4.6.2从序列模式Pattern 3.4.6.2若confidence 3.4.6.3若pattern 3.4.6.4若confidence 3.4.6.5若m′=M′,则遍历完所有的序列模式,完成对selector的更新,转3.4.7;若m′ 3.4.7根据selector为dd′ 3.4.7.1初始化候选标签LC 3.4.7.2初始化标签下标变量i=2; 3.4.7.3若selector[label 3.4.7.4若i=7,转3.4.7.5;若i<7,令i=i+1,转3.4.7.3; 3.4.7.5若selector[LC 3.4.8若t=T,则完成了对未标注配置项集合D 3.4.9令t=t+1,转3.4.5; 3.4.10判断R 3.4.11令D 3.4.12将到达此步骤时的标注配置项集合D 第四步,利用扩增后的标注配置项集合D训练面向性能调优的软件配置项预选系统的配置项预选模块。训练配置项预选模块的方法是: 4.1使用D中的N′个配置项文档d 4.2使用encoder对D中的N′个文档进行编码,得到编码后的向量集合V′,方法是: 4.2.1初始化向量集合V′为空集; 4.2.2初始化循环下标变量n′=1; 4.2.3使用编码器encoder将d 4.2.4将v 4.2.5若n′=N′,则完成对D中N′个配置项文档的编码,得到编码后的向量集合V′,转4.3;若n′ 4.3使用训练集{ 第五步,训练后的配置项预选模块根据目标软件配置项进行配置项预选,得到预选的配置项集合。记目标软件配置项数据集合DT={ 5.1使用4.1训练得到的encoder对目标软件的A个配置项文档进行编码,记编码后的目标软件的向量集合为V 5.1.1初始化目标软件的向量集合V 5.1.2初始化循环下标变量a=1; 5.1.3使用编码器encoder将dt 5.1.4将vv 5.1.5若a=A,则完成对DT中A个配置项文档的编码,得到编码后的目标软件的向量集合V 5.2训练后的配置项预选模块根据V 5.2.1初始化预测的意图标签列表O为空列表; 5.2.2初始化循环下标变量a=1; 5.2.3将vv 5.2.3.1初始化第a个配置项的候选意图标签为o 5.2.3.2将vv 5.2.3.3若pprob 5.2.3.4判断性能相关配置项的意图标签,方法是: 5.2.3.4.1初始化候选意图标签下标ci=1; 5.2.3.4.2初始化循环下标变量i=1; 5.2.3.4.3若prob 5.2.3.4.4若i=6,则完成对RF第二层输出的遍历,令o 5.2.4将o 5.2.5若a=A,则完成对DT中所有配置项的预测,得到预测的意图标签列表O,转5.3;若a 5.3将配置项按照意图标签进行分类,得到相同意图类别配置项构成的集合,方法是: 5.3.1初始化7种意图标签对应的配置项集合为空集,即令 5.3.2初始化循环下标变量a=1; 5.3.3根据第a个配置项的意图标签o
机译: 支持面向对象的软件组件的变更的方法,其存储装置和利用该对象存储的程序的存储介质来支持面向对象的软件组件的变更
机译: 一种在多个预选择词中编码多个数据预选择二进制位的方法-代码和用于对多个数据的预选择词位BINARI进行编码的装置和装置
机译: 一种将嵌入式软件的面向对象任务模型分配到MPSoC硬件体系结构中的方法