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

简介: > 本文是对 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。我的同事开始使用数据包探测工具对客户使用的机器进行检查,以验证服务器发出的数据包是否真的花了那么长的时间才到达客户的机器。结果我的同事没有看到任何的数据包!客户机器上的防火墙隔绝了一切——而测试报告中的延时只是测试软件的超时时长。因而警惕那些在基准测试实际并没有运行的情况下,由于错误配置而导致测试软件返回错误结果的情况。

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

目录
相关文章
|
6月前
|
人工智能 自然语言处理 测试技术
UGMathBench:评估语言模型数学推理能力的动态基准测试数据集
近年来,人工智能蓬勃发展,自然语言模型(LLM)进展显著。语言模型被广泛应用于自动翻译、智能客服、甚至医疗、金融、天气等领域。而研究者们仍在不断努力,致力于提高语言模型的规模和性能。随着语言模型的蓬勃发展,评估一个语言模型的性能变得越来越重要。其中一个重要的评估指标,就是衡量语言模型的推理能力和解决数学问题的能力。
342 38
|
5月前
|
测试技术
软考软件评测师——可靠性测试测试方法
软件可靠性是指软件在规定条件和时间内完成预定功能的能力,受运行环境、软件规模、内部结构、开发方法及可靠性投入等因素影响。失效概率指软件运行中出现失效的可能性,可靠度为不发生失效的概率,平均无失效时间(MTTF)体现软件可靠程度。案例分析显示,嵌入式软件需满足高可靠性要求,如机载软件的可靠度需达99.99%以上,通过定量指标评估其是否达标。
|
9月前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
247 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
11月前
|
数据采集 人工智能 自动驾驶
VSI-Bench:李飞飞谢赛宁团队推出视觉空间智能基准测试集,旨在评估多模态大语言模型在空间认知和理解方面的能力
VSI-Bench是由李飞飞和谢赛宁团队推出的视觉空间智能基准测试集,旨在评估多模态大型语言模型(MLLMs)在空间认知和理解方面的能力。该基准测试集包含超过5000个问题-答案对,覆盖近290个真实室内场景视频,涉及多种环境,能够系统地测试和提高MLLMs在视觉空间智能方面的表现。
423 16
VSI-Bench:李飞飞谢赛宁团队推出视觉空间智能基准测试集,旨在评估多模态大语言模型在空间认知和理解方面的能力
|
测试技术 API 微服务
性能测试并发量评估新思考
性能测试并发量评估新思考
511 20
性能测试并发量评估新思考
|
机器学习/深度学习 人工智能 算法
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
BALROG 是一款用于评估大型语言模型(LLMs)和视觉语言模型(VLMs)在复杂动态环境中推理能力的基准测试工具。它通过一系列挑战性的游戏环境,如 NetHack,测试模型的规划、空间推理和探索能力。BALROG 提供了一个开放且细粒度的评估框架,推动了自主代理研究的进展。
352 3
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
643 32
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
421 6
|
PyTorch 算法框架/工具 计算机视觉
目标检测实战(二):YoloV4-Tiny训练、测试、评估完整步骤
本文介绍了使用YOLOv4-Tiny进行目标检测的完整流程,包括模型介绍、代码下载、数据集处理、网络训练、预测和评估。
828 2
目标检测实战(二):YoloV4-Tiny训练、测试、评估完整步骤
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
300 1