一、Benchmark(基准)简介
基准测试(benchmarking)是一种测量和评估软件性能指标的活动(是一个评价方式)。在某个时候通过基准测试建立一个已知的性能水平(称为基准线)。其在整个计算机领域有着长期的应用,计算机领域应用最成功的就是性能测试。
二、Benchmark的组成
Benchmark的核心由3部分组成:数据集、工作负载、度量指标。
三、工具
1.集成式测试工具
1)ab:Apache Http服务器基准测试工具。它可以测试HTTP服务器每秒最多可以处理多少请求。如果测试的是WEB应用服务,这个结果可以转换成整个应用每秒可以满足多少请求。只能对单个URL进行尽可能快的压力测试。ab详细信息
2)http_load:这个工具概念上和ab类似,也被设计为对web服务器进行测试,但比ab要更加灵活。可以通过一个输入文件提供多个URL,http_load在这些URL中随机选择进行测试。也可以定制http_load,使其按照时间比率进行测试,而不仅仅是测试最大请求处理能力。详细信息
3)Jmeter:Jmeter是一个java应用程序,可以加载其他应用并测试其性能。可以进行web应用、FTP服务器、或者通过jdbc进行数据库查询测试。它可以通过控制预热时间等参数更加灵活地模拟真实用户的访问。同时拥有绘图接口,可以对测试进行记录,然后离线重演测试结果。
2.单组件测试工具
1)mysqlslap:可以模拟服务器的负载,并输出计时信息。
2)mysql benchmark suite:在mysql的发行包中也提供了一款自己的基准测试套件,可以用于在不同数据库服务器上进行比较测试。它是单线程的,主要用于测试服务器执行查询的速度。结果会显示哪种类型的操作在服务器上执行得更快。
3)super smack:是一款用于mysql和postgresql的基准测试工具。可以提供压力测试和负载生成。可以模拟多用户访问,可以加载测试数据到数据库,并支持使用随机数据填充测试表。
4)sysbench:是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如:可以用来测试文件i/o、操作系统调度器、内存分配和传输速度、POSIX线程,以及数据库服务器等。
四、Benchmark特征
1.可重复性:可进行重复性的测试,这样做有利于比较每次的测试结果,得到性能结果的长期变化趋势,为系统调优和上线前的容量规划做参考。
PS:这种特质是为了满足基准测试的日常轮询需要。
2.可观测性:通过全方位的监控(包括测试开始到结束,执行机、服务器、数据库),及时了解和分析测试过程发生了什么。
3.可展示性:相关人员可以直观明了的了解测试结果(web界面、仪表盘、折线图树状图等形式)。
4.真实性:测试的结果反映了客户体验到的真实的情况(真实准确的业务场景+与生产一致的配置+合理正确的测试方法)。
5.可执行性:相关人员可以快速的进行测试验证修改调优(可定位可分析)。
五、Benchmark测试需要考虑的因素
1.交易配比:某些业务场景,一个流程包含多个事务,在模拟并发中,不同的事务各自的占比;
2.突发性的读写操作:某些特殊业务场景,会有短时的大流量冲击或者请求数量骤减,该如何模拟(浪涌测试);
3.系统配置:不同环境的系统配置不同,测试结果如何换算、如何对比?
4.测试时长:测试执行过程中,运行多长时间,不同交易运行的时间分配等;
5.结果展示类型:平均值、峰值、百分比值如何展示,如何对比?
6.成功/失败占比:每次测试过程中,成功和失败的事务占比统计;
7.是否可重现:如测试过程中出现报错或某些异常情况,是否可以重现?
8.是否可对比:是否有其他测试工具或者测试结果进行对比(尽量多次执行测试,进行测试结果对比:标准方差、正太分布了解一下?)?
六、Benchimark测试步骤
1.观察
我们假设系统管理员购买了一台服务器,现在看看它的最佳性能。第一步是确定服务器预期任务。其将作为一个虚拟平台还是运行一个专门的应用程序?确定这些问题之后,就可以开始基准测试了。切记,测量标准和基准测试将根据测试内容和使用的设备而有所变化。例如,如果作为数据库系统可能会强调处理器测试,而用于网络服务系统的话可能会突出网络性能。
2.假设
在这个步骤,工程师设定一个基准目标。假设什么或者测试需要完成什么?简单地进行一个度量测试将得出一些试验结果,但是没有方向或明确的目标的话,这些结果可能是无用的。为测试创建一个基本的目标,并且所有的测试方法都围绕这个目标。例如,工程师可能会设法测试其占用的内存以让应用程序处于最佳运行状态。他或她可能因此推测,给定“X”内存大小可以达到最佳工作负载。这可以立足于以前的研究,供应商提供的基准或其他的来源。确保你的假设是可测试的。也就是说,不要提出一个只是基于数据的而基准测试却无法证实的假设。
3.预测
接下来,对服务器基准测试做一个大体预测。假设该设备将被作为一个专门的应用服务器。系统管理员能够预测,为工作负载增加额外的核心,设备性能将提升,同样,应用程序的性能也将会改善。在某些情况下,工程师甚至可以预测改善的比例,并希望通过基准测试进行验证。
4.环境控制
变量设置。例如,可能要给服务器分配一些核心。此时,管理员每次应只更改一个设置,直到他或她能够接受在此基础上的性能变化。工程师可能需要给服务器设置为6GB的内存,并测试其与其他设备相互配合的情况(CPU、影像、硬盘以及相关联的设备)。设置不同的变量,包括修改处理器设置,但其他设置都处于最初状态。
5.测试
变量都设置好之后,现在开始进行测试。从基准线开始进行测试(已知的起点),并有系统地调整服务器设置。每个测试序列都会有一个结果,记录结果以便以后引用。在这种情况下,一个测试序列可看做是一次硬件设置更改。每应用一次新的设置,都必须重新进行测试并记录结果。一旦有足够的运行周期,工程师应该有一份完整的数据以完成他们的推论。
6.推论和结论
进行测试并确认应用程序的实际性能以及给定预计资源或设置后的性能。例如,在只有一半数量的预期核心后,确定应用程序的最佳运行效果。从这点起,确定核心与其他当前变量(所需的内存大小、当前运行的应用程序数量、软件升级/服务包等)结合给服务器提供的最佳性能。注意,任何变量的改变都需要进一步实验。
(基准测试应该在相同的环境条件下进行,这样才能进行结果比较分析。)
七、Benchmaark测试数据的实际用途/意义
1.了解系统性能基准作为参照物(性能问题发生后的测试很难了解系统性能基准)
2.识别系统或环境的配置变更对性能响应带来的影响
3.为系统优化前后的性能提升/下降提供参考指标
4.观察系统的整体性能趋势与拐点发生,及早识别系统性能风险
八、Benchmark的重点
基准测试的工作重点是统计分析:可以从以下几个维度去进行统计:
1.选择合适的测试工具,设定合理的测试方法以及需要确认的系统性能指标;
2.选择不同的测试工具,对测试结果进行对比,选择稳定且能反应系统真是性能表现的结果;
3.多次执行测试,收集大量的测试数据集和指标;
4.从不同维度解读分析数据,生成报告。
九、Benchmark的局限性
基准测试不能替代好的设计,不管是混合存储还是全闪阵列,只要能正确补充存储,终端用户都会获得足够高的IOPS尽管后端磁盘性能可能不够而造成缓存不中等。因此,需要充分发挥每个存储层级的性能以补偿缺陷。
特别是遇到混合存储的时候,需要考虑的一点即是性能上的短板效应。正因为如此,无需快速访问的数据应该放在相对稳定一些的后端磁盘上。比如说在一些时候,后端如果使用了15000转速的磁盘,即便前端缓存大小适中也妨碍不大。
如果这样的话全闪存阵列则更为容易去衡量及评估因为不再需要考虑多级存储之间的关系。在这种情况下,需要了解SLC及MLC两种闪存之间的区别。虽然MLC较SLC慢,需要知道的是即便如此,其比传统硬盘还是会快很多。在许多场景下,MLC也许就足以满足加速的需求。
版权归原作者 study_code_ing 所有, 如有侵权,请联系我们删除。