Submitter | Gregory Szorc |
---|---|
Date | March 14, 2017, 5:15 a.m. |
Message ID | <3b997adb7efece7395fb.1489468544@ubuntu-vm-main> |
Download | mbox | patch |
Permalink | /patch/19318/ |
State | Accepted |
Headers | show |
Comments
On Mon, 13 Mar 2017 22:15:44 -0700, Gregory Szorc wrote: > # HG changeset patch > # User Gregory Szorc <gregory.szorc@gmail.com> > # Date 1489454202 25200 > # Mon Mar 13 18:16:42 2017 -0700 > # Node ID 3b997adb7efece7395fb585a70b2d70522626648 > # Parent f6f1f5efe05f4e3737dc198284f548e31a616f4b > perf: perform a garbage collection before each iteration > > Currently, no explicit garbage collection is performed when running > the microbenchmarks in `hg perf`. I think this is wrong because > garbage collection can have a significant impact on execution times. > And, if gc is triggered via the default heuristics, it will > fire effectively randomly during subsequent benchmark iterations > due to variable amount of garbage left over from previous runs. > > Running a gc before invoking the measured function will help ensure > state is more consistent across all iterations. Makes sense. Queued the first two. I'll revisit the others later.
Patch
diff --git a/contrib/perf.py b/contrib/perf.py --- a/contrib/perf.py +++ b/contrib/perf.py @@ -20,6 +20,7 @@ from __future__ import absolute_import import functools +import gc import os import random import sys @@ -189,6 +190,7 @@ def stub_timer(fm, func, title=None): func() def _timer(fm, func, title=None): + gc.collect() results = [] begin = util.timer() count = 0