性能分析中科特尔法则(Little's Law)与其衍生法则的应用

Last update: 20181112

科特尔法则 Little’s Law

科特尔法则(Little’s Law)是John Little教授在1961证明并以他的名字命名的公式。Little’s Law是排队论中的重要公式,因现实世界中排队模型的应用非常广泛这也意味着此公式的应用也非常广泛。在性能分析中我们通过Little’s Law定位性能瓶颈,用模型预测随负载增加对业务性能的影响,以及通过容量规划提前为业务扩张做准备。在现实生活中凡是排队等待的情况都可以通过Little’s Law进行量化与优化(如银行,医院的排队取号)。

Little’s Law通过一个简单的公式量化了吞吐率与服务时间及等待队列长度三者之间的关系,简单公式的背后隐藏着巨大的信息量。
本文以最简单的排队模型介绍Little’s Law,如下图所示:

假设存在一个系统由单输入与单输出单元组成并且只有一个处理单元。当输入到系统中的请求速度快于处理单元处理速度时系统会出现排队等待情况。

Little’s Law 公式

$$L= λ * W$$

队列中平均任务数 = 平均任务抵达率 * 平均任务处理时间(含队列等待时间)

Little’s law中不太好理解的参数是队列中平均任务数,请参考上图中的绿色部分A(T)。A(T)为T观察时间范围内,已经入队到队列中的所有任务等待时间的总和,也可以理解为绿色部分的面积。当由n(t)导致的不规则绿色区域抹平成长方形时,设T为长方形的宽,队列中的平均任务数为高,则A(T) = T * 队列中平均任务数。设L(T) = A(T) / T,则L(T)等同于平均等待任务数(也称为平均队列长度)。

公式注解:

  • Little’s law的应用场景非常广泛,它既可以解释单一的系统部件(磁盘,CPU)也可以解释由多个子系统组成的复杂系统(网页界面响应时间)。
  • 当平均队列长度变大时请求抵达率也会随着变大。只有系统待要处理的任务变多时才有可能使系统以最高吞吐率模式工作并榨干硬件性能,但他的反面是系统中入队等待任务变多,如果这个任务是跟用户体验相关时会表现为操作响应时间的变长(参见下面的响应时间部分内容)。
  • 系统处理单元的平均服务时间变长时会导致等待队列的变长,优化等待队列长度的方向有:
    • 缩短平均服务时间
    • 减少任务请求量
  • 本文介绍的是单一处理模型,如涉及多个并行处理模型时优化方法不止上面两种。

Little’s Law 衍生应用 - Utilization Law 使用率的计算

Utilization Law 公式

$$U = X * St$$

使用率 = 吞吐率 * 服务处理时间

当使用率不超过100%时Utlization law其实是little’s Law的一个变种,这种情况被称为Job flow balance(此时抵达率与吞吐率相同)

公式注解:

  • 吞吐率不变的情况下服务处理时间的提升导致使用率的提升。
  • 在使用率不变的前提下要使吞吐率上升需要缩短服务处理时间。

在磁盘性能老化分析时有时候会遇到磁盘使用率变化不大但磁盘吞吐率反而降低了。这是因为老化(磁盘长时间使用后)后的磁盘可能会出现文件碎片化。在读取以碎片化形式存储在磁盘各个地方的文件时可能会加长磁盘寻道时间(物理磁头转动时间),这个操作会体现在磁盘服务处理时间上,通过公式可知此时磁盘使用率变化不大但因处理服务时间变长导致了吞吐率的下降。

写在最后

  • 性能优化属于工程领域,工程领域就需要通过量化方法评判优化结果的好与坏。
  • 在数据分析时除了通过简单美妙的公式描述关系之外还可以通过数据可视化方法得出”数据模式”上的新发现。人的大脑善于从图形化内容中找出相互间的关联性,这个优点也可以用于数据分析。
  • 通过现象看到本质,这应该是我们平时要锻炼的思维模式。 将本质转变成高度抽象的公式是不错的方法之一。

参考