Clone
Servo Benchmarking Report (November 2024)
Delan Azabani edited this page 2024-11-15 12:41:04 +08:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Weve analysed the runtime performance of Servo and Chromium in the cases of loading four websites, as of the versions below:

We found the newer versions of Servo (servo.2 and servo.3) to be significantly faster than the older version (servo.1), thanks to several performance improvements we landed last month. For example, taking the average change across the pages under test with a two-CPU configuration, First Contentful Paint times are 23% lower, and overall rendering times are 38% lower.

servo.3 continues to outperform Chromium in First Contentful Paint for three of the four pages under test. We still lag behind Chromium (chromium) in FCP for www.baidu.com, but are now only 81% slower, down from 97% slower.

servo.3 performs less favourably in overall rendering time, but improves over servo.1 and servo.2. We now outperform Chromium (chromium) in all CPU configurations for one of the four pages under test (zh.wikipedia.org), and outperform it for some CPU configurations in two others (servo.org and www.baidu.com).

All of the code and data used to write this report is in this file including:

  • perf-analysis-tools — our tooling
    • perf-analysis-tools/run-all-benchmarks.sh — how we ran the benchmarks
    • convert-pftrace-to-json.sh — converts Chrome tracing files to JSON
    • analyse-cpu-results.sh — computes summaries for each sample within a CPU configuration
    • generate-report-tables.sh — collates summaries into tables for this report
  • */summary.txt — summary results (generated by our tooling)
  • Data for each engine under test
    • *.servo.1 — data for the first version of Servo (servo.1)
    • *.servo.2 — data for the second version of Servo (servo.2)
    • *.servo.3 — data for the third version of Servo (servo.3)
    • *.chromium — data for Chromium (chromium)
    • */*.html — Servo HTML traces
    • */*.pftrace — Chrome tracing files
  • Data for each page under test

Methodology

This report further automates the collection and analysis of data over our previous report, since there are now 64 configurations (four engines × four pages × four CPU configurations) that are each run 30 times. Changes to our procedures include:

  • Merging the mitmproxy recordings, so the replay only needs to be started once
  • Fixing intermittent xdotool failures caused by races in benchmark-servo.sh
  • Parameterising our CPU isolation script over Linux cpu ids
  • Writing scripts to run benchmarks across the 64 configurations
  • Making those scripts set up the correct CPU isolation automatically
  • Making measurement resumable at sample boundaries (every 30 runs)

Note that the times in this report are not directly comparable with those in the previous report, due to some minor changes in measurement procedure, such as increasing the time we run each browser from 5 seconds to 10 seconds. The results for servo.1 are the best representation of how Servo performed at the time of the previous report.

That said, due to time constraints, our methodology is otherwise unchanged from the previous report. Notably, there are several unresolved limitations in our collection and interpretation of data, which well discuss below.

The test scenarios in this report only cover cold page loads, without any caching or further user interaction.

Times are not cut off after the page is “fully loaded”, which may distort results due to layout operations after page load.

In § User-facing paint metrics, we dont have Largest Contentful Paint (LCP) data, since this metric is not yet implemented in Servo.

In § Raw events, much of the LayoutPerform time in Servo is also recorded in ParseHTML, yielding unreasonable ParseHTML times, and ScriptEvaluate times in Servo are unreasonably small compared to similar events in Chromium.

In § Rendering phases model, the Rasterise phase for Chromium is incomplete, since it only includes Layerize events, and Parse and Script phase times are heavily distorted between Servo and Chromium.

Test environment

Our test environment is as follows:

  • AMD 7950X (amd64)
  • NixOS 24.11.20240905.8ce7f9f running X11
  • Linux 6.11.0-rc6, linuxPackages_testing from NixOS (as above)
  • Servo is built with ./mach build --profile production-stripped
  • Chromium is google-chrome from NixOS (as above)
    • NIXPKGS_ALLOW_UNFREE=1 nix run --impure github:NixOS/nixpkgs/8ce7f9f78bdbe659a8d7c1fe376b89b3a43e4cdc\#google-chrome
  • servo/perf-analysis-tools as of 01d5b4152dae0

The workloads are run in a shell created as follows:

$ newgrp mitmproxy
$ nix-shell ~/path/to/servo/shell.nix --run zsh

CPU isolation is handled in § Measurement procedure.

Measurement procedure

To ensure that the windows are kept offscreen, we use the following i3 config:

$ cat ~/.config/i3/config
for_window [instance="^servo$" class="^servo$"] floating enable
for_window [instance="^google-chrome [(]" class="^Google-chrome$"] floating enable
assign [instance="^servo$" class="^servo$"] 7
assign [instance="^google-chrome [(]" class="^Google-chrome$"] 7

To ensure that the benchmarking scripts can set up the CPU isolation automatically, we use the following sudoers(5) config:

$ cat /etc/sudoers
%wheel  ALL=(ALL:ALL)    NOPASSWD: /path/to/perf-analysis-tools/isolate-cpu-for-shell.sh

We run the benchmarks as follows:

$ cd perf-analysis-tools

$ cat run-all-benchmarks.sh
#!/usr/bin/env zsh
set -euo pipefail -o bsdecho
sudo ./isolate-cpu-for-shell.sh $$ 14 15
./run-benchmarks-for-cpu.sh ../report3/2cpu
sudo ./isolate-cpu-for-shell.sh $$ {12..15}
./run-benchmarks-for-cpu.sh ../report3/4cpu
sudo ./isolate-cpu-for-shell.sh $$ {10..15}
./run-benchmarks-for-cpu.sh ../report3/6cpu
sudo ./isolate-cpu-for-shell.sh $$ {8..15}
./run-benchmarks-for-cpu.sh ../report3/8cpu

$ ./run-all-benchmarks.sh

This in turn sets up the CPU isolation for each CPU configuration and runs the benchmarks:

$ cat run-benchmarks-for-cpu.sh
#!/usr/bin/env zsh
set -euo pipefail -o bsdecho
sample_dir=$1
./run-benchmarks-for-site.sh servo.org https://servo.org/ "$sample_dir"
./run-benchmarks-for-site.sh www.amazon.com https://www.amazon.com/dp/B07S9XZYN2 "$sample_dir"
./run-benchmarks-for-site.sh zh.wikipedia.org https://zh.wikipedia.org/wiki/Servo "$sample_dir"
./run-benchmarks-for-site.sh www.baidu.com https://www.baidu.com/ "$sample_dir"

This in turn runs the benchmarks for each site:

#!/usr/bin/env zsh
set -euo pipefail -o bsdecho
key=$1
url=$2
sample_dir=$3
./benchmark-servo.sh ~/code/servo/servo.20241006.f8933a57353aeca14a6cbc60b3cb0cf98cab6c5d/servo "$url" 30 "$sample_dir/$key.servo.1"
./benchmark-servo.sh ~/code/servo/servo.20241022.7015e0fb5f1a63ed13a5b07b056036e6e7adbc16/servo "$url" 30 "$sample_dir/$key.servo.2"
./benchmark-servo.sh ~/code/servo/servo.20241030.bac1101163a436096fe0b71bed79094658bba3b2/servo "$url" 30 "$sample_dir/$key.servo.3"
./benchmark-chromium.sh google-chrome-stable "$url" 30 "$sample_dir/$key.chromium"

This in turn runs the benchmarks for each engine.

Analysis procedure

We first convert the Chromium traces from Perfetto format to JSON format:

$ ./convert-pftrace-to-json.sh /path/to/traceconv

Then we compute summaries for each sample within a CPU configuration:

$ for i in ?cpu; do ./analyse-cpu-results.sh $i; done

Then we collate those summaries and generate the tables:

$ ./generate-report-tables.sh

User-facing paint metrics

The paint metrics (FP and FCP) are standard web platform concepts that should be comparable between Chromium and Servo. In Chromium, their duration is measured from the markAsMainFrame event. In Servo, they are measured from the start of the first event associated with the page URL, which is always a ScriptParseHTML event.

The results are as follows.

FP (synthetic)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 401.3ms 393.6ms 385.9ms 373.0ms
servo.2 321.3ms 359.7ms 359.6ms 302.8ms
servo.3 314.9ms 350.5ms 301.4ms 309.1ms
chromium 686.5ms 467.9ms 436.0ms 429.1ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 1.063s 1.178s 1.268s 1.174s
servo.2 973.5ms 1.090s 1.201s 1.209s
servo.3 974.1ms 1.139s 1.210s 1.211s
chromium 537.0ms 321.9ms 284.0ms 275.2ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 334.9ms 302.6ms 288.6ms 299.9ms
servo.2 146.4ms 124.3ms 134.0ms 127.2ms
servo.3 139.8ms 132.0ms 123.5ms 124.5ms
chromium 666.1ms 396.1ms 402.3ms 403.4ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 741.3ms 711.1ms 788.4ms 793.6ms
servo.2 692.4ms 712.0ms 686.0ms 689.3ms
servo.3 696.7ms 691.2ms 691.2ms 678.5ms
chromium 791.4ms 805.6ms 799.4ms 788.2ms

FCP (synthetic)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 401.3ms 393.6ms 385.9ms 373.0ms
servo.2 321.3ms 359.7ms 359.6ms 302.8ms
servo.3 314.9ms 350.5ms 301.4ms 309.1ms
chromium 686.5ms 467.9ms 436.0ms 429.1ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 1.063s 1.178s 1.268s 1.174s
servo.2 973.5ms 1.090s 1.201s 1.209s
servo.3 974.1ms 1.139s 1.210s 1.211s
chromium 537.0ms 321.9ms 284.0ms 275.2ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 334.9ms 302.6ms 288.6ms 299.9ms
servo.2 146.4ms 124.3ms 134.0ms 127.2ms
servo.3 139.8ms 132.0ms 123.5ms 124.5ms
chromium 666.1ms 396.1ms 402.3ms 403.4ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 741.3ms 711.1ms 788.4ms 793.6ms
servo.2 692.4ms 712.0ms 686.0ms 689.3ms
servo.3 696.7ms 691.2ms 691.2ms 678.5ms
chromium 791.4ms 805.6ms 799.4ms 788.2ms

Raw events

For a detailed discussion of these events, see this section in our previous report.

The results are as follows, but the Servo and Chromium results are not comparable.

Compositing (real)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 53.92ms 53.27ms 52.92ms 53.66ms
servo.2 53.72ms 55.37ms 53.80ms 52.00ms
servo.3 51.15ms 55.20ms 54.44ms 51.60ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 26.51ms 76.70ms 76.55ms 74.21ms
servo.2 82.79ms 76.54ms 75.68ms 75.92ms
servo.3 84.53ms 79.57ms 77.20ms 74.21ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 41.18ms 40.38ms 40.17ms 39.61ms
servo.2 40.96ms 41.86ms 40.79ms 40.04ms
servo.3 26.82ms 42.33ms 40.70ms 40.14ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 8.364ms 6.094ms 6.065ms 3.165ms
servo.2 5.268ms 30.14ms 4.472ms 29.48ms
servo.3 9.122ms 30.11ms 7.166ms 29.94ms

LayoutPerform (real)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 128.5ms 118.0ms 116.3ms 116.2ms
servo.2 57.93ms 51.04ms 49.21ms 48.93ms
servo.3 28.65ms 21.55ms 20.57ms 19.79ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 5.666s 4.871s 4.844s 3.760s
servo.2 5.971s 5.724s 4.105s 3.424s
servo.3 5.311s 5.010s 4.312s 3.346s

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 262.5ms 238.1ms 228.8ms 228.7ms
servo.2 163.9ms 160.1ms 140.7ms 147.9ms
servo.3 149.4ms 168.2ms 149.3ms 199.1ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 179.3ms 161.4ms 162.8ms 150.5ms
servo.2 50.05ms 106.5ms 40.26ms 52.91ms
servo.3 30.84ms 39.48ms 38.87ms 54.77ms

ScriptEvaluate (real)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 356.9μs 354.2μs 354.2μs 355.0μs
servo.2 352.2μs 361.2μs 359.5μs 359.7μs
servo.3 356.5μs 359.2μs 355.9μs 356.1μs

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 229.8ms 181.2ms 202.7ms 182.0ms
servo.2 196.7ms 152.8ms 177.0ms 151.0ms
servo.3 187.2ms 149.1ms 180.6ms 141.3ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 654.2μs 675.0μs 663.1μs 658.3μs
servo.2 637.0μs 674.9μs 639.7μs 636.4μs
servo.3 731.9μs 677.6μs 648.4μs 636.1μs

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 9.680ms 9.287ms 9.204ms 9.166ms
servo.2 9.629ms 9.133ms 9.168ms 9.022ms
servo.3 9.764ms 9.211ms 9.167ms 9.074ms

ScriptParseHTML (real)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 90.71ms 86.90ms 86.40ms 86.17ms
servo.2 22.59ms 20.51ms 20.03ms 19.89ms
servo.3 16.15ms 14.28ms 13.96ms 13.64ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 825.2ms 831.2ms 805.1ms 808.7ms
servo.2 837.2ms 780.5ms 724.0ms 731.0ms
servo.3 744.0ms 676.7ms 736.3ms 704.1ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 250.6ms 226.0ms 219.3ms 213.1ms
servo.2 45.03ms 36.73ms 37.76ms 35.55ms
servo.3 43.08ms 36.81ms 35.29ms 35.99ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 84.62ms 83.58ms 83.57ms 83.41ms
servo.2 86.24ms 85.47ms 85.62ms 85.30ms
servo.3 83.20ms 83.02ms 82.92ms 82.61ms

EvaluateScript (real)

servo.org

2cpu 4cpu 6cpu 8cpu
chromium 4.919ms 4.415ms 4.408ms 4.384ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
chromium 166.1ms 107.2ms 99.11ms 96.07ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
chromium 9.789ms 6.957ms 6.893ms 6.982ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
chromium 73.95ms 129.1ms 46.14ms 124.0ms

FunctionCall (real)

servo.org

2cpu 4cpu 6cpu 8cpu
chromium 1.116ms 1.102ms 1.110ms 1.100ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
chromium 912.5ms 651.6ms 611.6ms 611.4ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
chromium 118.6ms 90.91ms 89.47ms 88.44ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
chromium 28.56ms 70.39ms 12.72ms 68.94ms

Layerize (real)

servo.org

2cpu 4cpu 6cpu 8cpu
chromium 228.0μs 269.0μs 261.0μs 268.0μs

www.amazon.com

2cpu 4cpu 6cpu 8cpu
chromium 9.156ms 9.024ms 9.179ms 8.352ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
chromium 3.358ms 3.146ms 3.171ms 2.895ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
chromium 472.0μs 372.0μs 322.0μs 403.0μs

Layout (real)

servo.org

2cpu 4cpu 6cpu 8cpu
chromium 50.03ms 42.30ms 41.29ms 40.29ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
chromium 152.3ms 105.2ms 99.62ms 96.77ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
chromium 140.6ms 124.5ms 123.5ms 123.0ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
chromium 26.51ms 24.25ms 22.96ms 23.41ms

Paint (real)

servo.org

2cpu 4cpu 6cpu 8cpu
chromium 918.0μs 1.139ms 1.137ms 1.151ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
chromium 22.33ms 20.18ms 16.53ms 17.70ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
chromium 12.52ms 13.06ms 13.13ms 12.97ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
chromium 855.0μs 878.0μs 724.0μs 880.0μs

ParseHTML (real)

servo.org

2cpu 4cpu 6cpu 8cpu
chromium 7.442ms 5.406ms 5.400ms 5.573ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
chromium 190.1ms 133.3ms 122.6ms 117.2ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
chromium 8.332ms 5.448ms 5.090ms 5.113ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
chromium 34.92ms 26.98ms 24.57ms 24.79ms

PrePaint (real)

servo.org

2cpu 4cpu 6cpu 8cpu
chromium 624.0μs 762.0μs 743.0μs 748.0μs

www.amazon.com

2cpu 4cpu 6cpu 8cpu
chromium 21.91ms 18.63ms 16.29ms 17.02ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
chromium 4.945ms 4.943ms 4.938ms 4.457ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
chromium 746.0μs 754.0μs 563.0μs 763.0μs

TimerFire (real)

servo.org

2cpu 4cpu 6cpu 8cpu
chromium 444.0μs 451.0μs 450.0μs 455.0μs

www.amazon.com

2cpu 4cpu 6cpu 8cpu
chromium 575.7ms 418.3ms 402.6ms 393.1ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
chromium 29.84ms 25.52ms 24.89ms 23.27ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
chromium 8.511ms 6.742ms 4.359ms 6.372ms

UpdateLayoutTree (real)

servo.org

2cpu 4cpu 6cpu 8cpu
chromium 14.87ms 14.85ms 14.44ms 14.72ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
chromium 129.6ms 86.65ms 84.23ms 83.08ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
chromium 24.13ms 18.37ms 18.53ms 17.83ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
chromium 4.689ms 6.415ms 4.720ms 6.196ms

Rendering phases model

For a detailed discussion of this model, see this section in our previous report.

The results are as follows, but we do not consider them very meaningful.

Parse (synthetic)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 90.71ms 86.90ms 86.40ms 86.17ms
servo.2 22.59ms 20.51ms 20.03ms 19.89ms
servo.3 16.15ms 14.28ms 13.96ms 13.64ms
chromium 7.318ms 5.303ms 5.296ms 5.475ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 825.2ms 831.2ms 805.1ms 808.7ms
servo.2 837.2ms 780.5ms 724.0ms 731.0ms
servo.3 744.0ms 676.7ms 736.3ms 704.1ms
chromium 190.1ms 133.3ms 122.6ms 117.2ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 250.6ms 226.0ms 219.3ms 213.1ms
servo.2 45.03ms 36.73ms 37.76ms 35.55ms
servo.3 43.08ms 36.81ms 35.29ms 35.99ms
chromium 8.332ms 5.448ms 5.090ms 5.113ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 84.62ms 83.58ms 83.57ms 83.41ms
servo.2 86.24ms 85.47ms 85.62ms 85.30ms
servo.3 83.20ms 83.02ms 82.92ms 82.61ms
chromium 34.92ms 26.98ms 24.57ms 24.79ms

Script (synthetic)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 356.9μs 354.2μs 354.2μs 355.0μs
servo.2 352.2μs 361.2μs 359.5μs 359.7μs
servo.3 356.5μs 359.2μs 355.9μs 356.1μs
chromium 6.171ms 5.588ms 5.556ms 5.537ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 229.8ms 181.2ms 202.7ms 182.0ms
servo.2 196.7ms 152.8ms 177.0ms 151.0ms
servo.3 187.2ms 149.1ms 180.6ms 141.3ms
chromium 1.145s 831.6ms 762.2ms 761.7ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 654.2μs 675.0μs 663.1μs 658.3μs
servo.2 637.0μs 674.9μs 639.7μs 636.4μs
servo.3 731.9μs 677.6μs 648.4μs 636.1μs
chromium 130.6ms 100.9ms 98.53ms 97.29ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 9.680ms 9.287ms 9.204ms 9.166ms
servo.2 9.629ms 9.133ms 9.168ms 9.022ms
servo.3 9.764ms 9.211ms 9.167ms 9.074ms
chromium 103.6ms 206.2ms 59.76ms 195.8ms

Layout (synthetic)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 128.5ms 118.0ms 116.3ms 116.2ms
servo.2 57.93ms 51.04ms 49.21ms 48.93ms
servo.3 28.65ms 21.55ms 20.57ms 19.79ms
chromium 80.82ms 59.30ms 58.29ms 57.53ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 5.666s 4.871s 4.844s 3.760s
servo.2 5.971s 5.724s 4.105s 3.424s
servo.3 5.311s 5.010s 4.312s 3.346s
chromium 380.6ms 243.1ms 222.8ms 214.6ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 262.5ms 238.1ms 228.8ms 228.7ms
servo.2 163.9ms 160.1ms 140.7ms 147.9ms
servo.3 149.4ms 168.2ms 149.3ms 199.1ms
chromium 189.1ms 162.6ms 161.7ms 160.3ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 179.3ms 161.4ms 162.8ms 150.5ms
servo.2 50.05ms 106.5ms 40.26ms 52.91ms
servo.3 30.84ms 39.48ms 38.87ms 54.77ms
chromium 33.17ms 32.69ms 28.97ms 31.56ms

Rasterise (synthetic)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 53.92ms 53.27ms 52.92ms 53.66ms
servo.2 53.72ms 55.37ms 53.80ms 52.00ms
servo.3 51.15ms 55.20ms 54.44ms 51.60ms
chromium 228.0μs 269.0μs 261.0μs 268.0μs

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 26.51ms 76.70ms 76.55ms 74.21ms
servo.2 82.79ms 76.54ms 75.68ms 75.92ms
servo.3 84.53ms 79.57ms 77.20ms 74.21ms
chromium 9.156ms 9.024ms 9.179ms 8.352ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 41.18ms 40.38ms 40.17ms 39.61ms
servo.2 40.96ms 41.86ms 40.79ms 40.04ms
servo.3 26.82ms 42.33ms 40.70ms 40.14ms
chromium 3.358ms 3.146ms 3.171ms 2.895ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 8.364ms 6.094ms 6.065ms 3.165ms
servo.2 5.268ms 30.14ms 4.472ms 29.48ms
servo.3 9.122ms 30.11ms 7.166ms 29.94ms
chromium 472.0μs 372.0μs 322.0μs 403.0μs

Overall rendering time model

To make the most of the data we have, we can take the union of all of the events above and call that the Renderer. Whenever Servo or Chromium is recording time in Renderer, they are busy with some phase of the rendering process for the page under test (or a generic task, like Compositing in Servo).

The results are as follows.

Renderer (synthetic)

servo.org

2cpu 4cpu 6cpu 8cpu
servo.1 193.5ms 176.5ms 173.8ms 172.9ms
servo.2 115.4ms 111.1ms 107.1ms 106.9ms
servo.3 85.27ms 80.83ms 79.96ms 76.73ms
chromium 97.99ms 68.00ms 66.68ms 65.99ms

www.amazon.com

2cpu 4cpu 6cpu 8cpu
servo.1 6.292s 5.322s 5.236s 4.151s
servo.2 6.413s 6.133s 4.665s 3.895s
servo.3 5.799s 5.607s 4.963s 3.783s
chromium 1.481s 1.035s 983.9ms 971.4ms

zh.wikipedia.org

2cpu 4cpu 6cpu 8cpu
servo.1 334.7ms 306.4ms 296.1ms 294.4ms
servo.2 176.5ms 175.9ms 156.5ms 163.5ms
servo.3 202.7ms 183.6ms 165.5ms 214.5ms
chromium 347.5ms 267.2ms 265.8ms 262.3ms

www.baidu.com

2cpu 4cpu 6cpu 8cpu
servo.1 279.2ms 251.4ms 252.6ms 236.7ms
servo.2 145.3ms 214.2ms 133.4ms 169.1ms
servo.3 141.9ms 153.4ms 153.5ms 167.8ms
chromium 139.9ms 245.2ms 97.19ms 232.6ms