Skip to content

Commit 7d25484

Browse files
committed
[benchmark] Keep merged independent run samples
When merging `PerformanceTestResults`s keep the original `PerformanceTestSample`s from all independent runs. These will be used to choose the most stable (least variable) location estimate for the `ResultComparison` down the road.
1 parent dd2d83d commit 7d25484

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

benchmark/scripts/compare_perf_tests.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def num_samples(self):
113113

114114
@property
115115
def all_samples(self):
116-
"""List of all samples in ascending order."""
116+
"""List of all samples in original order."""
117117
return self._all_samples
118118

119119
@property
@@ -236,6 +236,7 @@ def __init__(self, csv_row, quantiles=False, memory=False, delta=False,
236236
self.samples = PerformanceTestSamples(
237237
self.name, [int(runtime) for runtime in runtimes])
238238
self.samples.exclude_outliers(top_only=True)
239+
self.independent_runs = [self.samples]
239240
sams = self.samples
240241
self.min, self.max, self.median, self.mean, self.sd = \
241242
sams.min, sams.max, sams.median, sams.mean, sams.sd
@@ -277,12 +278,18 @@ def merge(self, r):
277278
"""
278279
# Statistics
279280
if self.samples and r.samples:
280-
self.samples.samples = sorted(
281-
self.samples.samples + r.samples.samples)
282-
self.samples._recompute_stats()
281+
if hasattr(self, 'independent_runs'):
282+
self.independent_runs.append(r.samples)
283+
else:
284+
self.independent_runs = [self.samples, r.samples]
285+
outliers = self.samples.outliers + r.samples.outliers
286+
all_samples = self.samples.all_samples + r.samples.all_samples
287+
self.samples = PerformanceTestSamples(
288+
self.name, sorted(self.samples.samples + r.samples.samples))
283289
sams = self.samples
284290
self.num_samples += r.num_samples
285-
sams.outliers += r.samples.outliers
291+
sams.outliers = outliers
292+
sams._all_samples = all_samples
286293
self.min, self.max, self.median, self.mean, self.sd = \
287294
sams.min, sams.max, sams.median, sams.mean, sams.sd
288295
else:

benchmark/scripts/test_compare_perf_tests.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,18 +423,29 @@ def as_tuple(r):
423423
r = results[0]
424424
self.assertEqual(as_tuple(r),
425425
(200, 21, 18, 967, 996, 1008, None, None, None))
426+
self.assertEqual(len(r.independent_runs), 1)
427+
self.assertEqual(r.independent_runs[0], r.samples)
428+
426429
# merging optional --meta data
427430
results[1].mem_pages = 9
428431
results[1].involuntary_cs = 1
429432
results[1].yield_count = 4
430433
r.merge(results[1]) # 18 + 17 = 35, after merge using only ventiles
431434
self.assertEqual(as_tuple(r), (400, 42, 35, 967, 983, 1010, 9, 1, 4))
435+
432436
results[2].mem_pages = 7
433437
results[2].involuntary_cs = 2
434438
results[2].yield_count = 6
435439
r.merge(results[2]) # 35 + 18 = 53; sum yields and context switches
436440
self.assertEqual(as_tuple(r), (600, 63, 53, 967, 989, 1029, 7, 3, 10))
437441

442+
self.assertEqual(len(r.samples.all_samples), 63)
443+
self.assertEqual(r.samples.outliers, [1019, 1095, 2922, 1040, 1186,
444+
1880, 6470, 1057, 1281, 4183])
445+
self.assertEqual(len(r.independent_runs), 3)
446+
self.assertEqual([i.count for i in r.independent_runs], [18, 17, 18])
447+
self.assertEqual([i.min for i in r.independent_runs], [967, 972, 986])
448+
438449

439450
class TestResultComparison(unittest.TestCase):
440451
def setUp(self):
@@ -744,6 +755,9 @@ def test_results_from_merge_verbose(self):
744755
samples = result.samples
745756
self.assertTrue(isinstance(samples, PerformanceTestSamples))
746757
self.assertEqual(samples.count, 8)
758+
self.assertEqual(
759+
samples.all_samples,
760+
[355883, 358817, 353552, 350815, 363094, 369169, 376131, 364245])
747761

748762
def test_excludes_outliers_from_samples(self):
749763
verbose_log = """Running DropFirstAnySeqCntRangeLazy for 10 samples.

0 commit comments

Comments
 (0)