简介:一个合格的性能测试专员该具备哪些技能?性能测试真的仅仅只有测试吗?没那么简单!

我是阿里云弹性计算性能测试负责人西邪。

我从 2018 年开始组建阿里云弹性计算的性能测试团队,从要一周完成一组性能测试,到只需 1 分钟就可以触发一组全自动性能测试,到最后结果整理一键搞定,内部命名为开天斧

现在开天斧已经承担整个弹性计算所有的性能测试工作:新技术、新设备、新规格等等,保证了线上的性能稳定性。在性能测试的同时,还要负责解决客户的性能问题。期间还负责了“变形金刚”这个项目,把物理机的底层资源管理产品化了,使得现在线上千变万化的规格,只需一个模板就可以简单实现。

这里就先跟大家分享下这 3 年在性能测试上的一些收获。

什么是性能测试?

性能测试不同于功能测试,功能测试验证的是某个功能是否完成,性能测试验证的是某个性能是否达到。

验证性能就需要很多性能“标尺”,如衡量 CPU 性能:通过 SPEC CPU,UnixBench 等;衡量网络性能用 netperf,iperf,sockperf 等等;衡量存储性能最好用的是 fio,衡量内存带宽性能则是 stream。

上述说的都 micro Benchmark,通常如果某块做的不好,就可以直接提缺陷给相关的团队去优化;而客户实际感知的是真实业务场景,那就需要去模拟客户的场景,比如客户经常使用的是 nginx,redis,MySQL 等,通过实际的场景测试,来验证当前服务器的优劣。通过做好性能测试,才能建立自己的底气,做好性能分析,才能知道哪里薄弱,从而往哪里发力!

性能测试要做哪些?

性能的重要性无需多言,我就直接略过了。一个服务器有 5 大块:CPU、内存、存储、网络、OS。对,就是验证这些模块的性能,上面也简单介绍了下该用哪些工具进行性能测试。但是对于性能测试而言,如果仅仅是一个测试,那太简单了,实际上还需要考虑很多。

性能主要可以看以下几个方面:

  1. 用什么工具来验证?性能测试的完备性如何保证?如何快速持续构建性能测试,手工跑就直接废了,工程化如何构建?
  2. 性能测试怎么设计?如何针对性去设计?性能测试其实是去测试一个预期。
  3. 出来的性能数据怎么分析,重点关注哪个?
  4. 性能有差异?为什么有差异?虚拟化问题,物理机问题,OS 问题,Benchmark 问题?还是...
  5. 如何去分析异常性能数据?这个问题一般是通用业务团队的架构师才能解。

可能光谈问题还是抽象了点,我再具体举几个例子。

先谈与 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 的时候,你需要很多背景知识,这些背景知识会决定你后面的性能分析预期。

  1. 与 Skylake CPU 的区别:主频设置,CPU 代数差异等。
  2. 虚拟化方案:是否 PIN 住,是否跨 Socket。
  3. 底层技术适配:网络存储有无优化。
  4. 实例形态:有哪些规格,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 性能测试是不是很搞笑。所以如果要做真实的案例性能测试,必须是有一线作战经验的同学,他知道怎么样的压力是最合适的,他知道这个服务器性能是否够,是不是要提升。

总结

综上,性能测试没那么简单,性能测试不单单是一个测试,他的要求远远高于一名测试人员,他是一名性能架构师,更是一名全能手!

最后,请记住一个好的性能工程师是喂出来的,他要经历千锤百炼,方有锐剑出鞘!共勉。

原文链接:https://developer.aliyun.com/article/784338?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

性能测试真如你想象的那么简单?相关推荐

  1. 线程的生命周期其实没有我们想象的那么简单!!

    来自:冰河技术 写在前面 在[高并发专题]中的<高并发之--线程与多线程>一文中,我们简单介绍了线程的生命周期和线程的几个重要状态,并以代码的形式实现了线程是如何进入各个状态的.今天,我们 ...

  2. 给你的Flex程序添加深链接和分析-其实比你想象的要简单

    Adobe Flash Builder 4 简体中文正式版 Windows版点击下载:http://g.csdn.net/5134151 Adobe Flash Builder 4 简体中文正式版 M ...

  3. 期待的程序员的生活并非你想象的那么简单!

    期待的程序员的生活并非你想象的那么简单! 最近身体比较虚,最近一段时间接连二三地中暑.身体已经向我发出信号,我应该修整调理自己的身心状态了. 研发群体的同事们都非常辛苦,每天都围在电脑或者电路板打转. ...

  4. Linux 性能测试工具 sysbench 的安装与简单使用

    Linux 性能测试工具 sysbench 的安装与简单使用 一 背景 sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. sysbench 支 ...

  5. visual fortran常用数值算法集_资深游戏数值策划自白:数值不是你想象的那么简单!...

    做一个靠谱的策划,这是我唯一的心愿.关于游戏数值我只想说:数值不是你想象的那么简单! 下面具体说说我对数值工作的想法. 1)不要随大流. 例如,很多人就认为腾讯能成功靠的不就是QQ么. 例如,很多人认 ...

  6. Linux 性能测试工具 sysbench 的安装与简单使用 1

    文章目录 Linux 性能测试工具 sysbench 的安装与简单使用 一 背景 二 实验环境 2.1 操作系统 2.2 其他配置 三 安装 四 简单使用过程 4.1 查看软件版本 4.2 查看系统帮 ...

  7. 明日之后维尔市服务器找不到,明日之后:迁徙计划仅对“部分人”开启,果然没有想象中那么简单...

    #百度APP游戏年度票选活动# 欢迎诸位小伙伴们来到本期天哥开讲的<明日之后>"生存那点事儿"~接下来呢,咱们聊聊玩家在庄园里举办"温泉旅行社".迁 ...

  8. sat数学可以用计算机吗,原来SAT数学真没想象中那么简单!

    原标题:原来SAT数学真没想象中那么简单! 众所周知数学是中国学生的强项,很多报考SAT的学生都能拿到很高的分数甚至满分.很多人都说美国高考数学只相当于国内初中水平,就在这种"妖言惑众&qu ...

  9. 基于python的性能测试工具_基于 Python 的性能测试工具 locust 与 LR 的简单对比[转发]...

    背景 最近自己开发了一个小的接口,功能测完了,突然想测下性能,原来做性能测试,我一直用的是HP的LoadRunner,前一段时间正好看过locust,想想就用这个来测测性能吧. 由于对LR比较熟,正好 ...

最新文章

  1. TB级微服务海量日志监控平台
  2. 前端笔记(3)css,选择器,文字文本属性,外观属性
  3. 一步步编写操作系统 36 一级页表与虚拟地址1
  4. python 不等于_python零基础(二)
  5. GMA Round 1 极坐标的忧伤
  6. unity摄影机depth模式_[蛮牛教程] Unity3D 浅析-Camera(摄像机)
  7. Qt编写地图综合应用14-离线地图下载
  8. 【龙印】龙芯1c上双路16位AD芯片TM7705的linux驱动
  9. Redis(二)Redis客户端的使用
  10. 复习一下forearch
  11. 主题:北京亿阳信通Oracle笔试题
  12. java 二义性_Java接口默认方法带来的问题分析【二义性问题】
  13. code wars_从开发人员的角度看Browser Wars™(扩展)
  14. SQLServer2008R2安装和使用
  15. 有一种心酸,叫靠自己
  16. java SpringBoot 集成 阿里云视频直播 完成直播功能
  17. 学习札记————问题札记
  18. 深度系统deepin/uos动态壁纸
  19. C语言计算1到20内奇数阶乘之和
  20. 北京计算机二本学院,北京有哪些二本大学

热门文章

  1. filezilla 设置服务器_java项目部署到linux服务器,微信小程序后台springboot项目部署到腾讯云服务器(图文详解)...
  2. Hive DML操作
  3. 反转!奥斯卡般演技的果小云水果店耍了全世界!
  4. Pandas中文官档 ~ 基础用法1
  5. 介绍一位高级数据分析师,告诉你数据分析原来这么好玩
  6. 4+5的值是python_Python基础:数据类型-数字(5)
  7. mysql 并发_mysql如何处理高并发
  8. Web Application:Exploded和Web Application:Archive
  9. 在eclipse中安装与配置maven环境
  10. Android之自定义View的实现