From 17de51ef5bc8de9592190b1a2681c8ab4276a249 Mon Sep 17 00:00:00 2001
From: Daniel Lehmann
JetStream 3 combines together a variety of JavaScript and WebAssembly benchmarks, covering a variety of
- advanced workloads and programming techniques, and reports a single score that
- balances them using a geometric mean.
+ advanced workloads and programming techniques, and reports a single score that balances them using the
+ geometric mean.
- Each benchmark measures a distinct workload, and no single optimization
- technique is sufficient to speed up all benchmarks. Some benchmarks demonstrate tradeoffs, and
- aggressive or specialized optimizations for one benchmark might make another benchmark slower.
+ Each benchmark measures a distinct workload, and no single optimization technique is sufficient to speed
+ up all benchmarks.
+ Some benchmarks demonstrate tradeoffs, and aggressive or specialized optimizations for one benchmark
+ might make another benchmark slower.
JetStream 3 rewards browsers that start up quickly, execute code quickly, and continue running smoothly.
Each benchmark in JetStream 3 computes its own individual score.
- Scores in JetStream are dimensionless floats, where a higher score is better.
+ Scores in JetStream are dimensionless floating point numbers, where a higher score is better.
JetStream weighs each benchmark equally, taking the geometric mean over each individual
benchmark's score to compute the overall JetStream 3 score.
The geometric mean ensures that a multiplicative improvement of any individual score has the same effect
on the aggregated score, regardless of the absolute value of the individual score.
For example, an improvement by 5% of the sub score of benchmark A has the same effect on the total score
- as an improvement by 5% of the sub score of benchmark B.
+ as an improvement by 5% of the sub score of benchmark B, even if A ran for a shorter time than B.
It's not enough to just measure the total running time of a workload.
- Browsers may perform differently for the same JavaScript workload depending on how many times it
- has run. For example, garbage collection runs periodically, making some iterations take longer than
- others. Code that runs repeatedly gets optimized by the browser, so the first iteration
- of any workload is usually more expensive than the rest.
+ Browsers may perform differently for the same workload depending on how many times it has run.
+ For example, garbage collection runs periodically, making some iterations take longer than others.
+ Code that runs repeatedly gets optimized by the browser, so the first iteration of any workload is
+ usually more expensive than the rest.
- For most of the JavaScript and WebAssembly benchmarks in JetStream 3, individual scores
- equally weigh startup performance, worst case performance, and average case
- performance. These three metrics are crucial to running performant JavaScript
- in the browser. Fast startup times lead browsers to loading pages more quickly. Good
- worst case performance ensures web applications can run without hiccups. Fast average
- case performance makes it so that the most advanced web applications can run at all.
+ For most of the JavaScript and WebAssembly benchmarks in JetStream 3, individual scores equally weigh
+ startup performance, worst case performance, and average case performance.
+ These three metrics are crucial to running performant JavaScript and WebAssembly in the browser.
+ Fast startup times lead browsers to loading pages more quickly.
+ Good worst case performance ensures web applications can run without hiccups.
+ Fast average case performance makes it so that the most advanced web applications can run at all.
- An important component of JetStream 1 were the asm.js subset of benchmarks. With the release
- of WebAssembly, the importance of asm.js has lessened since many users of asm.js are
- now using WebAssembly. JetStream 3 has converted many of the asm.js benchmarks from
- JetStream 1 into WebAssembly.
+ All but two of JetStream 3's benchmarks run for N iterations, where N is often 120.
+ JetStream 3 calculates the startup score from the time it takes to run the first iteration.
+ The worst case score is the average of the worst M iterations, excluding the first iteration.
+ M is always less than N, and is usually 4.
+ The average case score is the average of all but the first iteration.
+ These three scores are weighed equally using the geometric mean.
- All but one of JetStream 3's JavaScript benchmarks run for N iterations, where
- N is usually 120. JetStream 3 reports the startup score as the time it takes to run the first iteration.
- The worst case score is the average of the worst M iterations, excluding the first iteration.
- M is always less than N, and is usually 4. The average case score is the average
- of all but the first iteration. These three scores are weighed equally using the geometric
- mean.
+ JetStream 3 also includes a JavaScript benchmark named WSL.
+ WSL is an implementation of a GPU shading language written in JavaScript.
+ WSL does not use the above mechanism for scoring because it has a long running time.
+ Instead, the WSL benchmark computes its score as the geometric mean over two metrics: the time it takes
+ to compile the WSL standard library, and the time it takes to run through the WSL specification test
+ suite.
- JetStream 3 also includes a JavaScript benchmark named WSL. WSL is an implementation of a
- GPU shading language written in JavaScript. WSL does not use the above mechanism for scoring
- because it has a long running time. Instead, the WSL benchmark computes its score as the
- geometric mean over two metrics: the time it takes to compile the WSL standard library, and the time
- it takes to run through the WSL specification test suite.
+ JetStream 3 includes parts of these benchmark suites that came before it:
+ SunSpider,
+ Octane 2,
+ JetStream 2,
+ ARES-6,
+ Web Tooling Benchmark,
+ and benchmarks inspired by Kraken.
+ JetStream 3 also includes a new set of benchmarks that measure the performance of WebAssembly, Web
+ Workers, Promises, async iteration, unicode regular expressions, and JavaScript parsing.
- JetStream 3 includes parts of these benchmark suites that came before it: SunSpider,
- Octane 2, JetStream 1,
- ARES-6, Web Tooling Benchmark, and benchmarks
- inspired by Kraken.
- JetStream 3 also includes a new set of benchmarks that measure the performance of WebAssembly, Web
- Workers,
- Promises, async iteration, unicode regular expressions, and JavaScript parsing.
+ Earlier versions of JetStream also contained asm.js workloads.
+ With the release of WebAssembly, developers should switch to that technology instead.
+ JetStream 3 thus contains no asm.js workloads any longer and has converted some of the prior ones into
+ WebAssembly.
- JetStream 3 includes several benchmarks from earlier JetStream versions, but updates the benchmark
- driver to
- improve score stability. This is achieved by pre-fetching network resources prior to running
- the benchmarks. This can reduce perturbations on the measurement of JavaScript execution
- time due to second order effects of pause times induced by network latency.
+ Besides the aforementioned averaging over multiple iterations, the JetStream 3 benchmark driver also
+ tries to improve score stability by other means.
+ For example, it pre-fetches network resources prior to running the benchmarks.
+ This can reduce perturbations on the measurement of JavaScript execution time due to second order
+ effects of pause times induced by network latency.
@@ -137,19 +138,22 @@ In-Depth Analysis
In-Depth Analysis
+ The greyed-out workloads are not run by default but can be manually enabled on the command-line or via + the testList URL parameter. +
+