论文部分内容阅读
随着软件系统规模日益增加,软件中非功能属性配置项数量也不断增更多。软件配置相关的软件性能瓶颈已经成为软件性能下降的重要原因之一,理解配置项如何影响软件性能对检测配置相关的性能瓶颈至关重要。检测配置相关的性能瓶颈可以帮助开发人员更好的理解配置对软件运行状态的影响,更快的定位问题所在以及修复软件性能问题,提高效率。已有工作主要分为两类:机器学习和性能分析方法。机器学习方法构建软件性能和配置项的模型;然而,构建准确度高的性能模型会产生不可接受的代价,并且这种模型受许多外部因素(例如,系统环境和工作负载)的影响。传统的性能分析方法通过代码插桩以检测每个方法的运行时间,不可避免地引入更多的开销。本课题从资源的角度提出配置与软件性能之间的新观点,配置项通过影响资源使用来影响性能,即配置相关的性能问题是由于资源相关的配置项引起的。本课题研究了75个与配置相关的性能问题以验证本课提出的假设,设计并实现了一个工具CBHunter,基于资源依赖分析以检测软件配置相关的性能瓶颈,即通过对配置项影响代码块打分以量化该配置项对性能的影响程度,然后利用性能分析的方法检测软件配置相关的性能瓶颈。本课题的主要工作有以下几个方面:1、从Apache的bug report系统筛选75个配置相关的性能问题,同时筛选50个资源相关的配置项。分析软件源码验证了本课题提出的配置通过影响软件资源的使用来影响软件性能。同时,本课题统计导致75个配置相关的性能问题的资源类型,经统计发现,CPU、内存和I/O是导致性能问题较多的资源类型。2、从配置项通过影响资源使用来影响性能的观点出发,CBHunter通过资源依赖分析的方法自动对配置项打分排序。CBHunter首先对配置项切片,获取配置项影响的所有语句,并根据不同类型语句的基础分,同时针对处于循环或者分支中的语句,利用in-house测试的方法计算分支执行的概率和循环执行的次数,计算每个配置项的得分并对它们排序。实验结果表明,在排名前10%的配置项中导致性能问题的配置项占比达到80%。3、CBHunter实现了检测性能瓶颈的自动框架。CBHunter对排名前10%的配置项影响的语句插桩,通过运行测试程序,以检测软件由配置导致的性能瓶颈。本课题将CBHunter应用于6个性能问题,实验结果表明,CBHunter检测出5个配置相关的性能瓶颈,与JAVA的标准性能分析工具HPROF对比,CBHunter检测配置相关的性能瓶颈能力是HPROF的5.9倍。基于资源依赖分析和动态插桩分析,CBHunter能够检测影响软件性能的配置项,有效降低配置空间维度;其次,减少动态分析的插桩数量,降低测试的运行开销,提高开发人员诊断性能问题的效率。