软件性能工程(1)-性能数据分析时常用的统计方法

基本概念

进行性能测试与分析时首先需要确认的是:

  1. 性能指标 (Performance Metric)

  2. 性能数据表达 (Perforamcne Data Presentation)

假设我们想分析一段时间内CPU使用量的情况,这个过程称为数据集中趋势的分析。使用最广范计算起来也非常简单的是平均值计算也称呼为 「算术平均值」, 数学表达式为:

软件性能工程(1)-性能数据分析时常用的统计方法_第1张图片
image

即,「将总和除以样本数量」

这种表达方式(数据集中趋势)简单易懂并普遍应用在各个领域但它在分析性能数据时有个致命缺点:「最终结果受样本中异常值的影响非常大」

想象一下在一段时间内CPU都处于idle状态,但某时刻CPU使用量突然飙升并持续了两秒钟。计算这段时间内CPU使用量时峰值会被平均化并随着观察时间的变长其被平均化的程度更厉害。

在CPU飙升的两秒钟发生了事什么谁也不敢保证,最不希望看到的情况是用户发起的操作因CPU无法及时响应被阻塞在队列中。

经验上来看没有一个公式可以直接套用在各个场合中,所以以平均值表示数据集中趋势的方法也需要分场景使用。

数据离散性与分布性

在实践中我们需要量化一组样本以表示这一组样本的数据特性。数据特性根据分析角度不同其计算方法也不尽相同。

样本数据间的离散性

标准差

Standard Deviation, SD

「概念」:国家计量技术规范里的全称是“标准偏差”,用于量化样本与样本平均值间的远近程度。一个较大的标准差意味着样本与其样本平均值间的差异较大,一个较小的标准差意味着样本与其样本平均值间的差异较小。

  1. 总体标准差:

软件性能工程(1)-性能数据分析时常用的统计方法_第2张图片

总体标准差
  1. 样本标准差:从总体中抽样得出样本,对其样本计算标准差来估摸整体标准差的方式。为了更接近总体标准差,经验上将样本数量减一。

软件性能工程(1)-性能数据分析时常用的统计方法_第3张图片

样本标准差
  1. 适用场景:用于描述样本中的数据离算术平均值的差异程度,其值越大越说明数据分散性较大。以应用计算启动速度为例,如果分散性较大则说明启动流程中干扰因素较多,用户所能感受到的表现不够一致(启动速度时快时慢)。在系统调优/应用优化时需要优化两个数据指标:

    1. 启动速度的稳定性(降低样本标准差)

    2. 启动速度本身(降低样本算术平均值)

标准误

Standard Error of Mean, SE

「概念」:用于描述对总体进行 不同采样数据间的离散性。此概念容易与标准差混淆,两者区别是:

  1. 标准差:单次采样中数据间的离散性

  2. 标准误:多次采样中不同样本集的平均值间的离散性

「适用场景」:为了更完整的描述系统/应用性能稳定性,可以进行多次采样并计算其标准误。标准误越小越说明性能稳定,反之亦然。

变异(离散)系数

Coefficient of Variation

「概念」:是概率分布离散程度的一个归一化量度,其定义为标准差与平均值之比。比起标准差来,变异系数的好处是不需要参照数据的平均值。变异系数是一个无量纲量,因此在比较两组量纲不同或均值不同的数据时,应该用变异系数而不是标准差来作为比较的参考。

「适用场景」:当衡量不同系统间的平均数差距时用到变异系数,还有一种系数称为标准分(Standard Score)用于量化同个系统中不同样本离变异系数间的差距。

样本数据间分布

  1. 「算数平均」 Arithmetic mean: 最简单且最常用的数据集中趋势量化方法,单独使用算是平均值量化数据的情况比较少。

  2. 「加权平均」 Weighted mean: 计算LoadAverage时用到此指标,将时间远近变量以权重的形式赋予不同样本。

  3. 「调和平均」 Harmonic mean: 假设一个链路由不同处理速度的子部件组成,计算其平均处理速度时采用此指标。

  4. 「几何平均」 Geometric mean: 当样本的scale为单位不同时几何平均值相比算数平均值更合理。在量化系统整体性能提升时会采用几何平均值因为收集的参数可能是响应速度,队列长度,CPU使用量等不同维度的数据(每个指标的scale各不相同)。

  5. 「百分位数」 Percentile: 对用户影响最大的是异常值,通过百分位数获知异常分布情况。响应速度的75百分位数为:50ms。表示采样到的数据中75%的数值小于50,这个指标可以用于指导优化目标KPI。

  6. 「中位数」 Median: 游戏性能衡量指标FPS Stability中,采用了中位数计算界面刷新的稳定度。

写在最后

本文介绍的内容是统计分析中的冰山一角但却是最基本,也是最常用的知识点。更高级的统计分析方法需要通过系统化的学习才能掌握。

抓取了准确的性能指标数据的前提下只有使用了正确的数据分析方法其结果才具有现实意义。此两条是最基本的前置条件但往往也最容易忽略。如果事先明确这两点,可以避免不必要的试错时间。

关于启动速度衡量方法请参考:使用置信区间量化应用程序启动时间。

你可能感兴趣的:(性能工程,android)