当服务的第 99 个百分位数下降而第 50 个百分位数增加时,这意味着什么?
What does it mean when 99th percentile has decreased and 50th percentile has increased for a service?
我正在尝试比较两种服务的性能。其中一个运行在较旧的代码库上,另一个运行在较新的实现上。我试图根据仪器绘制数字,并且我正在比较 30 秒采样周期的平均值(第 50 个百分位)和最大(第 99 个百分位)数字。
观察结果是,对于较新的服务:第 50 个百分位数增加了 40%(从 0.05 毫秒增加到 0.07 毫秒),而第 99 个百分位数从 17 毫秒减少到 11 毫秒。
我已经跟踪了一整天的行为。
我的问题是:
这说明了新代码库的性能如何?
提前致谢。
较新的代码库通常稍微慢一些(从 0.05 毫秒增加到 0.07 毫秒)但没有那么多的峰值(从 17 毫秒下降到 11 毫秒)。
是否是好事取决于用例或要求。
例如,如果服务必须始终在 15 毫秒内响应,这是一个很好的改进。如果服务必须在 0.1 毫秒内回答,这不是一个很好的改进,因为服务不会更频繁地及时回答,如果服务没有回答,无论是 10 毫秒还是 15 毫秒。
你要记住的是测量的精度。在如此小的时间跨度(0.05ms 或 50ns)中,测量方法存在缺陷的可能性比 10ms 这样的时间跨度要大得多。
average (50th percentile)
第 50 个百分位是中值或典型延迟。平均值是所有延迟的总和除以数量,通常大于中值。如果你的平均值比你的中位数高 20%,你就做得很好。它可以是很多倍,甚至是你典型值的 10 倍。
and max (99th percentile)
实际上,第 99 个百分位数就像我看到的最小值。这是 JMH 的一个例子。
Result "rwire8bit":
344.069 ±(99.9%) 0.029 ns/op [Average]
(min, avg, max) = (279.000, 344.069, 8224.000), stdev = 24.468
CI (99.9%): [344.039, 344.098] (assumes normal distribution)
Samples, N = 7496517
mean = 344.069 ±(99.9%) 0.029 ns/op
min = 279.000 ns/op
p( 0.0000) = 279.000 ns/op
p(50.0000) = 342.000 ns/op
p(90.0000) = 362.000 ns/op
p(95.0000) = 364.000 ns/op
p(99.0000) = 371.000 ns/op
p(99.9000) = 379.000 ns/op
p(99.9900) = 520.696 ns/op
p(99.9990) = 2648.557 ns/op
p(99.9999) = 5904.056 ns/op
max = 8224.000 ns/op
现在是对包含 6 个字段的消息进行编码和解码的时候了。关键是第 99 个百分位应该只是性能调整的开始,你有第 99.9、99.99、99.999、99.9999,最大值是有史以来最差的样本。注意:此测试 运行 大约有 2 亿个样本。
What does this tell about the performance of the newer codebase?
当系统旨在提高其性能的一致性时,这是一种常见情况。
您愿意在您的典型延迟上做出一些折衷,以便您的最差延迟更好。
The observation is that for the newer service: the 50th percentile has increased by 40% (increased from 0.05ms to 0.07ms) while the 99th percentile has gone down from 17ms to 11ms.
根据经验,如果您的第 99 个百分位数不应超过典型值的 4 倍,这对我来说表明通过优化您应该能够将第 99 个百分位数减少到 0.28 毫秒而不是 11 毫秒,但这取决于您正在测试的各种操作。
我正在尝试比较两种服务的性能。其中一个运行在较旧的代码库上,另一个运行在较新的实现上。我试图根据仪器绘制数字,并且我正在比较 30 秒采样周期的平均值(第 50 个百分位)和最大(第 99 个百分位)数字。
观察结果是,对于较新的服务:第 50 个百分位数增加了 40%(从 0.05 毫秒增加到 0.07 毫秒),而第 99 个百分位数从 17 毫秒减少到 11 毫秒。
我已经跟踪了一整天的行为。
我的问题是:
这说明了新代码库的性能如何?
提前致谢。
较新的代码库通常稍微慢一些(从 0.05 毫秒增加到 0.07 毫秒)但没有那么多的峰值(从 17 毫秒下降到 11 毫秒)。
是否是好事取决于用例或要求。
例如,如果服务必须始终在 15 毫秒内响应,这是一个很好的改进。如果服务必须在 0.1 毫秒内回答,这不是一个很好的改进,因为服务不会更频繁地及时回答,如果服务没有回答,无论是 10 毫秒还是 15 毫秒。
你要记住的是测量的精度。在如此小的时间跨度(0.05ms 或 50ns)中,测量方法存在缺陷的可能性比 10ms 这样的时间跨度要大得多。
average (50th percentile)
第 50 个百分位是中值或典型延迟。平均值是所有延迟的总和除以数量,通常大于中值。如果你的平均值比你的中位数高 20%,你就做得很好。它可以是很多倍,甚至是你典型值的 10 倍。
and max (99th percentile)
实际上,第 99 个百分位数就像我看到的最小值。这是 JMH 的一个例子。
Result "rwire8bit":
344.069 ±(99.9%) 0.029 ns/op [Average]
(min, avg, max) = (279.000, 344.069, 8224.000), stdev = 24.468
CI (99.9%): [344.039, 344.098] (assumes normal distribution)
Samples, N = 7496517
mean = 344.069 ±(99.9%) 0.029 ns/op
min = 279.000 ns/op
p( 0.0000) = 279.000 ns/op
p(50.0000) = 342.000 ns/op
p(90.0000) = 362.000 ns/op
p(95.0000) = 364.000 ns/op
p(99.0000) = 371.000 ns/op
p(99.9000) = 379.000 ns/op
p(99.9900) = 520.696 ns/op
p(99.9990) = 2648.557 ns/op
p(99.9999) = 5904.056 ns/op
max = 8224.000 ns/op
现在是对包含 6 个字段的消息进行编码和解码的时候了。关键是第 99 个百分位应该只是性能调整的开始,你有第 99.9、99.99、99.999、99.9999,最大值是有史以来最差的样本。注意:此测试 运行 大约有 2 亿个样本。
What does this tell about the performance of the newer codebase?
当系统旨在提高其性能的一致性时,这是一种常见情况。
您愿意在您的典型延迟上做出一些折衷,以便您的最差延迟更好。
The observation is that for the newer service: the 50th percentile has increased by 40% (increased from 0.05ms to 0.07ms) while the 99th percentile has gone down from 17ms to 11ms.
根据经验,如果您的第 99 个百分位数不应超过典型值的 4 倍,这对我来说表明通过优化您应该能够将第 99 个百分位数减少到 0.28 毫秒而不是 11 毫秒,但这取决于您正在测试的各种操作。