准确的基准测试对于做出有关服务器平台、编程栈和数据库供应商的高风险决策至关重要。然而,许多组织陷入了“随意基准测试”的陷阱——在实际测试另一个指标的同时测量另一个指标——这可能导致持续多年的糟糕架构选择。Brendan Gregg 提议转向“主动基准测试”,以确保收集到的数据确实反映了测试的预期目标。
被动基准测试的陷阱
被动基准测试发生在执行基准测试并仅记录结果而无需进一步调查的情况下。这种“发射后不管”的风格往往会导致缺乏技术证据支持的令人印象深刻的柱状图,使得确定特定结果发生的原因变得困难。
如果没有实时分析,很容易忽略使测试失效的问题。例如,由于网络瓶颈或软件强制的资源控制,基准测试可能看起来很慢,而不是由于正在测试的组件的性能。
主动基准测试方法论
主动基准测试通过在基准测试仍在运行期间分析系统,将原始数据转化为信息。这一过程反映了标准的性能分析,但受益于已知的、受控的工作负载:即基准测试本身。
为了进行主动基准测试,用户应将测试运行较长时间——可能长达数小时——以达到稳态。在此期间,他们应使用操作系统提供的工具,如 vmstat、iostat、mpstat、sar、top 或基于 eBPF 的工具来识别系统的真实限制因素。
此方法的一个关键目标是回答这个问题:“为什么结果是 X 而不是 2X?”通过识别限制因素——例如多核服务器上的单线程应用程序——用户可以确认基准测试正在测试他们预期的内容。
识别系统瓶颈
主动基准测试有助于识别可能扭曲结果的特定常见陷阱。这些包括受到相邻进程的干扰、受到客户端和服务器之间网络速度的节流,或者测试磁盘 I/O 而不是预期的文件系统 I/O。
通过使用结构化的方法论,如 USE 方法(利用率、饱和度和错误),工程师可以精准定位瓶颈是硬件资源还是软件限制。这确保了最终结论是基于对系统约束的清晰理解。
验证与统计完整性
统计分析是建立对数值结果信心的一项有价值的工具,但它不能替代主动基准测试。如果初始数据由于未观察到的瓶颈而存在缺陷,统计方法可能会让这些错误结果看起来更可信。
推荐的工作流程是先进行主动基准测试以确保数据有效,然后进行统计分析以完善发现。这一顺序确保最终结论建立在稳健的证据基础之上。
