记一次磁盘性能测试
作者:网络转载 发布时间:[ 2013/12/17 10:56:43 ] 推荐标签:
测试过程
一、测试脚本的准备与验证
1.编写运行在云主机上的测试脚本
该脚本主要用于触发Fio进行测试,并制定log文件的存放路径。
2.将测试脚本及监控脚本拷贝至云主机
为了让测试过程尽可能自动化,在宿主机上将必要的文件分发到特定云主机上执行。需要的文件有测试脚本及负责监控的脚本。
3.ssh远程执行云主机上脚本
宿主机上通过ssh命令使云主机上测试脚本运作,并触发监控脚本对资源使用情况进行记录。
4.收集结果数据拷贝回宿主机
云主机上测试结束后,统一将各个轮次结果拷贝回宿主机归档,便于后续集中处理。
二、指标监控的实现
使用Perfease进行资源监控。 工具介绍链接:http://doc.hz.netease.com/pages/viewpage.action?pageId=16782036
三、测试结果的收集与整理
使用monitor.sh会将测试过程中所有的指标数据统计并保存到文件中。而为了保证监控数据的有效性,监控的时效往往略小于真实测试时间。此外专门编写了脚本来计算各指标的平均值,但将各轮测试的结果挑选出来放进报告中颇为费时。
而在整理数据的过程中,可能会遇到一些问题,例如同一用例跑两轮,两轮结果误差较大。当误差超过5%时,基本可以认定其中有一组数据无效。需要再跑一轮测试进行验证。
还有可能会发现,结果数据是准确的,但与对应场景预期的结果不符。这种情况可能是脚本参数设置不对,也有可能暴露了其他问题。需要对这种情况需要找开发了解相关背景信息,进而定位原因。
测试结论与总结
针对四个测试点的测试目的分别对测试结果进行提炼总结,结果与测试前的预期相符:
通过测试不同规格的云主机磁盘性能,各云主机iops比例与云主机磁盘空间比例相近,可以验证磁盘QoS起了作用。
随着宿主机磁盘负载增加,云主机iops快速下降;await与svctm差值增大,表明IO在请求队列中的时间增加;%iowait增大,cpu等待io时间变长。
宿主机磁盘空闲时,单台云主机磁盘负载增加,对其他云主机的磁盘性能影响很小。多台云主机负载增加时,其他云主机IO等待时间变长。
随着云主机磁盘负载增加,宿主机iops减少,await与svctm差值增大,说明IO请求在队列中时间增加。
预测试的重要性
预测试是指在正式测试之前对基本功能的一个基本验证。在这个过程中进行一些探索和验证,小规模的模拟正式测试来提前暴露一些问题,终降低测试成本与风险。
这几个月下来的工作给我的体会是,性能测试过程似乎具备这样的特点:
测试工具需要设置多项参数来实现业务规模、场景负载等条件,各项指标间可能需要捆绑设置。即测试条件较复杂。
执行一个轮次下来往往时间很长,且大多数测试工具在执行完成后才会出具结果报告。即测试时间较漫长。
测试环境要保证前后一致。测试进程尽量独占整个系统,避免测试外的因素影响终结果。
鉴于以上几点,如果因为测试脚本或测试环境的原因影响了结果,则会造成很大的时间损失。而引入预测试的目的,是帮助我们提前检验测试脚本和测试环境,估量实际测试时间并发现需要人工介入的时刻。
此外,由于预测试帮助我们快速地领略了一遍测试过程的“生命周期”,正式测试时会更加得心应手。
及时发现问题
即便使用预测试来提前收集测试信息,但如何能够确保测试脚本和测试环境不出一点问题呢?很多时候我们发现不了错误是因为我们根本不知道自己犯了错误。
“实践是检验真理的方法”,确保能发现的问题已经解决后,只好提心吊胆地开始正式测试了。
测试执行过程虽然漫长,但不能掉以轻心,时刻关注新鲜出炉的结果数据。若结果表现与预期不符,要及早定位问题:是系统误差,还是测试工具设置不对,还是数据收集时统计错了目标?
越早发现问题,越能节省成本。
向测试自动化靠拢
由于测试需要关注宿主机与云主机两方面的资源情况,监控数据需要分别收集。且测试用例设计了各种负载梯度,造成测试脚本和Fio的job文件偏多,需要对应分发到各个云主机上。这些都是繁琐但不可缺少的环节,为了防止人工操作带来的失误,在这些机械的操作尽可能地编写脚本令其自动实现。
自动化除了可以用来分发测试脚本、收集测试数据,还可以对新分配的云主机进行初始化,例如安装必要的工具包、更新软件源等等操作。
总而言之,自动化是一项提高效率,避免机械繁琐操作的好思路、好方法。磨刀不误砍柴工,花一点时间编写自动化工作的脚本,能为后续工作带来极大便利。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。