性能测试真如你想象的那么简单?
简介:一个合格的性能测试专员该具备哪些技能?性能测试真的仅仅只有测试吗?没那么简单!
我是阿里云弹性计算性能测试负责人西邪。
我从 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 性能测试是不是很搞笑。所以如果要做真实的案例性能测试,必须是有一线作战经验的同学,他知道怎么样的压力是最合适的,他知道这个服务器性能是否够,是不是要提升。
总结
综上,性能测试没那么简单,性能测试不单单是一个测试,他的要求远远高于一名测试人员,他是一名性能架构师,更是一名全能手!
最后,请记住一个好的性能工程师是喂出来的,他要经历千锤百炼,方有锐剑出鞘!共勉。
原文链接:https://developer.aliyun.com/article/784338?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
性能测试真如你想象的那么简单?相关推荐
- 线程的生命周期其实没有我们想象的那么简单!!
来自:冰河技术 写在前面 在[高并发专题]中的<高并发之--线程与多线程>一文中,我们简单介绍了线程的生命周期和线程的几个重要状态,并以代码的形式实现了线程是如何进入各个状态的.今天,我们 ...
- 给你的Flex程序添加深链接和分析-其实比你想象的要简单
Adobe Flash Builder 4 简体中文正式版 Windows版点击下载:http://g.csdn.net/5134151 Adobe Flash Builder 4 简体中文正式版 M ...
- 期待的程序员的生活并非你想象的那么简单!
期待的程序员的生活并非你想象的那么简单! 最近身体比较虚,最近一段时间接连二三地中暑.身体已经向我发出信号,我应该修整调理自己的身心状态了. 研发群体的同事们都非常辛苦,每天都围在电脑或者电路板打转. ...
- Linux 性能测试工具 sysbench 的安装与简单使用
Linux 性能测试工具 sysbench 的安装与简单使用 一 背景 sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. sysbench 支 ...
- visual fortran常用数值算法集_资深游戏数值策划自白:数值不是你想象的那么简单!...
做一个靠谱的策划,这是我唯一的心愿.关于游戏数值我只想说:数值不是你想象的那么简单! 下面具体说说我对数值工作的想法. 1)不要随大流. 例如,很多人就认为腾讯能成功靠的不就是QQ么. 例如,很多人认 ...
- Linux 性能测试工具 sysbench 的安装与简单使用 1
文章目录 Linux 性能测试工具 sysbench 的安装与简单使用 一 背景 二 实验环境 2.1 操作系统 2.2 其他配置 三 安装 四 简单使用过程 4.1 查看软件版本 4.2 查看系统帮 ...
- 明日之后维尔市服务器找不到,明日之后:迁徙计划仅对“部分人”开启,果然没有想象中那么简单...
#百度APP游戏年度票选活动# 欢迎诸位小伙伴们来到本期天哥开讲的<明日之后>"生存那点事儿"~接下来呢,咱们聊聊玩家在庄园里举办"温泉旅行社".迁 ...
- sat数学可以用计算机吗,原来SAT数学真没想象中那么简单!
原标题:原来SAT数学真没想象中那么简单! 众所周知数学是中国学生的强项,很多报考SAT的学生都能拿到很高的分数甚至满分.很多人都说美国高考数学只相当于国内初中水平,就在这种"妖言惑众&qu ...
- 基于python的性能测试工具_基于 Python 的性能测试工具 locust 与 LR 的简单对比[转发]...
背景 最近自己开发了一个小的接口,功能测完了,突然想测下性能,原来做性能测试,我一直用的是HP的LoadRunner,前一段时间正好看过locust,想想就用这个来测测性能吧. 由于对LR比较熟,正好 ...
最新文章
- TB级微服务海量日志监控平台
- 前端笔记(3)css,选择器,文字文本属性,外观属性
- 一步步编写操作系统 36 一级页表与虚拟地址1
- python 不等于_python零基础(二)
- GMA Round 1 极坐标的忧伤
- unity摄影机depth模式_[蛮牛教程] Unity3D 浅析-Camera(摄像机)
- Qt编写地图综合应用14-离线地图下载
- 【龙印】龙芯1c上双路16位AD芯片TM7705的linux驱动
- Redis(二)Redis客户端的使用
- 复习一下forearch
- 主题:北京亿阳信通Oracle笔试题
- java 二义性_Java接口默认方法带来的问题分析【二义性问题】
- code wars_从开发人员的角度看Browser Wars™(扩展)
- SQLServer2008R2安装和使用
- 有一种心酸,叫靠自己
- java SpringBoot 集成 阿里云视频直播 完成直播功能
- 学习札记————问题札记
- 深度系统deepin/uos动态壁纸
- C语言计算1到20内奇数阶乘之和
- 北京计算机二本学院,北京有哪些二本大学
热门文章
- filezilla 设置服务器_java项目部署到linux服务器,微信小程序后台springboot项目部署到腾讯云服务器(图文详解)...
- Hive DML操作
- 反转!奥斯卡般演技的果小云水果店耍了全世界!
- Pandas中文官档 ~ 基础用法1
- 介绍一位高级数据分析师,告诉你数据分析原来这么好玩
- 4+5的值是python_Python基础:数据类型-数字(5)
- mysql 并发_mysql如何处理高并发
- Web Application:Exploded和Web Application:Archive
- 在eclipse中安装与配置maven环境
- Android之自定义View的实现