[JetStream] Raise the percentile of mandreel-latency and splay-latency
authorfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 28 Jun 2015 03:47:00 +0000 (03:47 +0000)
committerfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 28 Jun 2015 03:47:00 +0000 (03:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=146378

Reviewed by Mark Lam.

The current percentile is 95%.  When I looked at the sample lists in our GC, it was
clear that the worst 5% samples completely amortize our GC pauses.  Our GC pauses can
be quite bad.  Clearly, splay-latency is meant to test whether we have an incremental
GC that ensures that you don't have bad worst-case pauses.  But 95% is too small,
because it doesn't really capture those pauses.  Raising the percentile to above 99%
appears to do the trick.  99.5% or more seems like a good bet.  The trade-off there is
just that if we set it too high, then we won't have enough statistics.  Doing this very
clearly rewards GCs that are incremental, and punishes GCs that aren't (like ours).
That's what we want, since in the future we want to use this test to guide any
improvements to the worst-case performance of our GC.

The way that the percentile is selected will also affect mandreel-latency.  That's a
good thing, because 95% is probably too low for that test as well.  That test ends up
with >10k samples.  The goal of using 95% in the first place was to get enough samples
to have a stable average.  But if we have >10k samples, we can push that percentile up
much higher and still get good statistics while achieving the effect we want - i.e.
getting the worst case.

I don't think that we need to do the same thing for cdjs.  That test only takes 200
samples, so 95% means we report the average of the worst 10 samples.  That's probably
good enough.

* JetStream/Octane2/base.js: Raise the percentile as described above.
(BenchmarkSuite.prototype.RunSingleBenchmark):
* JetStream/Reference.js: Tweak the reference times to bring the latency tests closer to 100ish on my machine.
* JetStream/create.rb: Bump the version.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@186041 268f45cc-cd09-0410-ab3c-d52691b4dbfc

PerformanceTests/ChangeLog
PerformanceTests/JetStream/Octane2/base.js
PerformanceTests/JetStream/Reference.js
PerformanceTests/JetStream/create.rb

index f63b62f..8c442ac 100644 (file)
@@ -1,3 +1,37 @@
+2015-06-26  Filip Pizlo  <fpizlo@apple.com>
+
+        [JetStream] Raise the percentile of mandreel-latency and splay-latency
+        https://bugs.webkit.org/show_bug.cgi?id=146378
+
+        Reviewed by Mark Lam.
+        
+        The current percentile is 95%.  When I looked at the sample lists in our GC, it was
+        clear that the worst 5% samples completely amortize our GC pauses.  Our GC pauses can
+        be quite bad.  Clearly, splay-latency is meant to test whether we have an incremental
+        GC that ensures that you don't have bad worst-case pauses.  But 95% is too small,
+        because it doesn't really capture those pauses.  Raising the percentile to above 99%
+        appears to do the trick.  99.5% or more seems like a good bet.  The trade-off there is
+        just that if we set it too high, then we won't have enough statistics.  Doing this very
+        clearly rewards GCs that are incremental, and punishes GCs that aren't (like ours).
+        That's what we want, since in the future we want to use this test to guide any
+        improvements to the worst-case performance of our GC.
+
+        The way that the percentile is selected will also affect mandreel-latency.  That's a
+        good thing, because 95% is probably too low for that test as well.  That test ends up
+        with >10k samples.  The goal of using 95% in the first place was to get enough samples
+        to have a stable average.  But if we have >10k samples, we can push that percentile up
+        much higher and still get good statistics while achieving the effect we want - i.e.
+        getting the worst case.
+
+        I don't think that we need to do the same thing for cdjs.  That test only takes 200
+        samples, so 95% means we report the average of the worst 10 samples.  That's probably
+        good enough.
+
+        * JetStream/Octane2/base.js: Raise the percentile as described above.
+        (BenchmarkSuite.prototype.RunSingleBenchmark):
+        * JetStream/Reference.js: Tweak the reference times to bring the latency tests closer to 100ish on my machine.
+        * JetStream/create.rb: Bump the version.
+
 2015-06-19  Filip Pizlo  <fpizlo@apple.com>
 
         Run CDjs as part of JSC stress testing
index e5119c4..600cc1d 100644 (file)
@@ -334,7 +334,7 @@ BenchmarkSuite.prototype.RunSingleBenchmark = function(benchmark, data) {
     if (data.runs < benchmark.minIterations) return data;
     var usec = (data.elapsed * 1000) / data.runs;
     var latencySamples = (benchmark.latencyResult != null) ? benchmark.latencyResult() : [0];
-    var percentile = 95;
+    var percentile = 99.5;
     var latency = BenchmarkSuite.AverageAbovePercentile(latencySamples, percentile) * 1000;
     this.NotifyStep(new BenchmarkResult(benchmark, usec, latency));
     return null;
index 3b7ff84..f16d666 100644 (file)
@@ -53,17 +53,17 @@ JetStream.addReferences({
     "earley-boyer": 2.5795868328750444,
     "regexp-2010": 61.82352941176467,
     "splay": 0.9286376274328075,
-    "splay-latency": 3.524855736311738,
+    "splay-latency": 40,
     "navier-stokes": 9.653846153846146,
     "pdfjs": 88.4166666666666,
     "mandreel": 157.14285714285708,
-    "mandreel-latency": 1.4940079129942474,
+    "mandreel-latency": 10,
     "gbemu": 135.9999999999998,
     "code-first-load": 2.3249465349251905,
     "box2d": 28.416666666666636,
     "zlib": 887.666666666666,
     "typescript": 1149.9999999999993,
     "lua": 29858,
-    "cdjs": 14,
+    "cdjs": 20,
     "geomean": 31.556451704472156,
 });
index a106a88..0f70d33 100755 (executable)
@@ -26,7 +26,7 @@
 require "pathname"
 require "shellwords"
 
-VERSION = "1.1-alpha2"
+VERSION = "1.1-alpha3"
 DIRECTORY_NAME = "JetStream-#{VERSION}"
 
 CDJS_FILES = [