1953700 叶婧鑫 第三周任务 - XLab-Tongji/2021-WorkloadSimulation GitHub Wiki
第三周任务
WESSBAS:提取用于负载测试和性能预测的概率工作负载规范(一种基于会话的应用程序系统的模型驱动方法)
2. 相关工作
相关工作负载规范(也称为工作负载描述)是由以下过程定义的:
-
首先分析应用系统的用户交互(包括其他系统)的关键特征,并将这些特征建模为工作负载模型。
-
基于会话的系统的关键工作负载特征可以分为会话内指标和会话间指标。
-
会话内指标描述了单个会话,包括会话长度、每个会话的请求数量和执行请求之间的思考时间。它们还将用户的行为描述为执行请求的序列。
-
会话间指标描述了每个用户的会话数量和随时间变化的活动会话数量(也称为工作负载强度)。我们将工作负荷描述的相关工作分为用户行为建模和工作负荷强度。
-
2.1 用户行为建模
-
用户行为要么是基于脚本的,要么是使用分析模型来指定的。用固定的用户请求序列表示单用户场景的脚本由许多并发负载生成器线程执行。这些脚本非常容易记录和执行,但几乎没有提供改变工作负载特征的机会。
-
为了更有代表性地对用户行为进行建模,引入了分析模型。
-
Menascé:基于马尔可夫链的HTTP服务器日志的图表(CBMGs),应用k -均值聚类来为类似类型的用户识别cbmg。
-
本文采用了K-means算法的改进,称为X-means。
-
Ruffo:从Web应用程序日志文件自动提取cbmg,然后从这些cbmg生成具有代表性的用户行为跟踪。基于这些跟踪,将使用性能测试工具httperf的修改版本来生成Web流量。
-
-
已经证明这些模型可以用于工作负载生成(不能处理前面提到的请求间依赖关系)
- Shams等人提出了一种基于扩展有限状态机(EFSMs)的工作负载建模形式化方法。EFSMs允许在会话中描述有效的用户请求序列。与基于马尔可夫链的方法相比,过渡是基于预定义的状态变量而不是概率的GaAs标记的。通过模拟efsms获得有效的会话。此外,还可以指定会话间和会话内的特征。结合基于CBMGs和EFSMs的建模方法可以在确保生成有效的用户请求序列的同时,启用了概率用户行为建模。
-
使用分析形式来定义工作负载模型
2.2 负载强度
-
**LIMBO:**基于DSL的定义和提取随时间变化的和动态的负载配置文件和工作负载场景,包括季节模式、长期趋势、突发和一定程度的噪声。
-
**预测工作量强度的方法 :**基于决策树和反馈周期选择合适的预测方法,以提高预测精度。
-
**WESSBAS:**专注于用户行为的规范,并为建模工作负载强度提供基本支持。
2.3 工作负载提取
-
工作负载的提取通常基于请求日志,设计规范,如UML图,或专家知识。
-
引入一个抽象的中间模型,该模型定义了独立于所使用的技术的工作负载规范。UML图用作创建抽象中间模型的输入。这些模型实例被转换为负载测试工具Visual Studio load test和HP Loadrunner。
-
由于UML图经常不可用或者不够详细,建议从日志文件中提取中间语言WESSBAS-DSL,同时考虑到协议信息和请求间的依赖关系.
2.4 性能模型的工作负载建模
-
架构级性能模型允许对使用行为进行建模,还允许工作负载强度的规范。
-
**性能模型自动生成:**关注于SUT的系统特定细节的自动提取,比如系统组件、组件之间的关系、组件分配和资源需求。(工作负载规范仍然必须手工建模,这需要性能专家的大量工作)
-
为了降低从架构级性能模型生成不同类型分析性能模型的复杂性,引入了PUMA或Klaper等中间语言。这些方法只关注基于模型的性能评估,不支持基于会话的应用程序系统的工作负载规范的定义。
-
Barna等人提出了一种将基于模型的性能测试与基于web系统的负载测试相结合的方法。在他们的方法中,SUT被建模作为一个两层排队模型。然后,从软件和硬件瓶颈饱和的模型中推导出工作负载混合和工作负载强度。最后,导出测试用例并在SUT上执行。该模型是基于SUT的反馈回路自动调整的。与WESSBAS相反,用户行为是在事务级聚合的,例如购买事务,而不是单用户交互。
3 工作规范
3.1工作量规范形式化
本文描述的方法建立基于会话的系统生成概率和强度变化的工作负载之上。工作负载规范形式(工作负载模型)由以下组件组成:
-
应用模型,指定允许的服务调用序列和生成有效请求的特定于suit的细节。
-
行为模型,每个模型提供用户会话的概率表示,根据调用的服务和后续调用之间的思考时间作为马尔可夫链。
-
行为组合,指定为在工作负载生成期间单个行为模型发生的概率。
-
工作负载强度,包括一个函数,指定工作负载生成执行期间并发用户数(可能变化)。
-
工作负载生成流程
3.2 WESSBAS-DSL
-
WESSBAS-DSL:
- 表达工作负载模型的语言。
- 独立于特定的性能评估工具,但它包含生成基于所描述的工作负载建模形式的工作负载规范所需的所有核心信息.
- 在我们的方法中,WESSBAS-DSL被用作一种中间语言,一方面是构建特定于sut但与工具无关的工作负载模型,另一方面是生成负载测试工具和性能模型的相应输入。DSL结构提供了高度的灵活性和可扩展性。
-
关于WESSBAS-DSL中工作负载规范的类和关系,父类工作负载模型由应用程序模型、工作负载强度、行为混合和行为模型组成。
-
应用程序模型的表示对应于该组件的两层结构,包括用于会话层和协议层的EFSMs。
- 会话层EFSM的状态,简称为应用程序状态,与服务和协议层EFSM相关联,服务是用例。
- 协议层EFSM的状态与特定的请求相关联,这些请求可能是HTTP、Java、BeanShell、SOAP等类型。通过从公共基类派生额外的子类,可以轻松扩展当前支持的请求类型集。
-
行为模型被建模为马尔可夫链,每个马尔可夫状态也与一个服务相关联。因此每个马尔可夫状态被精确地分配到会话层的一个应用程序状态。行为模型的转换被标记为概率和思考时间。目前支持的思考时间是高斯型的,也就是说,它们遵循一个正态分布,表示平均值和(标准)偏差值作为参数。退出状态是显式建模的,它们不与服务相关联,因为它们不向用户提供服务。每个行为模型都与定义Behavior Mix的相对频率相关联,并将其存储为专用类中的双精度值。这些频率包含在行为组合中。工作负载强度以字符串属性的形式存储在专用类WorkloadIntensity中,该类还可以作为所有类型的工作负载强度的基类。工作负载强度可以指定为定义可变工作负载的公式,也可以指定为固定工作负载的固定数字。
4. 提取WESSBAS-DSL实例
基于记录的系统日志自动提取WESSBAS-DSL实例的过程,具体为:
-
从生产系统提取会话日志
-
基于聚类的行为组合提取
-
工作负载强度提取
-
GaAs(guards and actions)的自动学习
-
条件概率计算
-
从Behavior Mix生成一个完整的WESSBAS-DSL实例
5. 生成JMeter测试计划
给定的WESSBAS-DSL实例可以转换为相应的JMeter测试计划。我们为众所周知的负载生成器Apache JMeter开发了一个名为Markov4JMeter的公开可用扩展,它允许我们定义和执行这些工作负载规范。JMeter支持生成各种类型系统的工作负载,而不限于基于web的系统。测试计划生成器读取一个序列化的WESSBAS-DSL实例,并构建一个进一步的XMI结构,可以由JMeter工具处理。
6.转换到性能模型
从WESSBAS-DSL实例到Palladio组件模型(PCM)工作负载规范的概念验证转换。
6.1 Palladio组件模型
-
PCM是一种特定于领域的建模语言,它允许预测服务质量属性(QoS),它由五个互补的模型类型组成。
-
中心模型类型是Repository model对软件组件、组件操作以及它们之间的关系进行建模。
-
组件可以提供一个接口来为其他组件提供操作,或者需要接口来访问来自其他组件的操作。
-
建模的组件组装在系统模型中,以表示应用程序系统。资源容器(如服务器)及其相关的硬件资源在资源环境模型中建模,而分配模型定义了对资源容器中组装组件的分配。使用模型定义系统的工作负载。
6.2 性能模型的生成
使用Brunnert提出的方法来生成性能模型的系统特定部分。Java EE Servlet过滤器用于收集关于对Web组件的请求数据。然后,创建性能模型并集成每个组件调用的平均CPU需求。仅在对web组件的请求级别上创建性能模型,而不进一步分割成其他组件,对于每个模拟请求,将使用测量到的平均CPU时间进行性能预测。
6.3 转换
PCM使用模型只提供了对复杂工作负载建模的基本支持。因此,我们不能仅仅将WESSBAS-DSL转换为使用模型,还要将工作负载规范的一部分生成到存储库模型中,这种方法不需要扩展PCM元模型。
-
首先,加载由性能模型生成器在上一步中生成的PCM存储库模型,并为WESSBAS-DSL的每个行为模型生成一个新组件,该组件具有表示组件之间关系的相应接口。
-
对于行为模型的每一个马尔可夫状态创建一个RDSEFF(RDSEFF以类似于UML活动图的方式描述组件操作的性能相关行为,使用输入参数传递保护条件的值)
-
每个RDSEFF中表示当前马尔科夫状态到其后继马尔科夫状态的转换。通过这种方式,允许的服务调用序列由马尔科夫状态本身控制。每个RDSEFF由一个分支组成,在这个分支中表示为输入参数的保护。
- 首先使用保护的分支转换进行计算。
- 对于每个有保护的转移,建立了一个具有概率转移到下一个马尔科夫状态的转移的转移模型。
- 如果一个守卫的分支转换是假的,其余转换的概率必须调整为100%。
-
在存储库模型中创建行为模型组件之后,每个新创建的组件都被分配到系统模型中,并与分配模型相对应。一个新的使用模型由一个表示行为混合的概率分支生成。对于每个创建的行为模型组件,将创建一个具有调用概率的相对频率的分支转换。行为模型的初始马尔可夫状态在这个转换中被调用。最后,工作负载强度被建模为封闭的工作负载。
7 评价
五个问题
1 聚类结果与输入的行为组合匹配的准确性
-
两个步骤:
- 聚类的准确性是基于已知聚类个数的假设确定的。
- X-means算法在第二步中确定这个数字。
-
结论:验证三种事务类型,集群结果明显更好。
2 集群结果对执行和预测工作负载的工作负载特征的影响
① 第一种
- 使用了World Cup 98 Web site 日志(这些日志由一个典型的网络服务器在大约三个月的时间内记录的。每个日志条目都包含一个唯一的客户端标识符)
- 通过分析集群结果对服务器端基于会话和基于请求的度量的影响,原始度量使用使用JMeter和PCM执行提取的工作负载规范获得相应的度量。
- 结论:
- 聚类能够识别不同类型的用户组。
- 基基于会话的度量是相似的,主要区别在于原始工作负载包含由代理引起的非常长的会话。
- 与原始工作负载相比,服务器端请求计数具有代表性。
② 第二种
- 由SPECjEnterprise2010生成日志
- 结论:
- 合成的分布是相似的,但与原始工作负载有很大的不同。
- 集群结果对基于会话的度量(会话长度和不同会话类型的数量)的影响。
- 可以观察到两个、三个和四个集群的合成工作负载之间没有显著的统计差异。
- 会话长度分布和不同的会话数量都偏离了原始工作负载的特征。
- 会话长度分布的偏差主要是由大量合成的长会话引起的。
- 从服务器的角度来看,合成的SPECjEnterprise2010在请求的分发方面具有代表性。
3 使用生成和预测的工作负载,生产系统SUT的性能特征与性能特征匹配的准确性
- 分析产生CPU利用率,每个请求服务器端响应时间类型和堆使用情况。
- Faban Harness、JMeter和PCM 进行比较
- 结论:
- 使用PCM预测的平均响应时间与使用Faban的响应时间相似,但表明非常低的响应时间偏差。由于生成的性能模型模拟每个请求类型的平均CPU需求,因此预期偏差较小。
- 对比Faban和JMeter的响应时间,除购物车和取消订单外,平均响应时间和偏差相似。Faban基准测试驱动程序在过渡阶段之前对数据库执行几个读写操作(Faban初始化),堆的使用增加了大约1GB。为了使堆的使用具有可比性,我们还在启动JMeter之前执行了Faban初始化阶段,Faban (2.35 GB)和JMeter (2.23 GB)的平均堆使用情况十分相近。
4 当对提取的工作负载应用不同的工作负载设置时,工作负载和性能特征匹配的准确性
- 对工作负载分别模拟,然后再次与Faban运行的工作负载和性能特征进行比较。
- 结论:当工作负荷强度和行为组合的设置发生变化时,提取的工作负荷和模拟工作负荷的性能特征与原始工作负荷具有可比性。
5 GaAs对工作负载和性能特征的影响
- 手动修改Purchase事务(由于SPECjEnterprise2010的事务以不允许无效用户序列的方式设计的,唯一无效的用户序列可能出现在Purchase事务中),在用户(50% B, 25% M, 25% P)提取的会话日志中添加了人工会话。
- GaAs对性能评估结果的影响很大,这取决于用户操作的控制流程。将条件概率与GaAs结合使用,工作负载特征与最初测量的工作负载特征相似。只有不同会话的数量较低,因为不可能有无效的用户序列。我们仅针对JMeter评估GaAs的影响,因为性能模型生成器只使用每个请求类型的平均CPU值,而不考虑参数依赖关系,如购物车中的物品数量。这导致了一个事实,即模拟的CPU需求是相同的,不管是否商品是否在购物车里。因此,使用考虑此参数依赖性的PCM模型将会得到类似的结果。