Skip to content

Commit 397c447

Browse files
committed
[benchmark] Exclude outliers from sample
Use the box-plot inspired technique for filtering out outlier measurements. Values that are higher than the top inner fence (TIF = Q3 + IQR * 1.5) are excluded from the sample.
1 parent 0d318b6 commit 397c447

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

Diff for: benchmark/scripts/compare_perf_tests.py

+1
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ def __init__(self, csv_row, quantiles=False, memory=False, delta=False):
256256
self.samples = PerformanceTestSamples(
257257
self.name,
258258
[Sample(None, None, int(runtime)) for runtime in runtimes])
259+
self.samples.exclude_outliers(top_only=True)
259260
sams = self.samples
260261
self.min, self.max, self.median, self.mean, self.sd = \
261262
sams.min, sams.max, sams.median, sams.mean, sams.sd

Diff for: benchmark/scripts/test_compare_perf_tests.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -224,16 +224,18 @@ def test_init_quantiles(self):
224224
r = PerformanceTestResult(log.split(','), quantiles=True, memory=True)
225225
self.assertEquals((r.samples.count, r.max_rss), (3, 266240))
226226
# #,TEST,SAMPLES,MIN(μs),Q1(μs),Q2(μs),Q3(μs),MAX(μs)
227-
log = '1,Ackermann,5,54570,54593,54644,57212,63304'
227+
log = '1,Ackermann,5,54570,54593,54644,57212,58304'
228228
r = PerformanceTestResult(log.split(','), quantiles=True, memory=False)
229229
self.assertEquals((r.num_samples, r.min, r.median, r.max),
230-
(5, 54570, 54644, 63304))
230+
(5, 54570, 54644, 58304))
231231
self.assertEquals((r.samples.q1, r.samples.q3), (54593, 57212))
232232
self.assertEquals(r.samples.count, 5)
233233
# #,TEST,SAMPLES,MIN(μs),Q1(μs),Q2(μs),Q3(μs),MAX(μs),MAX_RSS(B)
234234
log = '1,Ackermann,5,54686,54731,54774,55030,63466,270336'
235235
r = PerformanceTestResult(log.split(','), quantiles=True, memory=True)
236-
self.assertEquals((r.samples.count, r.max_rss), (5, 270336))
236+
self.assertEquals(r.samples.num_samples, 5)
237+
self.assertEquals(r.samples.count, 4) # outlier was excluded
238+
self.assertEquals(r.max_rss, 270336)
237239

238240
def test_init_delta_quantiles(self):
239241
# #,TEST,SAMPLES,MIN(μs),𝚫MEDIAN,𝚫MAX
@@ -504,8 +506,10 @@ def test_parse_delta_quantiles(self):
504506
'𝚫V9,𝚫VA,𝚫VB,𝚫VC,𝚫VD,𝚫VE,𝚫VF,𝚫VG,𝚫VH,𝚫VI,𝚫VJ,𝚫MAX\n' +
505507
'202,DropWhileArray,200,214,,,,,,,,,,,,1,,,,,,2,16,464'
506508
)['DropWhileArray']
507-
self.assertEquals((r.num_samples, r.min, r.max, r.samples.count),
508-
(200, 214, 697, 21))
509+
self.assertEquals(
510+
(r.num_samples, r.min, r.max, r.samples.count),
511+
# last 3 ventiles were outliers and were excluded from the sample
512+
(200, 214, 215, 18))
509513

510514
def test_parse_results_verbose(self):
511515
"""Parse multiple performance test results with 2 sample formats:

0 commit comments

Comments
 (0)