简介:一个合格的性能测试专员该具备哪些技能?性能测试真的仅仅只有测试吗?没那么简略!
我是阿里云弹性计算性能测试负责人西邪。
我从 2018 年开始组建阿里云弹性计算的性能测试团队,从要一周实现一组性能测试,到只需 1 分钟就能够触发一组全自动性能测试,到最初后果整顿一键搞定,外部命名为开天斧。
当初开天斧曾经承当整个弹性计算所有的性能测试工作:新技术、新设施、新规格等等,保障了线上的性能稳定性。在性能测试的同时,还要负责解决客户的性能问题。期间还负责了“变形金刚”这个我的项目,把物理机的底层资源管理产品化了,使得当初线上变幻无穷的规格,只需一个模板就能够简略实现。
这里就先跟大家分享下这 3 年在性能测试上的一些播种。
什么是性能测试?
性能测试不同于功能测试,功能测试验证的是某个性能是否实现,性能测试验证的是某个性能是否达到。
验证性能就须要很多性能“标尺”,如掂量 CPU 性能:通过 SPEC CPU,UnixBench 等;掂量网络性能用 netperf,iperf,sockperf 等等;掂量存储性能最好用的是 fio,掂量内存带宽性能则是 stream。
上述说的都 micro Benchmark,通常如果某块做的不好,就能够间接提缺点给相干的团队去优化;而客户理论感知的是实在业务场景,那就须要去模仿客户的场景,比方客户常常应用的是 nginx,redis,MySQL 等,通过理论的场景测试,来验证以后服务器的优劣。通过做好性能测试,能力建设本人的底气,做好性能剖析,能力晓得哪里单薄,从而往哪里发力!
性能测试要做哪些?
性能的重要性无需多言,我就间接略过了。一个服务器有 5 大块:CPU、内存、存储、网络、OS。对,就是验证这些模块的性能,下面也简略介绍了下该用哪些工具进行性能测试。然而对于性能测试而言,如果仅仅是一个测试,那太简略了,实际上还须要思考很多。
性能次要能够看以下几个方面:
- 用什么工具来验证?性能测试的齐备性如何保障?如何疾速继续构建性能测试,手工跑就间接废了,工程化如何构建?
- 性能测试怎么设计?如何针对性去设计?性能测试其实是去测试一个预期。
- 进去的性能数据怎么剖析,重点关注哪个?
- 性能有差别?为什么有差别?虚拟化问题,物理机问题,OS 问题,Benchmark 问题?还是 …
- 如何去剖析异样性能数据?这个问题个别是通用业务团队的架构师能力解。
可能光谈问题还是形象了点,我再具体举几个例子。
先谈与 CPU 相干:
● Intel、AMD、ARM 差别?指令差别
● CPU 不同代数差别
● CPU 主频、基频、睿频、P0-n、P0-1
● CPU 是否 PIN 住
● 超线程开关:底层开关、OS 开关
● NUMA 架构:membind、interleave…
● 电源策略: performance、powersave、C-State 分割
● TDP: 睿频不符预期时看下 TDP 是否限制住了,很有用!
● L3 Cache 大小
● 内存带宽、内存时延
● OS:内核版本、CPU 破绽开关
● CPU 微码
● 软件:glibc 版本等
● 不同版本、非凡编译器:AOCC、icc
下面的这些都是 CPU 须要具备的基础知识,甚至还须要深刻底层去看问题,比方看底层 CPU 的 PMU 相干的一些货色。同样其余模块常识也是必不可少的。
除了常识具备外,每个模块测试齐备性也很重要,比方剖析网络性能数据,重点看上面这些性能:
● 网络带宽:多流、单流
● 网络 PPS:多流、单流
● 网络 session 连接数
● 网络新建连接数
● 网络时延
● 网络长连贯、网络短连贯性能
● 网络并发性能:上述性能在多个机器的状况下,并发成果是否连续
● 网络性能稳定性:网络压力变大(pps 变大或者带宽变大或者 session 数变大),时延的稳定性
● 网络丢包率、重传率
网络性能数据进去后,那这些数据又怎么看呢?下图是一个常见分位图:
绝大多数状况,在剖析定义一个数据的时候,不能单单看 min、average、max,倒是分位数性能数据十分重要,还有稳定率。
如果这些问题你都能很好答复,想必你就是一位功力深厚的大侠了。
为什么性能测试没那么简略?
性能测试如果仅仅是一个测试,还算简略。当然简单的测试也很简单,比方干扰测试(模仿吵闹街坊)。但总的测试而言,就是一个工程自动化,效率晋升的伎俩。
那难在哪里?
难在上节的话题是否执行到位。比方内存时延,在 Intel 的 CPU,整机状况下是 2 个 NUMA NODE,底层是 2 个 CPU,那么须要思考以后 Node 的内存时延,以及跨 Node 的内存时延。晓得这些后,那么前面利用体现进去的景象才可能有相干解释。
举个例子,把一个性能测试步骤合成开来,如下:
这里只有一个环节:test 环节,须要的功力浅。这存在一个误会,很多人认为性能测试就是“test”这一环节,当然不是!
breakdown,design,analyse,如果不是一个经验丰富的性能工程师,怎么可能 breakdown,desgin,甚至 analyse。
举个例子:Intel Cascadelake CPU 性能测试。breakdown 的时候,你须要很多背景常识,这些背景常识会决定你前面的性能剖析预期。
- 与 Skylake CPU 的区别:主频设置,CPU 代数差别等。
- 虚拟化计划:是否 PIN 住,是否跨 Socket。
- 底层技术适配:网络存储有无优化。
- 实例状态:有哪些规格,CPU 如何绑定。
等等 ……
接下来是性能测试,在测试一个系列的性能测试时,须要一套残缺的性能测试计划,做个全方面的比照。这块业界只有 SPEC CPU,SPEC JBB,UnixBench 等一套成熟的 CPU 性能测试,然而没有齐备服务器性能测试计划,这使得客户上云变得很迷茫,怎么全面掂量云服务器的性能呢?这些都须要积攒丰盛,并造成一个残缺体系。
等到性能测试完结,就须要去做性能剖析,之前讲了如何看网络性能数据,但有时也会有些奇怪的数据须要去解释。
举个理论例子:比方网络单流的性能测试。有时候会发现稳定很厉害,起先认为是网络性能不稳固,后通过理论排查,发现有概率产生中断的 CPU 与网络过程所在 CPU 在同一个核的时候,性能就会十分差,通过 taskset 硬性隔离开,中断和网络测试过程别离在不同的 CPU 上,网络单流性能就下来了且稳固。
所以,性能测试难就难在 常识储备够不够厚、是否充沛了解业务性能、性能设计以及最终的性能剖析,以及对于数据后果预期的确定等,这些都非久而久之之功!
那有什么破解之法呢?我认为次要有三点:
好学 :如果把一个业务零碎从上到下去剖析,每一个都能够倒退开来:业务架构、OS、一门语言、底层虚拟化、CPU 微架构都是值得学习。 举荐《性能之巅》这本书,能够领你入门。
勤:每一个 Case 都是一次机会,值得好好去钻研。
钻研:必定会遇到问题,遇到问题不摈弃不放弃,发挥 Geek 精力!
性能测试人员须要具备的基本技能
文章最初,再分享下我认为性能测试人员应该具备的基本技能。
计算机体系常识:计算机组成原理、操作系统、编译原理、计算机网络、软件测试、Linux 内核剖析 … 大学的课程都须要了。岂但要有书本知识,还能结合实际问题进行剖析。
架构思维:任何一个需要,问题,都须要站在一个很高的地位去扫视问题,去思考如何设计;特地是客户的问题,以后架构是否正当,呈现这个问题有哪些方向。
自动化测试:如何把这些手工的测试自动化,是解放生产力必须的,同时能力轻松去实现线上巡检。针对非凡问题,还须要具备构建非凡的测试案例能力。
剖析技巧:应该熟练掌握各种性能剖析的工具:top、vmstat、mpstat、pidstat、iostat、sar、火焰图等,高阶如 BPF 技巧。
理论工作教训:这个在设计 Case 的时候太重要了,他晓得什么要什么不要!
钻研精力:一个零碎波及的畛域方方面面,从下层业务到底层实现,会遇到很多很多未知,须要潜心研究。
这可能有点虚,特地是架构思维,只有接触过很多很多的 Case,能力有些体悟。所以一般来说一个刚毕业的应届生是很难做好性能测试的。
举个例子:一般来说呢,会有很多的 micro Benchmark,比方测试网络 PPS、网络带宽等等,那这些对用户的理论影响是什么呢?很天然地想到,把用户的 Case 搬过去,这么简略的一句话,理论很难:用户的 Case 为什么要这么设计?每个 Case 背地是有业务架构师做了设计的。
用户的 Case 该怎么测试?客户理论是怎么压测的?服务器的压力应该定在哪里?那请问一个从没有从事过理论业务需要的人怎么晓得这个是正当的?如果有这么一帮人在设计用户的 Case 性能测试是不是很搞笑。所以如果要做实在的案例性能测试,必须是有一线作战经验的同学,他晓得怎么样的压力是最合适的,他晓得这个服务器性能是否够,是不是要晋升。
总结
综上,性能测试没那么简略,性能测试不单单是一个测试,他的要求远远高于一名测试人员,他是一名性能架构师,更是一名全能手!
最初,请记住一个好的性能工程师是喂进去的,他要经验千锤百炼,方有锐剑出鞘!共勉。
版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。