CN115562674A - A load-aware software configuration parameter adjustment method - Google Patents
A load-aware software configuration parameter adjustment method Download PDFInfo
- Publication number
- CN115562674A CN115562674A CN202211200545.8A CN202211200545A CN115562674A CN 115562674 A CN115562674 A CN 115562674A CN 202211200545 A CN202211200545 A CN 202211200545A CN 115562674 A CN115562674 A CN 115562674A
- Authority
- CN
- China
- Prior art keywords
- configuration
- rcv
- branch
- software
- variable
- 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
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000012544 monitoring process Methods 0.000 claims abstract description 54
- 230000003993 interaction Effects 0.000 claims abstract description 41
- 238000012482 interaction analysis Methods 0.000 claims abstract description 16
- 238000003780 insertion Methods 0.000 claims abstract description 10
- 230000037431 insertion Effects 0.000 claims abstract description 10
- 239000000284 extract Substances 0.000 claims abstract description 9
- 230000006870 function Effects 0.000 claims description 39
- 230000014509 gene expression Effects 0.000 claims description 23
- 238000012545 processing Methods 0.000 claims description 5
- 238000007689 inspection Methods 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 claims description 3
- 230000008447 perception Effects 0.000 claims 7
- 230000003068 static effect Effects 0.000 abstract description 4
- 238000004519 manufacturing process Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000010801 machine learning Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种负载感知的软件配置参数调整方法,目的是解决目前无法对软件配置参数进行自动调整以应对负载敏感的配置故障的问题。技术方案为:构建由配置相关分支交互分析模块和动态监控模块构成的配置参数调整系统;配置相关分支交互分析模块基于静态程序分析方法定位软件源码中配置相关的分支交互代码段,实现代码插桩;软件运行时,动态监控模块自动提取相关负载影响下配置参数所需满足的约束信息,并在软件负载产生变化时,根据配置约束信息自动调整配置参数取值,从而避免负载敏感配置故障。采用本发明可有效获得负载敏感的配置约束信息,帮助用户自动调整配置参数取值从而满足变化负载的需求,可以避免负载敏感的配置故障。
The invention discloses a load-aware software configuration parameter adjustment method, aiming to solve the problem that the current software configuration parameters cannot be automatically adjusted to deal with load-sensitive configuration faults. The technical solution is: build a configuration parameter adjustment system composed of a configuration-related branch interaction analysis module and a dynamic monitoring module; the configuration-related branch interaction analysis module locates the configuration-related branch interaction code segment in the software source code based on the static program analysis method, and realizes code insertion ; When the software is running, the dynamic monitoring module automatically extracts the constraint information that the configuration parameters need to meet under the influence of the relevant load, and automatically adjusts the value of the configuration parameters according to the configuration constraint information when the software load changes, so as to avoid load-sensitive configuration failures. The invention can effectively obtain load-sensitive configuration constraint information, help users automatically adjust configuration parameter values to meet changing load requirements, and avoid load-sensitive configuration failures.
Description
技术领域technical field
本发明涉及大型软件中的配置约束提取和配置故障预防领域,具体涉及一种负载感知的软件配置参数调整方法。The invention relates to the fields of configuration constraint extraction and configuration failure prevention in large-scale software, and in particular relates to a load-aware software configuration parameter adjustment method.
背景技术Background technique
随着社会的不断进步,软件系统已经在各个领域得到广泛应用,在现代社会中扮演着举足轻重的角色,发挥了重要的作用。配置作为软件的重要组成部分,在提升软件功能多样性、可定制性和适应性方面发挥了重要的作用。软件用户可以利用配置选择不同实现的库、策略、规则等定制不同的功能,并有效控制软件的资源使用从而适应不同环境与工作负载,满足用户的不同需求。目前,为适应负载环境与应用需求变化,大规模软件系统均向高可配置化方向发展,从而提升软件服务的可靠性和可用性。With the continuous progress of society, software systems have been widely used in various fields, playing a pivotal role in modern society and playing an important role. As an important part of software, configuration plays an important role in improving the diversity, customizability and adaptability of software functions. Software users can use configuration to select different implementations of libraries, policies, rules, etc. to customize different functions, and effectively control the resource usage of the software to adapt to different environments and workloads and meet different needs of users. At present, in order to adapt to changes in the load environment and application requirements, large-scale software systems are developing towards high configurability, thereby improving the reliability and availability of software services.
然而,随着软件规模的持续增长和运行环境的日益复杂,软件用户在体验配置带来便利性的同时,也经历了相应的配置故障的影响,导致软件系统服务失效频发,逐渐引起了业界的广泛关注。其中,负载敏感的配置故障,即软件在特定负载下由合法配置取值导致的配置故障,已占据了软件配置故障的很大比例。Zuoning Yin等人在面向四款常用开源基础软件和一款商用基础软件配置故障存在现状的调研中发现,46.3%~61.9%的案例中相关配置参数取值均满足对应合法取值范围约束,但仍会导致软件系统出现配置故障。Tianyin Xu等人也通过调研发现,在三款开源软件和一款商用软件中,高达53.3%的配置故障是由与运行时环境和负载相关的配置参数取值不当导致的。However, with the continuous growth of software scale and the increasingly complex operating environment, software users experience the convenience of configuration while also experiencing the impact of corresponding configuration failures, resulting in frequent failures of software system services, which has gradually caused the industry widespread attention. Among them, load-sensitive configuration faults, that is, configuration faults caused by legitimate configuration values of software under specific loads, have accounted for a large proportion of software configuration faults. Zuoning Yin et al. found in a survey on the status quo of configuration failures of four commonly used open source basic software and one commercial basic software that the values of relevant configuration parameters in 46.3% to 61.9% of cases all meet the corresponding legal value range constraints, but It can still cause configuration failures in the software system. Tianyin Xu et al. also found through research that among three open source software and one commercial software, up to 53.3% of configuration failures are caused by improper configuration parameters related to the runtime environment and load.
目前,现有配置参数调整技术重点关注于面向配置的性能调优,以Shu Wang等人在ASPLOS2018发表的“Understanding and auto-adjusting performance-sensitiveconfigurations(理解并自动调整性能敏感配置参数)”和Miguel Velez等人在ICSE2021发表的“White-box analysis over machine learning:Modeling performance ofconfigurable systems(基于白盒分析和机器学习的可配置软件性能模型构建研究)”为代表,主要通过搜索或者构建描述配置参数取值与软件性能表现关系模型的方法,在软件配置参数的巨大取值空间中快速寻找使得软件性能表现最优的配置参数取值组合,从而调整对应配置参数取值以提升软件性能。然而上述方法均要求预先提供配置参数的合法取值范围,而现有获取配置参数取值范围的方法主要包括两类工作。第一类工作以Tianyin Xu等人在SOSP2013发表的“Do Not Blame Users for Misconfigurations(不要因为配置故障而责备用户)”为代表,主要通过静态分析技术从软件源码中提取配置项约束信息,从而指导用户在合法范围内设置配置项取值,预防因人为因素导致的配置故障。此类工作主要基于静态分析实现,并未考虑软件负载对于配置约束的影响,因此可能导致软件在配置参数调整过程中产生负载敏感的配置故障。第二类工作,以Xudong Sun等人在OSDI2020发表的“Testing Configuration Changes in Context to Prevent Production Failures(在上下文中测试配置修改从而预防生产故障)”为代表,主要通过充分利用软件系统已有测试用例提前检测错误的配置修改,以避免生产环境中的配置故障。然而,此类工作目前仅能模拟简单的运行上下文环境,无法真实模拟软件系统在生产环境中所面临的多样负载和复杂上下文环境,对于负载敏感的配置故障预防能力同样有限。At present, the existing configuration parameter adjustment technology focuses on configuration-oriented performance tuning, based on "Understanding and auto-adjusting performance-sensitive configurations (understanding and automatically adjusting performance-sensitive configuration parameters)" published by Shu Wang et al. at ASPLOS2018 and Miguel Velez et al. published "White-box analysis over machine learning: Modeling performance of configurable systems (research on configurable software performance model construction based on white-box analysis and machine learning)" published in ICSE2021, mainly by searching or constructing description configuration parameter values The method of relationship model with software performance, quickly finds the combination of configuration parameters that make the software performance optimal in the huge value space of software configuration parameters, so as to adjust the corresponding configuration parameters to improve software performance. However, the above-mentioned methods all require the legal value range of the configuration parameter to be provided in advance, and the existing methods for obtaining the value range of the configuration parameter mainly include two types of work. The first type of work is represented by "Do Not Blame Users for Misconfigurations" published by Tianyin Xu et al. Users set the value of configuration items within the legal range to prevent configuration failures caused by human factors. This kind of work is mainly implemented based on static analysis, and does not consider the impact of software load on configuration constraints, so it may cause load-sensitive configuration failures in the process of software configuration parameter adjustment. The second type of work, represented by "Testing Configuration Changes in Context to Prevent Production Failures" published by Xudong Sun et al. Detect incorrect configuration modifications early to avoid configuration failures in production environments. However, such work can only simulate a simple running context at present, and cannot truly simulate the diverse loads and complex contexts faced by a software system in a production environment, and the ability to prevent load-sensitive configuration failures is also limited.
综上所述,如何对负载敏感的软件配置参数进行自动调整,帮助用户有效应对负载敏感的配置故障,提升软件的可靠性,是本领域技术人员正在探讨的热点问题。To sum up, how to automatically adjust load-sensitive software configuration parameters to help users effectively deal with load-sensitive configuration failures and improve software reliability is a hot topic being discussed by those skilled in the art.
发明内容Contents of the invention
本发明要解决的技术问题是提供一种负载感知的软件配置参数调整方法,解决现有软件配置参数调整方法中未考虑负载对配置参数约束影响,导致无法对软件配置参数进行自动调整,无法应对负载敏感的配置故障,导致软件可靠性不高的问题。The technical problem to be solved by the present invention is to provide a load-aware software configuration parameter adjustment method, which solves the problem that the existing software configuration parameter adjustment method does not consider the influence of load on configuration parameter constraints, which leads to the inability to automatically adjust software configuration parameters and cannot cope with Load-sensitive configuration failures lead to problems with low software reliability.
本发明通过向软件源码中配置相关分支交互代码段(即配置相关程序变量(简称为配置变量)与其他程序变量在分支语句中产生交互从而影响软件运行时行为的代码段)进行代码插桩,从而在软件运行时有效监控程序相关状态,提取负载敏感配置约束,并根据负载敏感配置约束调整配置取值以预防负载敏感的配置故障,及时恢复软件正常运行。The present invention performs code insertion by configuring relevant branch interaction code segments (i.e., configuring relevant program variables (referred to as configuration variables) and other program variables in branch statements to interact with other program variables to affect the behavior of the software when it is running) into the software source code, In this way, the related state of the program can be effectively monitored when the software is running, the load-sensitive configuration constraints can be extracted, and the configuration values can be adjusted according to the load-sensitive configuration constraints to prevent load-sensitive configuration failures and restore the normal operation of the software in time.
为解决上述技术问题,本发明的技术方案为:首先构建由配置相关分支交互分析模块和动态监控模块构成的配置参数调整系统;然后,配置相关分支交互分析模块读入软件源码和<配置参数名称,配置变量名称>二元对文件,基于静态程序分析方法定位软件源码中配置相关的分支交互代码段,实现代码插桩;当软件运行时,动态监控模块不断读取插桩代码在运行时的输出文件内容,自动提取相关负载影响下配置参数所需满足的约束信息,当软件负载产生变化时,根据配置约束信息自动调整配置参数取值,从而避免负载敏感配置故障。In order to solve the above-mentioned technical problems, the technical scheme of the present invention is: first build the configuration parameter adjustment system that is made of configuration-related branch interaction analysis module and dynamic monitoring module; Then, configuration-related branch interaction analysis module reads in software source code and <configuration parameter name , configuration variable name>binary pair file, based on the static program analysis method to locate the configuration-related branch interaction code segment in the software source code, to implement code instrumentation; when the software is running, the dynamic monitoring module continuously reads the instrumentation code at runtime The content of the output file automatically extracts the constraint information that the configuration parameters need to meet under the influence of the relevant load. When the software load changes, the value of the configuration parameter is automatically adjusted according to the configuration constraint information, thereby avoiding load-sensitive configuration failures.
本发明包括以下步骤:The present invention comprises the following steps:
第一步,构建配置参数调整系统,配置参数调整系统由配置相关分支交互分析模块和动态监控模块组成。配置相关分支交互分析模块从文件系统读入软件源码F和配置信息文件(存储有<配置参数名称,配置变量名称>二元对列表),在软件源码F中识别定位配置相关分支交互,并进行代码插桩,将插桩后的软件源码F‘输出到文件系统中;然后用户对F‘进行编译、链接,得到可执行软件F“;动态监控模块监控F‘'运行时在文件系统中的输出,提取并输出当前负载影响下的配置约束信息,并在F“负载产生变化导致当前配置取值不满足配置约束信息时,根据相关配置约束信息自动调整配置参数取值。The first step is to build a configuration parameter adjustment system, which is composed of a configuration-related branch interaction analysis module and a dynamic monitoring module. The configuration-related branch interaction analysis module reads the software source code F and the configuration information file (stored with <configuration parameter name, configuration variable name> binary pair list) from the file system, identifies and locates the configuration-related branch interaction in the software source code F, and performs Code insertion, output the software source code F' after insertion to the file system; then the user compiles and links F' to obtain executable software F"; the dynamic monitoring module monitors the source code of F'' in the file system when it is running Output, extract and output the configuration constraint information under the influence of the current load, and automatically adjust the configuration parameter value according to the relevant configuration constraint information when the F" load changes and the current configuration value does not meet the configuration constraint information.
第二步,配置相关分支交互分析模块从文件系统读取软件源码F和配置信息文件,从软件源码F中定位识别配置相关分支交互代码段,并在配置相关分支交互代码段位置插桩程序探针,将插桩后的软件源码F‘输出到文件系统中,方法是:The second step is to configure the relevant branch interaction analysis module to read the software source code F and configuration information files from the file system, locate and identify the configuration-related branch interaction code segment from the software source code F, and insert the program detection at the location of the configuration-related branch interaction code segment pin, and output the software source code F' after instrumentation to the file system, the method is:
2.1配置相关分支交互分析模块从文件系统读入存储配置信息文件,配置信息文件存储有<配置参数名称,配置变量名称>二元对列表,从配置信息文件得到软件源码F中所有的配置参数名称和对应配置变量二元对集合CS,CS={<cn1,cv1>,<cn2,cv2>,...,<cnn,cvn>,...,<cnN,cvN>},其中cnn为CS中第n个配置参数名称,cvn为CS中cnn在软件源码中对应的配置变量名称,cnn与cvn二元对关系可通过Shulin Zhou等人在QRS2016发表的“ConfMapper:Automated Variable Finding for Configuration Items in Source Code(ConfMapper:从软件源码中自动寻找配置参数对应配置变量)”所述的从软件源码中自动寻找配置参数对应配置变量方法建立,N为软件源码F中配置参数总数,1≤n≤N;2.1 The configuration-related branch interaction analysis module reads and stores the configuration information file from the file system. The configuration information file stores a list of binary pairs of <configuration parameter name, configuration variable name>, and obtains all configuration parameter names in the software source code F from the configuration information file. and the corresponding configuration variable binary pair set CS, CS={<cn 1 , cv 1 >, <cn 2 , cv 2 >, ..., <cn n , cv n >, ..., <cn N , cv N >}, where cn n is the nth configuration parameter name in CS, cv n is the configuration variable name corresponding to cn n in CS in the software source code, and the binary pair relationship between cn n and cv n can be obtained through Shulin Zhou et al. QRS2016 published "ConfMapper: Automated Variable Finding for Configuration Items in Source Code (ConfMapper: Automatically find configuration parameters corresponding to configuration variables from software source code)" described in the method of automatically finding configuration parameters corresponding to configuration variables from software source code, N is The total number of configuration parameters in the software source code F, 1≤n≤N;
2.2使用LLVM编译器框架的Clang前端(10.0.0版本及以上)解析软件源码F,生成软件源码F对应的抽象语法树(Abstract Syntax Tree)ASTroot,ASTroot中的每个节点都表示软件源码F中的一种结构,比如整个源码整体(TranslationUnitDecl)、函数声明(FunctionDecl)、If分支语句(IfStmt)、函数调用(CallExpr)、常量字符串(StringLiteral)、二元计算(BinaryOperator)、单一变量(DeclRefExpr)、结构体变量(MemberExpr)等,且不同结构之间同样以树的结构表示相应从属关系,例如对于一个函数声明中的If分支语句,对应的IfStmt节点就位于以FunctionDecl节点为根节点的子树中;2.2 Use the Clang front-end of the LLVM compiler framework (version 10.0.0 and above) to parse the software source code F, and generate an Abstract Syntax Tree (AST root ) corresponding to the software source code F, and each node in the AST root represents the software source code A structure in F, such as the entire source code (TranslationUnitDecl), function declaration (FunctionDecl), If branch statement (IfStmt), function call (CallExpr), constant string (StringLiteral), binary calculation (BinaryOperator), single variable (DeclRefExpr), structure variables (MemberExpr), etc., and different structures also use the tree structure to represent the corresponding affiliation. For example, for an If branch statement in a function declaration, the corresponding IfStmt node is located with the FunctionDecl node as the root node in the subtree of
2.3在抽象语法树ASTroot中定位与cv1,cv2,...,cvn,...,cvN相关的分支交互,具体方法如下:2.3 Locate and interact with branches related to cv 1 , cv 2 , ..., cv n , ..., cv N in the AST root of the abstract syntax tree, the specific method is as follows:
2.3.1在抽象语法树ASTroot中使用Clang(10.0.0版本及以上)提供的相关遍历接口(VisitNodeType形式的遍历接口,其中NodeType是指代抽象语法树中的节点类型,具体类型如步骤2.2中所述,遍历过程中使用的接口包括VisitFunctionDecl、VisitStringLiteral等分别用于遍历FunctionDecl和StringLiteral类型的节点,详细接口信息可参见Clang接口信息文档“https://clang.llvm.org/doxygen/classclang_1_1RecursiveASTVisitor.html#details”)遍历ASTroot,定位使用cv1,cv2,...,cvn,...,cvN的代码位置,并加入到配置变量使用位置集合CL1,CL2,...,CLn,...,CLN中,CLn表示ASTroot中使用cvn的代码位置,CLn={cln1,cln2,...,clnj,...,clnJ},其中clnj表示cvn在ASTroot中第j次被使用的位置,J为cvn在ASTroot中使用位置的总数,1≤j≤J;2.3.1 Use the related traversal interface provided by Clang (version 10.0.0 and above) in the AST root of the abstract syntax tree (the traversal interface in the form of VisitNodeType, where NodeType refers to the node type in the abstract syntax tree, and the specific type is as in step 2.2 As mentioned in the traversal process, the interfaces used in the traversal process include VisitFunctionDecl, VisitStringLiteral, etc., which are used to traverse the nodes of the FunctionDecl and StringLiteral types respectively. For detailed interface information, please refer to the Clang interface information document "https://clang.llvm.org/doxygen/classclang_1_1RecursiveASTVisitor. html#details") traverse the AST root , locate the code position using cv 1 , cv 2 , ..., cv n , ..., cv N , and add it to the configuration variable use position set CL 1 , CL 2 , .. ., CL n ,..., CL N , CL n represents the code position using cv n in the AST root , CL n ={cl n1 , cl n2 ,..., cl nj ,..., cl nJ } , where cl nj represents the position where cv n is used for the jth time in the AST root , J is the total number of positions where cv n is used in the AST root , 1≤j≤J;
2.3.2初始化变量n=1;2.3.2 Initialize variable n=1;
2.3.3初始化变量j=1,初始化cvn的相关的候选分支交互集合Cand_BIn={},初始化cvn相关的备用配置变量集合Alternative_CVn={};2.3.3 Initialize variable j=1, initialize cv n related candidate branch interaction set Cand_BI n ={}, initialize cv n related standby configuration variable set Alternative_CV n ={};
2.3.4检查cvn和clnj是否满足以下三种场景中的使用情况,方法是:2.3.4 Check whether cv n and cl nj meet the usage conditions in the following three scenarios by:
2.3.4.1若cvn直接在软件源码F的分支语句br(软件源码F中的If语句、While语句、Switch语句)的分支条件中被使用(即作为分支判断条件的一部分进行运算后控制程序执行的控制流向),则将br加入到cvn的相关的候选分支交互集合Cand_BIn中,转2.3.5,否则转2.3.4.2;2.3.4.1 If cv n is directly used in the branch condition of the branch statement br of the software source code F (If statement, While statement, Switch statement in the software source code F) (that is, it is used as a part of the branch judgment condition to control program execution control flow), then add br to the relevant candidate branch interaction set Cand_BI n of cv n , go to 2.3.5, otherwise go to 2.3.4.2;
2.3.4.2若cvn被赋值给其他程序变量lv,且lv直接在分支语句br的分支条件中被使用,则将br加入到cvn的相关的候选分支交互集合Cand_BIn中,并将lv加入到cvn相关的备用配置变量集合Alternative_CVn中,转2.3.5;否则转2.3.4.3;2.3.4.2 If cv n is assigned to other program variables lv, and lv is directly used in the branch condition of the branch statement br, then add br to the relevant candidate branch interaction set Cand_BI n of cv n , and add lv to Go to Alternative_CV n , the set of alternate configuration variables related to cv n , and go to 2.3.5; otherwise, go to 2.3.4.3;
2.3.4.3若函数func共有I(I≥1)个参数,且cvn被函数func作为第i(1≤i≤I)个参数使用,且在函数func实现中,函数func对应的第i个形参parami直接在分支语句br的分支条件中被使用(函数实现的形参数量与函数调用的实参数量一致,表明函数func的形参parami与函数func调用时的第i个参数对应),则将br加入到cvn的相关的候选分支交互集合Cand_BIn中,并将parami加入到cvn相关的备用配置变量集合Alternative_CVn中,转2.3.5;否则直接转2.3.5;2.3.4.3 If the function func has a total of I (I≥1) parameters, and cv n is used by the function func as the i-th (1≤i≤I) parameter, and in the implementation of the function func, the i-th parameter corresponding to the function func The formal parameter param i is directly used in the branch condition of the branch statement br (the number of formal parameters implemented by the function is consistent with the actual parameter quantity of the function call, indicating that the formal parameter param i of the function func corresponds to the i-th parameter when the function func is called ), then add br to the relevant candidate branch interaction set Cand_BI n of cv n , and add param i to the alternate configuration variable set Alternative_CV n related to cv n , and go to 2.3.5; otherwise, go to 2.3.5 directly;
2.3.5令j=j+1,若j≤J,转2.3.4;否则得到cvn相关的候选分支交互集合Cand_BIn,Cand_BIn={cand_bin1,cand_bin2,..,cand_bink,...,cand_binK},其中cand_bink为Cand_BIn集合中cvn的第k个候选分支交互,K为Cand_BIn中cvn的候选分支交互总数,1≤k≤K,转2.3.6;2.3.5 Let j=j+1, if j≤J, go to 2.3.4; otherwise, get the candidate branch interaction set Cand_BI n related to cv n , Cand_BI n = { cand_bin1 , cand_bin2 , .., cand_bink ,. .., cand_binK }, where cand_bink is the kth candidate branch interaction of cv n in the Cand_BI n set, K is the total number of candidate branch interactions of cv n in Cand_BI n , 1≤k≤K, go to 2.3.6;
2.3.6对cvn相关的候选分支交互集合Cand_BIn中相关分支语句的分支条件和分支处理类型进行解析和识别,得到五元组<cnn,rcvn,psnk,opnk,locnk>,cnn为cvn的配置参数名称、rcvn为cvn在该位置的取值、psnk为与cvn交互的程序状态取值、opnk为与cvn交互的对应操作符,locnk为compare_condition所在分支语句代码位置,compare_condition为包含cvn或包含cvn在对应位置的备用配置变量acv的叶子节点中的逻辑表达式;依照五元组<cnn,rcvn,psnk,opnk,locnk>信息在软件源码ASTroot的locnk位置进行插桩,并记录插桩在软件源码F中的位置;方法为:2.3.6 Analyze and identify the branch conditions and branch processing types of the relevant branch statements in the candidate branch interaction set Cand_BI n related to cv n , and obtain the five-tuple <cn n , rcv n , ps nk , op nk , loc nk > , cn n is the configuration parameter name of cv n , rcv n is the value of cv n at this position, ps nk is the program state value interacting with cv n , op nk is the corresponding operator interacting with cv n , loc nk is the code position of the branch statement where compare_condition is located, and compare_condition is a logical expression in the leaf node of the alternate configuration variable acv that contains cv n or contains cv n at the corresponding position; according to the five-tuple <cn n , rcv n , ps nk , op nk , loc nk > information is inserted at the loc nk position of the software source code AST root , and the position of the inserted stake in the software source code F is recorded; the method is:
2.3.6.1初始化变量k=1;2.3.6.1 Initialize variable k=1;
2.3.6.2通过Clang(10.0.0版本及以上)提供的接口getCond()获取cand_bink的分支条件branch_condition,并将branch_condition按照非叶子节点为二元操作符&&(表示与操作)或||(表示或操作)、叶子节点均为逻辑表达式的形式解析为二叉树,然后将包含配置变量cvn(或包含cvn在对应位置的备用配置变量acv(acv∈Alternative_CVn))的叶子节点中的逻辑表达式记为compare_condition,将其他与compare_condition相邻且使用&&节点连接的所有叶子节点使用与运算进行连接,并将连接后的逻辑表达式记为pre_condition;2.3.6.2 Obtain the branch condition branch_condition of cand_bink through the interface getCond() provided by Clang (version 10.0.0 and above), and use the branch_condition as a binary operator && (indicating AND operation) or || (indicating or operation), the leaf nodes are all logical expressions and parsed into a binary tree, and then the logic in the leaf nodes containing the configuration variable cv n (or the alternate configuration variable acv(acv∈Alternative_CV n ) containing cv n at the corresponding position) The expression is recorded as compare_condition, and all other leaf nodes adjacent to compare_condition and connected by && nodes are connected by AND operation, and the connected logical expression is recorded as pre_condition;
2.3.6.3检查compare_condition中是否只包括cvn或包含cvn在对应位置的备用配置变量acv(acv∈Alternative_CVn)、常量、及其他配置变量cvm(1≤m≤N,m≠n),若是,转2.3.6.7;否则,转2.3.6.4;2.3.6.3 Check whether the compare_condition only includes cv n or the alternate configuration variable acv (acv∈Alternative_CV n ), constants, and other configuration variables cv m (1≤m≤N, m≠n) containing cv n in the corresponding position, If yes, go to 2.3.6.7; otherwise, go to 2.3.6.4;
2.3.6.4对compare_condition进行变换,将cvn或cvn在对应位置的备用配置变量acv移到compare_condition表达式操作符的左侧,将其他所有操作数移到compare_condition表达式操作符的右侧,并将表达式右侧语句记为psnk,将表达式操作符记为opnk,将compare_condition所在分支语句代码位置记录为locnk,将当前compare_condition中出现的cvn或acv记为rcvn;2.3.6.4 Transform compare_condition, move cv n or the spare configuration variable acv of cv n at the corresponding position to the left side of the compare_condition expression operator, move all other operands to the right side of the compare_condition expression operator, and Record the statement on the right side of the expression as ps nk , record the expression operator as op nk , record the code position of the branch statement where the compare_condition is located as loc nk , and record the cv n or acv that appears in the current compare_condition as rcv n ;
2.3.6.5通过Clang(10.0.0版本及以上)提供的接口getThen()获取cand_bink的分支处理代码段handling_block,并检查handling_block中是否包含以下三种情况中的任一种:i)错误处理相关日志语句,ii)跳转语句,且跳转标签名称中包含描述错误的关键词,iii)错误处理相关函数调用,若包含任意一种情况,转2.3.6.6;若以上三种情况均不包含,转2.3.6.7; 2.3.6.5 Obtain the branch handling code segment handling_block of cand_bink through the interface getThen() provided by Clang (version 10.0.0 and above), and check whether handling_block contains any of the following three situations: i) Error handling related Log statement, ii) jump statement, and the jump label name contains keywords describing errors, iii) error handling related function calls, if any of the cases are included, go to 2.3.6.6; if none of the above three cases are included , go to 2.3.6.7;
2.3.6.6依照五元组<cnn,rcvn,psnk,opnk,locnk>信息在软件源码ASTroot的locnk位置进行插桩,插桩代码段主要功能是在软件源码F运行时记录cnn、rcvn、psnk、opnk四类信息并输出到文件系统中;例如,在HttpdWeb服务器软件中一个关于配置参数“LimitRequestFields”的五元组实例如下<“LimitRequestFields”,r->server->limit_req_fields,++fields_read,≥,server/protocol.c:1187>,在此例子中cnn为字符串型配置参数名称LimitRequestFields,rcvn为数值类型程序变量 psnk为数值类型程序变量++fieldsread,opnk为≥,locnk为字符串型代码位置信息,在此例子中为server/protocol.c:1187,记录上述插桩在软件源码F中的位置;2.3.6.6 According to the quintuple <cn n , rcv n , ps nk , op nk , loc nk > information, perform instrumentation at the loc nk position of the software source code AST root . The main function of the instrumentation code segment is when the software source code F is running Record four types of information: cn n , rcv n , ps nk , op nk and output them to the file system; for example, in the HttpdWeb server software, a quintuple instance of the configuration parameter "LimitRequestFields" is as follows <"LimitRequestFields", r->server->limit_req_fields, ++fields_read, ≥, server/protocol.c: 1187>, in this example cn n is the string type configuration parameter name LimitRequestFields, rcv n is the numerical type program variable ps nk is a numerical program variable ++fields read , op nk is ≥, loc nk is a string type code position information, in this example it is server/protocol. Location;
2.3.6.7令k=k+1,若k≤K,转2.3.6.2;否则转2.3.7;2.3.6.7 Let k=k+1, if k≤K, go to 2.3.6.2; otherwise go to 2.3.7;
2.3.7令n=n+1,若n≤N,转2.3.3;否则转2.4;2.3.7 Let n=n+1, if n≤N, go to 2.3.3; otherwise go to 2.4;
2.4对软件源码F插桩完成,向文件系统输出插桩后的软件源码F‘。2.4 The instrumentation of the software source code F is completed, and the instrumented software source code F' is output to the file system.
第三步,人工对F‘进行编译、链接,得到可执行软件F“,并运行软件F“。The third step is to manually compile and link F' to obtain the executable software F", and run the software F".
第四步,动态监控模块监控F“在文件系统中的输出,提取当前负载影响下的配置约束信息,并在F“中配置取值不满足约束条件时,根据相关配置约束信息自动调整配置参数取值,方法是:In the fourth step, the dynamic monitoring module monitors the output of F" in the file system, extracts the configuration constraint information under the influence of the current load, and automatically adjusts the configuration parameters according to the relevant configuration constraint information when the configuration value in F" does not meet the constraint conditions value, the method is:
4.1动态监控模块监控F“一段时间T(可自定义,默认T=1秒)内在文件系统中的输出;4.1 The dynamic monitoring module monitors the output in the file system of F" for a period of time T (can be customized, default T=1 second);
4.2初始化变量n=1;4.2 Initialize variable n=1;
4.3动态监控模块检查时间T内cnn相关的所有监控信息序列<rcvn,psn1,opn1,locn1>,<rcvn,psn2,opn2,locn2>,...,<rcvn,psns,opns,locns>,...,<rcvn,psnS,opnS,locnS>中配置变量取值、与配置变量交互的程序状态取值是否满足配置变量交互的对应操作符描述的大小关系,其中S为T时间内F“输出的与cnn相关的监控信息总数量,<rcvn,psns,opns,locns>为其中第s次监控信息,1≤s≤S;若S个监控信息均满足,则通过检查;若S个监控信息中存在不满足的监控信息,则使用最小程序状态阈值min_threshold记录所有不满足的监控信息中与配置变量交互的程序状态取值的最小值,使用最大程序状态阈值max_threshold记录所有不满足的监控信息中与配置变量交互的程序状态取值的最大值,方法为:4.3 The dynamic monitoring module checks all monitoring information sequences related to cn n within time T <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 > whether the value of the configuration variable and the value of the program state interacting with the configuration variable meet the configuration variable interaction requirements Corresponding to the size relationship described by the operator, where S is the total number of monitoring information related to cn n output by F" within T time, <rcv n , ps ns , op ns , loc ns > is the sth monitoring information, 1 ≤s≤S; if the S monitoring information is all satisfied, then pass the inspection; if there is unsatisfied monitoring information in the S monitoring information, use the minimum program status threshold min_threshold to record all unsatisfied monitoring information that interacts with configuration variables The minimum value of the program state value, use the maximum program state threshold max_threshold to record the maximum value of the program state value interacting with the configuration variable in all unsatisfied monitoring information, the method is:
4.3.1初始化变量s=1,初始化变量最小程序状态阈值min_threshold=∞,最大程序状态阈值max_threshold=-1;4.3.1 Initialize variable s=1, initialize variable minimum program state threshold min_threshold=∞, maximum program state threshold max_threshold=-1;
4.3.2检查rcvn与psns的取值是否满足opns描述的大小关系,方法是:4.3.2 Check whether the values of rcv n and ps ns meet the size relationship described by op ns , the method is:
4.3.2.1检查opns操作符类型,若opns为“≥”,转4.3.2.2;若opns为“>”,转4.3.2.4;若opns为“≤”,转4.3.2.6;若opns为“<”,转4.3.2.8;4.3.2.1 Check the operator type of op ns , if op ns is "≥", go to 4.3.2.2; if op ns is ">", go to 4.3.2.4; if op ns is "≤", go to 4.3.2.6; if op ns is "<", go to 4.3.2.8;
4.3.2.2若rcvn取值与psns取值满足rcvn≥psns,转4.3.3;否则转4.3.2.3;4.3.2.2 If the value of rcv n and the value of ps ns satisfy rcv n ≥ ps ns , go to 4.3.3; otherwise go to 4.3.2.3;
4.3.2.3若psns>max_threshold,则令max_threshold=psns,并转4.3.3;否则直接转4.3.3;4.3.2.3 If ps ns >max_threshold, set max_threshold=ps ns and go to 4.3.3; otherwise go to 4.3.3 directly;
4.3.2.4若rcvn取值与psns取值满足rcvn>psns,转4.3.3;否则转4.3.2.5;4.3.2.4 If the value of rcv n and the value of ps ns satisfy rcv n >ps ns , go to 4.3.3; otherwise go to 4.3.2.5;
4.3.2.5若psns>max_threshold,则令max_threshold=psns,并转4.3.3;否则直接转4.3.3;4.3.2.5 If ps ns >max_threshold, set max_threshold=ps ns and go to 4.3.3; otherwise go to 4.3.3 directly;
4.3.2.6若rcvn取值与psns取值满足rcvn≤psns,转4.3.3;否则转4.3.2.7;4.3.2.6 If the value of rcv n and the value of ps ns satisfy rcv n ≤ ps ns , go to 4.3.3; otherwise go to 4.3.2.7;
4.3.2.7若psns<min_threshold,则令min_threshold=psns,并转4.3.3;否则直接转4.3.3;4.3.2.7 If ps ns <min_threshold, set min_threshold=ps ns and go to 4.3.3; otherwise go to 4.3.3 directly;
4.3.2.8若rcvn取值与psns取值满足rcvn<psns,转4.3.3;否则转4.3.2.9;4.3.2.8 If the value of rcv n and the value of ps ns satisfy rcv n < ps ns , go to 4.3.3; otherwise go to 4.3.2.9;
4.3.2.9若psns<min_threshold,则令min_threshold=psns,并转4.3.3;否则直接转4.3.3;4.3.2.9 If ps ns < min_threshold, set min_threshold = ps ns and go to 4.3.3; otherwise go to 4.3.3 directly;
4.3.3令s=s+1,若s≤S,转4.3.2;否则转4.4;4.3.3 Let s=s+1, if s≤S, go to 4.3.2; otherwise go to 4.4;
4.4动态监控模块结合监控信息序列<rcvn,psn1,opn1,locn1>,<rcvn,psn2,opn2,locn2>,...,<rcvn,psns,opns,locns>,...,<rcvn,psnS,opnS,locnS>对配置变量rcvn取值进行调整,方法为:4.4 The dynamic monitoring module combines the monitoring information sequence <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 > adjust the value of the configuration variable rcv n , the method is:
若min_threshold≠∞,将rcvn对应的配置参数取值降低为 转4.5;若max_threshold≠-1,将rcvn对应的配置参数取值增大为转4.5;If min_threshold≠∞, reduce the configuration parameter value corresponding to rcv n to Go to 4.5; if max_threshold≠-1, increase the value of the configuration parameter corresponding to rcv n to turn 4.5;
4.5令n=n+1,若n≤N,转4.3;否则当前调整周期结束,若用户停止运行F“,转第五步;否则转4.1开始下一周期调整。4.5 Let n=n+1, if n≤N, go to 4.3; otherwise, the current adjustment cycle ends, if the user stops running F", go to step 5; otherwise, go to 4.1 to start the next cycle adjustment.
第五步,动态监控模块对F“中配置参数的自动调整结束。In the fifth step, the automatic adjustment of the configuration parameters in F" by the dynamic monitoring module is completed.
与现有技术相比,采用本发明能达到以下有益效果:Compared with the prior art, the present invention can achieve the following beneficial effects:
1、采用本发明可以获得负载敏感的配置约束信息。相较于Tianyin Xu等人在SOSP2013发表的“Do Not Blame Users for Misconfigurations(不要因为配置故障而责备用户)”工作通过静态分析方法提取配置约束信息,本发明所提取的动态场景下的配置约束信息更加精确;相较于Xudong Sun等人在OSDI2020发表的“Testing ConfigurationChanges in Context to Prevent Production Failures(在上下文中测试配置修改从而预防生产故障)”工作通过模拟执行的方法提取动态配置约束,本发明可以获得真实生产环境下负载影响的配置约束信息。1. By adopting the present invention, load-sensitive configuration constraint information can be obtained. Compared with the "Do Not Blame Users for Misconfigurations (Do Not Blame Users for Misconfigurations)" published by Tianyin Xu et al. in SOSP2013, which extracts configuration constraint information through static analysis methods, the configuration constraint information extracted by the present invention under dynamic scenarios More accurate; Compared with Xudong Sun et al. published in OSDI2020 "Testing Configuration Changes in Context to Prevent Production Failures (testing configuration changes in the context to prevent production failures)" work to extract dynamic configuration constraints by simulating execution, the present invention can Obtain configuration constraints information on load impact in a real production environment.
2、本发明提供了一种调整软件配置以适应负载变化的方法,可以帮助用户自动调整配置参数取值从而满足变化负载的需求,可以避免负载敏感的配置故障,具有良好的应用场景。2. The present invention provides a method for adjusting software configuration to adapt to load changes, which can help users automatically adjust configuration parameter values to meet changing load requirements, avoid load-sensitive configuration failures, and have good application scenarios.
附图说明Description of drawings
图1是本发明第一步构建的配置参数调整系统逻辑结构图。Fig. 1 is a logical structure diagram of the configuration parameter adjustment system constructed in the first step of the present invention.
图2是本发明总体流程图。Fig. 2 is the overall flow chart of the present invention.
具体实施方式detailed description
下面结合附图2,以Httpd Web服务器软件(作为软件源码F)中配置参数“LimitRequestFields”为例对本发明进行说明。Below in conjunction with accompanying drawing 2, take the configuration parameter "LimitRequestFields" in the Httpd Web server software (as the software source code F) as an example to illustrate the present invention.
第一步,构建配置参数调整系统,配置参数调整系统由配置相关分支交互分析模块和动态监控模块组成。配置相关分支交互分析模块从文件系统读入Httpd软件源码F和配置信息文件(存储有<配置参数名称,配置变量名称>二元对列表),在Httpd软件源码F中识别定位配置相关分支交互,并进行代码插桩,将插桩后的Httpd软件源码F‘输出到文件系统中;然后用户对F‘进行编译、链接,得到Httpd可执行软件F“;运行软件F“时,动态监控模块监控F‘'在文件系统中的输出,提取并输出当前负载影响下的配置约束信息,并在F“负载产生变化导致当前配置取值不满足配置约束信息时,根据相关配置约束信息自动调整配置参数取值。The first step is to build a configuration parameter adjustment system, which is composed of a configuration-related branch interaction analysis module and a dynamic monitoring module. The configuration-related branch interaction analysis module reads the Httpd software source code F and the configuration information file (stored with <configuration parameter name, configuration variable name> binary pair list) from the file system, identifies and locates the configuration-related branch interaction in the Httpd software source code F, And perform code insertion, and output the Httpd software source code F' after the insertion into the file system; then the user compiles and links F' to obtain the Httpd executable software F"; when running the software F", the dynamic monitoring module monitors The output of F'' in the file system extracts and outputs the configuration constraint information under the influence of the current load, and automatically adjusts the configuration parameters according to the relevant configuration constraint information when the F" load changes and the current configuration value does not meet the configuration constraint information value.
第二步,配置相关分支交互分析模块从文件系统读取Httpd软件源码F和Httpd配置信息文件,从Httpd软件源码F中定位识别配置相关分支交互代码段,并在配置相关分支交互代码段位置插桩程序探针,将插桩后的软件源码F‘输出到文件系统中,方法是:In the second step, the configuration-related branch interaction analysis module reads the Httpd software source code F and the Httpd configuration information file from the file system, locates and identifies the configuration-related branch interaction code segment from the Httpd software source code F, and inserts the configuration-related branch interaction code segment position The stub program probe outputs the software source code F' after stub insertion to the file system, the method is:
2.1配置相关分支交互分析模块从文件系统读入存储Httpd软件配置信息文件,配置信息文件存储有<配置参数名称,配置变量名称>二元对列表,从配置信息文件得到软件源码F中所有的配置参数名称和对应配置变量二元对集合CS,CS={<cn1,cv1>,<cn2,cv2>,...,<cnn,cvn>,...,<cnN,cvN>},其中cnn为CS中第n个配置参数名称,cvn为CS中cnn在软件源码中对应的配置变量名称,cnn与cvn二元对关系可通过Shulin Zhou等人在QRS2016发表的“ConfMapper:Automated Variable Finding for Configuration Items in SourceCode(ConfMapper:从软件源码中自动寻找配置参数对应配置变量)”所述的从软件源码中自动寻找配置参数对应配置变量方法建立,N为软件源码F中配置参数总数,N=131(包含配置参数“LimitRequestFields”的配置变量二元对信息),1≤n≤N;2.1 The configuration-related branch interaction analysis module reads and stores the Httpd software configuration information file from the file system. The configuration information file stores a list of binary pairs of <configuration parameter name, configuration variable name>, and obtains all configurations in the software source code F from the configuration information file Parameter name and corresponding configuration variable binary pair set CS, CS={<cn 1 , cv 1 >, <cn 2 , cv 2 >, ..., <cn n , cv n >, ..., <cn N , cv N >}, where cn n is the nth configuration parameter name in CS, cv n is the configuration variable name corresponding to cn n in CS in the software source code, the binary pair relationship between cn n and cv n can be obtained through Shulin Zhou et al. "ConfMapper: Automated Variable Finding for Configuration Items in SourceCode (ConfMapper: Automatically find configuration parameters corresponding to configuration variables from software source code)" published at QRS2016 establishes the method of automatically finding configuration parameters corresponding to configuration variables from software source code, N is the total number of configuration parameters in the software source code F, N=131 (including the configuration variable binary pair information of the configuration parameter "LimitRequestFields"), 1≤n≤N;
2.2使用LLVM编译器框架的Clang前端(10.0.0版本及以上)解析Httpd软件源码F,生成F对应的抽象语法树(Abstract Syntax Tree)ASTroot,ASTroot中的每个节点都表示软件源码F中的一种结构,比如整个源码整体(TranslationUnitDecl)、函数声明(FunctionDecl)、If分支语句(IfStmt)、函数调用(CallExpr)、常量字符串(StringLiteral)、二元计算(BinaryOperator)等,且不同结构之间同样以树的结构表示相应从属关系,例如对于一个函数声明中的If分支语句,对应的IfStmt节点就位于以FunctionDecl节点为根节点的子树中;2.2 Use the Clang front end of the LLVM compiler framework (version 10.0.0 and above) to parse the Httpd software source code F, and generate an Abstract Syntax Tree (AST root ) corresponding to F, and each node in the AST root represents the software source code F A structure in the whole source code (TranslationUnitDecl), function declaration (FunctionDecl), If branch statement (IfStmt), function call (CallExpr), constant string (StringLiteral), binary calculation (BinaryOperator), etc., and different The structure also uses a tree structure to represent the corresponding affiliation. For example, for an If branch statement in a function declaration, the corresponding IfStmt node is located in the subtree with the FunctionDecl node as the root node;
2.3在抽象语法树ASTroot中定位与cv1,cv2,...,cvn,...,cvN相关的分支交互,具体方法如下:2.3 Locate and interact with branches related to cv 1 , cv 2 , ..., cv n , ..., cv N in the AST root of the abstract syntax tree, the specific method is as follows:
2.3.1在抽象语法树ASTroot中使用Clang(10.0.0版本及以上)提供的相关遍历接口(VisitNodeType形式的遍历接口,其中NodeType是指代抽象语法树中的节点类型,具体类型如步骤2.2中所述,遍历过程中使用的接口包括VisitFunctionDecl、VisitStringLiteral等分别用于遍历FunctionDecl和StringLiteral类型的节点)遍历ASTroot,定位使用cv1,cv2,...,cvn,...,cvN的代码位置,并加入到配置变量使用位置集合CL1,CL2,...,CLn,...,CLN中,CLn表示ASTroot中使用cvn的代码位置,CLn={cln1,cln2,...,clnj,...,clnJ},其中clnj表示cvn在ASTroot中第j次被使用的位置,J为cvn在ASTroot中使用位置的总数(J对应每一个cvn都会不同,因为N=131,后面对n循环时每一次J的值都可能会变化),1≤j≤J;2.3.1 Use the related traversal interface provided by Clang (version 10.0.0 and above) in the AST root of the abstract syntax tree (the traversal interface in the form of VisitNodeType, where NodeType refers to the node type in the abstract syntax tree, and the specific type is as in step 2.2 As mentioned in , the interfaces used in the traversal process include VisitFunctionDecl, VisitStringLiteral, etc., which are used to traverse the nodes of the FunctionDecl and StringLiteral types respectively) Traversing the AST root , positioning uses cv 1 , cv 2 , ..., cv n , ..., cv The code position of N , and added to the configuration variable use position set CL 1 , CL 2 , ..., CL n , ..., CL N , CL n represents the code position of using cv n in the AST root , CL n = {cl n1 , cl n2 , ..., cl nj , ..., cl nJ }, where cl nj represents the position where cv n is used for the jth time in the AST root , and J is the position where cv n is used in the AST root (J corresponds to each cv n will be different, because N=131, the value of J may change every time when facing n cycles), 1≤j≤J;
2.3.2初始化变量n=1;2.3.2 Initialize variable n=1;
2.3.3初始化变量j=1,初始化cvn的相关的候选分支交互集合Cand_BIn={},初始化cvn相关的备用配置变量集合Alternative_CVn={};2.3.3 Initialize variable j=1, initialize cv n related candidate branch interaction set Cand_BI n ={}, initialize cv n related standby configuration variable set Alternative_CV n ={};
2.3.4检查cvn和clnj是否满足以下三种场景中的使用情况,方法是:2.3.4 Check whether cv n and cl nj meet the usage conditions in the following three scenarios by:
2.3.4.1若cvn直接在软件源码F的分支语句br(软件源码F中的If语句、While语句、Switch语句)的分支条件中被使用(即作为分支判断条件的一部分进行运算后控制程序执行的控制流向),则将br加入到cvn的相关的候选分支交互集合Cand_BIn中,转2.3.5,否则转2.3.4.2;2.3.4.1 If cv n is directly used in the branch condition of the branch statement br of the software source code F (If statement, While statement, Switch statement in the software source code F) (that is, it is used as a part of the branch judgment condition to control program execution control flow), then add br to the relevant candidate branch interaction set Cand_BI n of cv n , go to 2.3.5, otherwise go to 2.3.4.2;
2.3.4.2若cvn被赋值给其他程序变量lv,且lv直接在分支语句br的分支条件中被使用,则将br加入到cvn的相关的候选分支交互集合Cand_BIn中,并将lv加入到cvn相关的备用配置变量集合Alternative_CVn中,转2.3.5;否则转2.3.4.3;2.3.4.2 If cv n is assigned to other program variables lv, and lv is directly used in the branch condition of the branch statement br, then add br to the relevant candidate branch interaction set Cand_BI n of cv n , and add lv to Go to Alternative_CV n , the set of alternate configuration variables related to cv n , and go to 2.3.5; otherwise, go to 2.3.4.3;
2.3.4.3若函数func共有I(I≥1)(I对应软件源码中出现过的相关函数调用的参数,不同函数调用参数数量不同)个参数,且cvn被函数func作为第i(1≤i≤I)个参数使用,且在函数func实现中,函数func对应的第i个形参parami直接在分支语句br的分支条件中被使用(函数实现的形参数量与函数调用的实参数量一致,表明函数func的形参parami与函数func调用时的第i个参数对应),则将br加入到cvn的相关的候选分支交互集合Cand_BIn中,并将parami加入到cvn相关的备用配置变量集合Alternative_CVn中,转2.3.5;否则直接转2.3.5;2.3.4.3 If the function func has a total of I (I ≥ 1) (I corresponds to the parameters of related function calls that have appeared in the software source code, and the number of parameters for different function calls is different) parameters, and cv n is used by the function func as the i-th (1 ≤ i≤I) parameters are used, and in the realization of the function func, the i-th formal parameter param i corresponding to the function func is directly used in the branch condition of the branch statement br (the formal parameter amount of the function realization and the actual parameter of the function call The amount is consistent, indicating that the formal parameter param i of the function func corresponds to the i-th parameter when the function func is called), then add br to the relevant candidate branch interaction set Cand_BI n of cv n , and add param i to cv n In the related standby configuration variable set Alternative_CV n , go to 2.3.5; otherwise, go to 2.3.5 directly;
2.3.5令j=j+1,若j≤J,转2.3.4;否则得到cvn相关的候选分支交互集合Cand_BIn,Cand_BIn={cand_bin1,cand_bin2,..,cand_bink,...,cand_binK},其中cand_bink为Cand_BIn集合中cvn的第k个候选分支交互,K为Cand_BIn中cvn的候选分支交互总数,1≤k≤K,(K对应每一个cvn都会不同,在对n循环时每一次K的值都可能会变化)转2.3.6;2.3.5 Let j=j+1, if j≤J, go to 2.3.4; otherwise, get the candidate branch interaction set Cand_BI n related to cv n , Cand_BI n = { cand_bin1 , cand_bin2 , .., cand_bink ,. .., cand_binK }, where cand_bink is the kth candidate branch interaction of cv n in the Cand_BI n set, K is the total number of candidate branch interactions of cv n in Cand_BI n , 1≤k≤K, (K corresponds to each cv n will be different, and the value of K may change every time when n is cycled) go to 2.3.6;
2.3.6对cvn相关的候选分支交互集合Cand_BIn中相关分支语句的分支条件和分支处理类型进行解析和识别,方法为:2.3.6 Analyze and identify the branch conditions and branch processing types of the relevant branch statements in the candidate branch interaction set Cand_BI n related to cv n , the method is:
2.3.6.1初始化变量k=1;2.3.6.1 Initialize variable k=1;
2.3.6.2通过Clang(10.0.0版本及以上)提供的接口getCond()获取cand_bink的分支条件branch_condition,并将branch_condition按照非叶子节点为二元操作符&&(表示与操作)或||(表示或操作)、叶子节点均为逻辑表达式的形式解析为二叉树,然后将包含配置变量cvn(或包含cvn在对应位置的备用配置变量acv(acv∈Alternative_CVn))的叶子节点中的逻辑表达式记为compare_condition,将其他与compare_condition相邻且使用&&节点连接的所有叶子节点使用与运算进行连接,并将连接后的逻辑表达式记为pre_condition;2.3.6.2 Obtain the branch condition branch_condition of cand_bink through the interface getCond() provided by Clang (version 10.0.0 and above), and use the branch_condition as a binary operator && (indicating AND operation) or || (indicating or operation), the leaf nodes are all logical expressions and parsed into a binary tree, and then the logic in the leaf nodes containing the configuration variable cv n (or the alternate configuration variable acv(acv∈Alternative_CV n ) containing cv n at the corresponding position) The expression is recorded as compare_condition, and all other leaf nodes adjacent to compare_condition and connected by && nodes are connected by AND operation, and the connected logical expression is recorded as pre_condition;
2.3.6.3检查compare_condition中是否只包括cvn或包含cvn在对应位置的备用配置变量acv(acv∈Alternative_CVn)、常量、及其他配置变量cvm(1≤m≤N,m≠n),若是,转2.3.6.7;否则,转2.3.6.4;2.3.6.3 Check whether the compare_condition only includes cv n or the alternate configuration variable acv (acv∈Alternative_CV n ), constants, and other configuration variables cv m (1≤m≤N, m≠n) containing cv n in the corresponding position, If yes, go to 2.3.6.7; otherwise, go to 2.3.6.4;
2.3.6.4对compare_condition进行变换,将cvn或cvn在对应位置的备用配置变量acv移到compare_condition表达式操作符的左侧,将其他所有操作数移到compare_condition表达式操作符的右侧,并将表达式右侧语句记为psnk,将表达式操作符记为opnk,将compare_condition所在分支语句代码位置记录为locnk,将当前compare_condition中出现的cvn或acv记为rcvn;2.3.6.4 Transform compare_condition, move cv n or the spare configuration variable acv of cv n at the corresponding position to the left side of the compare_condition expression operator, move all other operands to the right side of the compare_condition expression operator, and Record the statement on the right side of the expression as ps nk , record the expression operator as op nk , record the code position of the branch statement where the compare_condition is located as loc nk , and record the cv n or acv that appears in the current compare_condition as rcv n ;
2.3.6.5通过Clang(10.0.0版本及以上)提供的接口getThen()获取cand_bink的分支处理代码段handling_block,并检查handling_block中是否包含以下三种情况中的任一种:i)错误处理相关日志语句,ii)跳转语句,且跳转标签名称中包含描述错误的关键词,iii)错误处理相关函数调用,若包含任意一种情况,转2.3.6.6;若以上三种情况均不包含,转2.3.6.7; 2.3.6.5 Obtain the branch handling code segment handling_block of cand_bink through the interface getThen() provided by Clang (version 10.0.0 and above), and check whether handling_block contains any of the following three situations: i) Error handling related Log statement, ii) jump statement, and the jump label name contains keywords describing errors, iii) error handling related function calls, if any of the cases are included, go to 2.3.6.6; if none of the above three cases are included , go to 2.3.6.7;
2.3.6.6依照五元组<cnn,rcvn,psnk,opnk,locnk>信息在软件源码ASTroot的locnk位置进行插桩,插桩代码段主要功能是在软件源码F运行时记录cnn(配置参数名称)、rcvn(配置变量在该位置的取值)、psnk(与配置变量交互的程序状态取值)、opnk(与配置变量交互的对应操作符)四类信息并输出到文件系统中;对于HttpdWeb服务器软件中的配置参数“LimitRequestFields”,其五元组信息的一个实例如下<“LimitRequestFields”,r->server->limit_req_fields,++fields-read,≥,server/protocol.c:1187>;2.3.6.6 According to the quintuple <cn n , rcv n , ps nk , op nk , loc nk > information, perform instrumentation at the loc nk position of the software source code AST root . The main function of the instrumentation code segment is when the software source code F is running Record cn n (configuration parameter name), rcv n (the value of the configuration variable at this position), ps nk (the value of the program state interacting with the configuration variable), op nk (the corresponding operator interacting with the configuration variable) The information is output to the file system; for the configuration parameter "LimitRequestFields" in the HttpdWeb server software, an example of its five-tuple information is as follows <"LimitRequestFields", r->server->limit_req_fields, ++fields-read, ≥, server/protocol.c:1187>;
2.3.6.7令k=k+1,若k≤K,转2.3.6.2;否则转2.3.7;2.3.6.7 Let k=k+1, if k≤K, go to 2.3.6.2; otherwise go to 2.3.7;
2.3.7令n=n+1,若n≤N,转2.3.3;否则转2.4;2.3.7 Let n=n+1, if n≤N, go to 2.3.3; otherwise go to 2.4;
2.4对Httpd软件源码F插桩完成,共计插桩36个程序探针(包含对配置参数“LimitRequestFields”在F中使用位置的程序探针),向文件系统输出插桩后的软件源码F‘。2.4 The instrumentation of the Httpd software source code F is completed. A total of 36 program probes are inserted (including the program probes for the location of the configuration parameter "LimitRequestFields" in F), and the instrumented software source code F' is output to the file system.
第三步,人工对F‘进行编译、链接,得到可执行软件F“,并运行软件F“。The third step is to manually compile and link F' to obtain the executable software F", and run the software F".
第四步,动态监控模块监控F“在文件系统中的输出,提取当前负载影响下的配置约束信息,并在F“中配置取值不满足约束条件时,根据相关配置约束信息自动调整配置参数取值,方法是:In the fourth step, the dynamic monitoring module monitors the output of F" in the file system, extracts the configuration constraint information under the influence of the current load, and automatically adjusts the configuration parameters according to the relevant configuration constraint information when the configuration value in F" does not meet the constraint conditions value, the method is:
4.1动态监控模块监控F“一段时间T(T=1秒)内在文件系统中的输出;4.1 The dynamic monitoring module monitors the output of F" in the file system for a period of time T (T=1 second);
4.2初始化变量n=1;4.2 Initialize variable n=1;
4.3动态监控模块检查时间T内cnn相关的所有监控信息序列<rcvn,psn1,opn1,locn1>,<rcvn,psn2,opn2,locn2>,...,<rcvn,psns,opns,locns>,...,<rcvn,psnS,opnS,locnS>中配置变量取值、与配置变量交互的程序状态取值是否满足配置变量交互的对应操作符描述的大小关系,,其中S为T时间内F“输出的与cnn相关的监控信息总数量,<rcvn,psns,opns,locns>为其中第s次监控信息,1≤s≤S;若S个监控信息均满足,则通过检查;若S个监控信息中存在不满足的监控信息,则使用最小程序状态阈值min_threshold记录所有不满足的监控信息中与配置变量交互的程序状态取值的最小值,使用最大程序状态阈值max_threshold记录所有不满足的监控信息中与配置变量交互的程序状态取值的最大值,方法为:4.3 The dynamic monitoring module checks all monitoring information sequences related to cn n within time T <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 > whether the value of the configuration variable and the value of the program state interacting with the configuration variable meet the configuration variable interaction requirements Corresponding to the size relationship described by the operator, where S is the total number of monitoring information related to cn n output by F" within T time, <rcv n , ps ns , op ns , loc ns > is the sth monitoring information, 1≤s≤S; if the S monitoring information is satisfied, the inspection will pass; if there is unsatisfied monitoring information in the S monitoring information, use the minimum program status threshold min_threshold to record all unsatisfied monitoring information and interact with configuration variables The minimum value of the program state value, use the maximum program state threshold max_threshold to record the maximum value of the program state value interacting with configuration variables in all unsatisfied monitoring information, the method is:
4.3.1初始化变量s=1,初始化变量最小程序状态阈值min_threshold=∞,最大程序状态阈值max_threshold=-1;4.3.1 Initialize variable s=1, initialize variable minimum program state threshold min_threshold=∞, maximum program state threshold max_threshold=-1;
4.3.2当cnn取值为“LimitRequestFields”时,检查rcvn与psns的取值是否满足opns描述的大小关系,方法是:4.3.2 When the value of cn n is "LimitRequestFields", check whether the values of rcv n and ps ns meet the size relationship described by op ns , the method is:
4.3.2.1对于配置参数“LimitRequestFields”的插桩过程中相关五元组信息如步骤2.3.6.6所述,表明opns取值为“≥”,则检查rcvn取值与psns取值是否满足rcvn≥psns,若满足,转4.3.3;否则转4.3.2.2;4.3.2.1 For the configuration parameter "LimitRequestFields" during the insertion process, the relevant quintuple information is as described in step 2.3.6.6, indicating that the value of op ns is "≥", then check whether the value of rcv n and the value of ps ns are satisfied rcv n ≥ ps ns , if satisfied, go to 4.3.3; otherwise, go to 4.3.2.2;
4.3.2.2若psns>max_threshold,则令max_threshold=psns,并转4.3.3;否则直接转4.3.3;4.3.2.2 If ps ns >max_threshold, set max_threshold=ps ns and go to 4.3.3; otherwise go to 4.3.3 directly;
4.3.3令s=s+1,若s≤S,转4.3.2;否则转4.4;4.3.3 Let s=s+1, if s≤S, go to 4.3.2; otherwise go to 4.4;
4.4动态监控模块结合监控信息序列<rcvn,psn1,opn1,locn1>,<rcvn,psn2,opn2,locn2>,...,<rcvn,psns,opns,locns>,...,<rcvn,psnS,opnS,locnS>对配置参数“LimitRequestFields”对应的配置变量rcvn(配置参数“LimitRequestFields”在源码F中对应变量“r->server->limit_req_fields”)取值进行调整,因为此时max_threshold≠-1(见4.3.2.2,当软件负载产生变化时导致程序状态改变,进而导致max_threshold取值变化),将rcvn对应的配置参数取值增大为 转4.5。4.4 The dynamic monitoring module combines the monitoring information sequence <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 > the configuration variable rcv n corresponding to the configuration parameter "LimitRequestFields" (the configuration parameter "LimitRequestFields" corresponds to the variable "r->server ->limit_req_fields") to adjust the value, because at this time max_threshold≠-1 (see 4.3.2.2, when the software load changes, the program state changes, which in turn leads to a change in the value of max_threshold), set the configuration parameter corresponding to rcv n to value increased to Go to 4.5.
4.5令n=n+1,若n≤N,转4.3;否则当前调整周期结束,若用户停止运行F“,转第五步;否则转4.1开始下一周期调整。4.5 Let n=n+1, if n≤N, go to 4.3; otherwise, the current adjustment cycle ends, if the user stops running F", go to step 5; otherwise, go to 4.1 to start the next cycle adjustment.
第五步,动态监控模块对F“中配置参数“LimitRequestFields”的自动调整结束。In the fifth step, the automatic adjustment of the configuration parameter "LimitRequestFields" in F" by the dynamic monitoring module ends.
若未对Httpd Web服务器软件按本发明第二步和第四步进行配置参数调整,则Httpd Web服务器在面临以下场景时可能会出现负载敏感的配置故障,具体场景及故障表现描述如下:初始时HttpdWeb服务器处于较低负载中,用户访问HttpdWeb服务器的http请求头中的字段个数较少,低于配置参数“LimitRequestFields”的取值时,Httpd Web服务器可以正常提供服务;当某一时刻用户访问服务器的http请求头中的字段个数增多,超过配置参数“LimitRequestFields”的取值时,Httpd Web服务器无法为用户提供服务,给用户返回“400error”错误码,从而出现配置故障;If the Httpd Web server software is not adjusted by the second step and the fourth step of the present invention to configure parameters, then the Httpd Web server may have load-sensitive configuration failures when facing the following scenarios, and the specific scenarios and failure performances are described as follows: Initially The Httpd Web server is under low load, and the number of fields in the http request header of the user accessing the Httpd Web server is small, which is lower than the value of the configuration parameter "LimitRequestFields", the Httpd Web server can provide services normally; When the number of fields in the http request header of the server increases and exceeds the value of the configuration parameter "LimitRequestFields", the Httpd Web server cannot provide services for users and returns "400error" error code to users, resulting in configuration failures;
若针对Httpd软件源码按本发明第二步和第四步进行配置参数调整,则可以在用户访问服务器的http请求头中的字段个数增多时,自动调整增加配置参数“LimitRequestFields”的取值,使其满足大于用户http请求头中字段个数的约束条件,实现负载感知的配置参数调整,从而预防上述负载敏感的配置故障。If the configuration parameter adjustment is carried out according to the second step and the fourth step of the present invention for the Httpd software source code, then when the field number in the http request head of the user access server increases, automatically adjust and increase the value of the configuration parameter "LimitRequestFields", Make it meet the constraints that are greater than the number of fields in the user's http request header, and realize load-aware configuration parameter adjustment, thereby preventing the above-mentioned load-sensitive configuration failures.
Claims (9)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211200545.8A CN115562674B (en) | 2022-09-29 | 2022-09-29 | Load-aware software configuration parameter adjustment method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211200545.8A CN115562674B (en) | 2022-09-29 | 2022-09-29 | Load-aware software configuration parameter adjustment method |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115562674A true CN115562674A (en) | 2023-01-03 |
CN115562674B CN115562674B (en) | 2023-05-02 |
Family
ID=84742404
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211200545.8A Active CN115562674B (en) | 2022-09-29 | 2022-09-29 | Load-aware software configuration parameter adjustment method |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115562674B (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971546A (en) * | 2024-03-29 | 2024-05-03 | 中国科学院空天信息创新研究院 | A method and device for decelerating analysis and accelerating evolution of software local faults |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108804136A (en) * | 2018-05-31 | 2018-11-13 | 中国人民解放军国防科技大学 | Configuration item type constraint inference method based on name semantics |
US20180349257A1 (en) * | 2017-05-31 | 2018-12-06 | Oracle International Corporation | Systems and methods for test prediction in continuous integration environments |
CN109154896A (en) * | 2016-04-29 | 2019-01-04 | 思杰系统有限公司 | System and method for service chaining load balance |
CN114866300A (en) * | 2022-04-22 | 2022-08-05 | 中国人民解放军国防科技大学 | A method for identifying state variables of network protocol software based on replay analysis |
-
2022
- 2022-09-29 CN CN202211200545.8A patent/CN115562674B/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109154896A (en) * | 2016-04-29 | 2019-01-04 | 思杰系统有限公司 | System and method for service chaining load balance |
US20180349257A1 (en) * | 2017-05-31 | 2018-12-06 | Oracle International Corporation | Systems and methods for test prediction in continuous integration environments |
CN108804136A (en) * | 2018-05-31 | 2018-11-13 | 中国人民解放军国防科技大学 | Configuration item type constraint inference method based on name semantics |
CN114866300A (en) * | 2022-04-22 | 2022-08-05 | 中国人民解放军国防科技大学 | A method for identifying state variables of network protocol software based on replay analysis |
Non-Patent Citations (3)
Title |
---|
OLUFEMI ODEGBILE等: "Dependable Policy Enforcement in Traditional Non-SDN Networks", 《2019 IEEE 39TH INTERNATIONAL CONFERENCE ON DISTRIBUTED COMPUTING SYSTEMS (ICDCS)》 * |
SHULIN ZHOU等: "ConfInLog: Leveraging Software Logs to Infer Configuration Constraints", 《2021 IEEE/ACM 29TH INTERNATIONAL CONFERENCE ON PROGRAM COMPREHENSION (ICPC)》 * |
李云峰: "面向性能优化的配置故障诊断技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971546A (en) * | 2024-03-29 | 2024-05-03 | 中国科学院空天信息创新研究院 | A method and device for decelerating analysis and accelerating evolution of software local faults |
CN117971546B (en) * | 2024-03-29 | 2024-11-26 | 中国科学院空天信息创新研究院 | A method and device for decelerating analysis and accelerating evolution of software local faults |
Also Published As
Publication number | Publication date |
---|---|
CN115562674B (en) | 2023-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8166464B2 (en) | Analysis and detection of soft hang responsiveness program errors | |
US9021445B2 (en) | Tracer list for automatically controlling tracer behavior | |
US9389992B2 (en) | Multiple tracer configurations applied on a function-by-function level | |
US20160306613A1 (en) | Code routine performance prediction using test results from code integration tool | |
US8978016B2 (en) | Error list and bug report analysis for configuring an application tracer | |
US9298589B2 (en) | User interaction analysis of tracer data for configuring an application tracer | |
US9575874B2 (en) | Error list and bug report analysis for configuring an application tracer | |
US20150347277A1 (en) | Real Time Analysis of Tracer Summaries to Change Tracer Behavior | |
Le et al. | Log parsing: How far can chatgpt go? | |
WO2014100552A1 (en) | Test strategy for profile-guided code execution optimizers | |
US20190196936A1 (en) | Conditional wrapper for program object | |
CN110554954A (en) | Test case selection method combining static dependency and dynamic execution rule | |
CN115562674B (en) | Load-aware software configuration parameter adjustment method | |
CN112149136A (en) | Method, system and electronic device for detecting firmware vulnerability of IoT device | |
US10846206B2 (en) | Adaptive software testing | |
CN114047968B (en) | Method, system, storage medium and equipment for automatic hardware adaptation | |
CN115705250A (en) | Monitoring stack usage to optimize programs | |
CN109299004B (en) | Method and system for analyzing difference of key elements | |
Tovarnák et al. | Structured and interoperable logging for the cloud computing Era: The pitfalls and benefits | |
CN113760290A (en) | A program control method, device, computer equipment and storage medium | |
Tu et al. | A method of log file analysis for test oracle | |
Andrzejak et al. | Confguru-A system for fully automated debugging of configuration errors | |
CN112130818A (en) | Android automatic data point burying method | |
CN112181759A (en) | Method for monitoring micro-service performance and diagnosing abnormity | |
CN116225965B (en) | IO size-oriented database performance problem detection method |
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 |