【译文】重新评估性能测试:基准测试需要注意的几个点

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: > 本文是对 Brendan Gregg [Evaluating the Evaluation: A Benchmarking Checklist](http://www.brendangregg.com/blog/2018-06-30/benchmarking-checklist.html) 一文的翻译。 一位同事向我介绍了 Craig Hanson 与 Pat Crain 关于性能分

本文是对 Brendan Gregg Evaluating the Evaluation: A Benchmarking Checklist 一文的翻译。

一位同事向我介绍了 Craig Hanson 与 Pat Crain 关于性能分析的几条箴言,这些箴言巧妙地总结了我们在性能分析和调优方面所做的大部分工作。

性能箴言

这些箴言分别是:

Don't do it
Do it, but don't do it again
Do it less
Do it later
Do it when they're not looking
Do it concurrently
Do it cheaper

这些箴言启发了我关注性能分析的另一面,即评估基准测试(benchmark)的正确性。正确的性能基准测试有助于提升项目的性能,然而不幸的是,错误的基准测试则更为常见。

我职业生涯的大部分时间都致力于正确的性能基准测试,以至于我的前雇主做的基准测试,通常在得到我的认可之后才会被最终发布。性能基准测试的正确性是如此的重要,因而我想与大家分享我是怎么确保这一点的。

或许你正在根据你需要的基准测试寻找一款符合要求的性能测试平台,抑或是你自己正在开发一款新的性能测试平台以执行相应的基准测试,无论如何,我都推荐你使用以下几个问题作为评估基准测试的清单:

Why not double?
Did it break limits?
Did it error?
Does it reproduce?
Does it matter?
Did it even happen?

基准测试评估清单

1. 为什么不能翻倍?(Why not double?)

如果你执行的一项基准测试的结果是 20k ops/sec,那么你应该问:为什么不能是 40k ops/sec?这实际上是在问:这一性能指标的限制因素是什么?区别是,前一种问法会鼓励人们去回答这一问题,而后者则更像是一个学术议题的家庭作业。在回答“为什么不能翻倍?”这个问题的过程中,人们会去找到并修复这一指标的限制因素,并最终使这一项性能指标翻倍。对于这一问题的回答,实际上还需要在基准测试的运行过程中使用其他一些可视化的工具对测试的过程进行分析(这一过程我称之为“积极的基准测试”(active benchmarking))。

2. 是否违背外部因素的限制?(Did it break limits?)

这实际上是检查你做的基准测试是否合理。我看到很多基准测试的结果实际上极大地违背了网络带宽的物理限制(其违背的程度甚至达到了10倍的网络带宽)。网络、PCIe 总线、CPU 互连总线、内存总线、以及存储设备(无论是IO通量还是IOPS),这些在性能上都存在物理限制,其中网络是最易察觉的。在某些情况下,(一项测试本机与远端数据通信性能的)基准测试的结果可能会超过网络带宽的上限,因为这些基准测试是从本地的内存缓存中读取数据,而不是远端服务器。如果你要测试,在固定数据包大小的情况下数据的传输速率,你可以先估算测试需要的最小数据通量,然后与网络链路的带宽进行比较。

3. 测试过程中有发生异常吗?(Did it error?)

测试过程中异常行为的占比是多少?0%,1%,还是 100%?基准测试的配置可能在一开始就是错误的,或者在压力测试中系统更容易发生异常行为。异常行为有别于普通的正常行为,因而异常行为的百分比很高时,测试结果的可信度就会大打折扣。如果你查看测试结果的习惯是,在冗长的测试报告中只关注数据的通量与延时,或者是使用 shell 脚本解析其中的某些指标,那么你就很容易缺失测试报告中的很多信息,例如异常行为的百分比。

4. 会复现吗?(Does it reproduce?)

如果同一个基准测试重复运行 10 次,那么测试结果的一致性如何?有很多因素(例如缓存、turbo boost 技术等),甚至是一些轻微的变化(例如系统的 cron 任务、垃圾回收等),都会导致单次测试结果的扰动。感知系统方面细微变化的一种方法是使用系统的 load 指标:在 load 指标变为 "0.00, 0.00, 0.00" 之后再开始你的基准测试。如果这一指标迟迟不能达到 “0.00, 0.00, 0.00”,那么你就需要进行 debug,找到其中的原因并解决掉。

5. 这真的重要吗?(Does it matter?)

如果我告诉你一辆汽车的时速达到 7000 mph 时它的轮子会脱离车体,而另一辆汽车的时速达到 9000 mph 时才会这样,那么这个因素会影响你的购买决策吗?并不大会。但是我却看到很多性能测试的平台,会以一种现实中并不会有的强度对某个系统组件进行测试,只是为了在数据上打败竞争对手。很多傻瓜式的测试平台基本上全是这样,这其实充满了误导性。因而你需要问你自己:这项基准测试在现实生活中真的重要吗?

6. 这真的发生过吗?(Did it even happen?)

曾经有一位客户反馈,某项基准测试测到的延时不可思议的高:每个请求的延时都达到了 1s。我的同事开始使用数据包探测工具对客户使用的机器进行检查,以验证服务器发出的数据包是否真的花了那么长的时间才到达客户的机器。结果我的同事没有看到任何的数据包!客户机器上的防火墙隔绝了一切——而测试报告中的延时只是测试软件的超时时长。因而警惕那些在基准测试实际并没有运行的情况下,由于错误配置而导致测试软件返回错误结果的情况。

我希望以上这些方法论能对你有所帮助,同时也欢迎转发给其他任何需要执行或评估基准测试的人。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
24天前
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
97 32
|
27天前
|
PyTorch 算法框架/工具 计算机视觉
目标检测实战(二):YoloV4-Tiny训练、测试、评估完整步骤
本文介绍了使用YOLOv4-Tiny进行目标检测的完整流程,包括模型介绍、代码下载、数据集处理、网络训练、预测和评估。
77 2
目标检测实战(二):YoloV4-Tiny训练、测试、评估完整步骤
|
11天前
|
缓存 监控 数据挖掘
C# 一分钟浅谈:性能测试与压力测试
【10月更文挑战第20天】本文介绍了性能测试和压力测试的基础概念、目的、方法及常见问题与解决策略。性能测试关注系统在正常条件下的响应时间和资源利用率,而压力测试则在超出正常条件的情况下测试系统的极限和潜在瓶颈。文章通过具体的C#代码示例,详细探讨了忽视预热阶段、不合理测试数据和缺乏详细监控等常见问题及其解决方案,并提供了如何避免这些问题的建议。
33 7
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
22天前
|
弹性计算 网络协议 Linux
云服务器评估迁移时间与测试传输速度
云服务器评估迁移时间与测试传输速度
|
2月前
|
人工智能 测试技术 PyTorch
AI计算机视觉笔记二十四:YOLOP 训练+测试+模型评估
本文介绍了通过正点原子的ATK-3568了解并实现YOLOP(You Only Look Once for Panoptic Driving Perception)的过程,包括训练、测试、转换为ONNX格式及在ONNX Runtime上的部署。YOLOP由华中科技大学团队于2021年发布,可在Jetson TX2上达到23FPS,实现了目标检测、可行驶区域分割和车道线检测的多任务学习。文章详细记录了环境搭建、训练数据准备、模型转换和测试等步骤,并解决了ONNX转换过程中的问题。
|
3月前
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
|
3月前
|
安全 测试技术 网络安全
|
4月前
|
弹性计算 Prometheus Cloud Native
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
SLS Prometheus存储问题之Union MetricStore在性能测试中是如何设置测试环境的
|
3月前
|
测试技术 索引 CDN
hyengine wasm业务性能测试问题之测试设备如何解决
hyengine wasm业务性能测试问题之测试设备如何解决