On Thu, Aug 23, 2018 at 04:59:27PM -0400, Derrick Stolee wrote: > Using git/git: > > Test v2.18.0 v2.19.0-rc0 HEAD > ------------------------------------------------------------------------- > 0001.2: 3.10(3.02+0.08) 3.27(3.17+0.09) +5.5% 3.14(3.02+0.11) +1.3% > > > Using torvalds/linux: > > Test v2.18.0 v2.19.0-rc0 HEAD > ------------------------------------------------------------------------------ > 0001.2: 56.08(45.91+1.50) 56.60(46.62+1.50) +0.9% 54.61(45.47+1.46) -2.6% Interesting that these timings aren't as dramatic as the ones you got the other day (mine seemed to shift, too; for whatever reason it seems like under load the difference is larger). > Now here is where I get on my soapbox (and create a TODO for myself later). > I ran the above with GIT_PERF_REPEAT_COUNT=10, which intuitively suggests > that the results should be _more_ accurate than the default of 3. However, I > then remember that we only report the *minimum* time from all the runs, > which is likely to select an outlier from the distribution. To test this, I > ran a few tests manually and found the variation between runs to be larger > than 3%. Yes, I agree it's not a great system. The whole "best of 3" thing is OK for throwing out cold-cache warmups, but it's really bad for teasing out the significance of small changes, or even understanding how much run-to-run noise there is. > When I choose my own metrics for performance tests, I like to run at least > 10 runs, remove the largest AND smallest runs from the samples, and then > take the average. I did this manually for 'git rev-list --all --objects' on > git/git and got the following results: I agree that technique is better. I wonder if there's something even more statistically rigorous we could do. E.g., to compute the variance and throw away outliers based on standard deviations. And also to report the variance to give a sense of the significance of any changes. Obviously more runs gives greater confidence in the results, but 10 sounds like a lot. Many of these tests take minutes to run. Letting it go overnight is OK if you're doing a once-per-release mega-run, but it's pretty painful if you just want to generate some numbers to show off your commit. > v2.18.0 v2.19.0-rc0 HEAD > -------------------------------- > 3.126 s 3.308 s 3.170 s So that's 5% worsening in 2.19, and we reclaim all but 1.4% of it. Those numbers match what I expect (and what I was seeing in some of my earlier timings). > I just kicked off a script that will run this test on the Linux repo while I > drive home. I'll be able to report a similar table of data easily. Thanks, I'd expect it to come up with similar percentages. So we'll see if that holds true. :) > My TODO is to consider aggregating the data this way (or with a median) > instead of reporting the minimum. Yes, I think that would be a great improvement for t/perf. -Peff