neqo icon indicating copy to clipboard operation
neqo copied to clipboard

fix: Add some crate features for performance

Open larseggert opened this issue 9 months ago • 4 comments

Let's see if they do.

Also, @mxinden, I was wondering why we went with a multi-threaded tokio client and server. I'm wondering if the thread-management overheads are worth it compared to using just the rt scheduler?

larseggert avatar Mar 06 '25 10:03 larseggert

Codecov Report

:white_check_mark: All modified and coverable lines are covered by tests. :white_check_mark: Project coverage is 94.91%. Comparing base (8c65240) to head (f01b7a3). :warning: Report is 10 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2477      +/-   ##
==========================================
+ Coverage   94.88%   94.91%   +0.03%     
==========================================
  Files         115      115              
  Lines       34313    34313              
  Branches    34313    34313              
==========================================
+ Hits        32558    32569      +11     
+ Misses       1748     1737      -11     
  Partials        7        7              
Components Coverage Δ
neqo-common 97.61% <ø> (ø)
neqo-crypto 89.64% <ø> (ø)
neqo-http3 93.71% <ø> (ø)
neqo-qpack 95.45% <ø> (ø)
neqo-transport 95.95% <ø> (+0.05%) :arrow_up:
neqo-udp 89.85% <ø> (+0.48%) :arrow_up:

codecov[bot] avatar Mar 06 '25 10:03 codecov[bot]

Failed Interop Tests

QUIC Interop Runner, client vs. server, differences relative to 8c6524015e07834a72d566804041544d746e93ef.

neqo-latest as client

neqo-latest as server

All results

Succeeded Interop Tests

QUIC Interop Runner, client vs. server

neqo-latest as client

neqo-latest as server

Unsupported Interop Tests

QUIC Interop Runner, client vs. server

neqo-latest as client

neqo-latest as server

github-actions[bot] avatar Mar 06 '25 10:03 github-actions[bot]

Benchmark results

Performance differences relative to a341259e7b317445bc9dee12172a160722819b9d.

1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: :green_heart: Performance has improved.
       time:   [198.58 ms 198.94 ms 199.30 ms]
       thrpt:  [501.76 MiB/s 502.67 MiB/s 503.58 MiB/s]
change:
       time:   [−2.0523% −1.7659% −1.4888%] (p = 0.00 +1.7976% +2.0953%]

Found 1 outliers among 100 measurements (1.00%) 1 (1.00%) high mild

1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: No change in performance detected.
       time:   [302.98 ms 304.36 ms 305.74 ms]
       thrpt:  [32.708 Kelem/s 32.856 Kelem/s 33.006 Kelem/s]
change:
       time:   [−0.0873% +0.5531% +1.2132%] (p = 0.09 > 0.05)
       thrpt:  [−1.1987% −0.5500% +0.0874%]
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
       time:   [27.349 ms 27.439 ms 27.558 ms]
       thrpt:  [36.287   B/s 36.444   B/s 36.564   B/s]
change:
       time:   [−0.7745% −0.2244% +0.3429%] (p = 0.45 > 0.05)
       thrpt:  [−0.3417% +0.2249% +0.7806%]

Found 22 outliers among 100 measurements (22.00%) 2 (2.00%) low severe 20 (20.00%) high severe

1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: :green_heart: Performance has improved.
       time:   [622.90 ms 627.59 ms 632.27 ms]
       thrpt:  [158.16 MiB/s 159.34 MiB/s 160.54 MiB/s]
change:
       time:   [−5.0735% −4.1248% −3.2188%] (p = 0.00 +4.3022% +5.3446%]

Found 9 outliers among 100 measurements (9.00%) 3 (3.00%) low severe 3 (3.00%) low mild 1 (1.00%) high mild 2 (2.00%) high severe

decode 4096 bytes, mask ff: Change within noise threshold.
       time:   [11.629 µs 11.672 µs 11.721 µs]
       change: [−1.4598% −1.0726% −0.5453%] (p = 0.00 Found 15 outliers among 100 measurements (15.00%)
1 (1.00%) low severe
3 (3.00%) low mild
11 (11.00%) high severe
decode 1048576 bytes, mask ff: Change within noise threshold.
       time:   [3.0583 ms 3.0679 ms 3.0805 ms]
       change: [+0.7403% +1.2257% +1.7377%] (p = 0.00 Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) low mild
7 (7.00%) high severe
decode 4096 bytes, mask 7f: :green_heart: Performance has improved.
       time:   [19.363 µs 19.446 µs 19.562 µs]
       change: [−4.0416% −3.0524% −2.3825%] (p = 0.00 Found 17 outliers among 100 measurements (17.00%)
4 (4.00%) low severe
1 (1.00%) low mild
12 (12.00%) high severe
decode 1048576 bytes, mask 7f: Change within noise threshold.
       time:   [5.0845 ms 5.0972 ms 5.1105 ms]
       change: [+0.4872% +0.8734% +1.2405%] (p = 0.00 Found 15 outliers among 100 measurements (15.00%)
15 (15.00%) high severe
decode 4096 bytes, mask 3f: :green_heart: Performance has improved.
       time:   [5.5305 µs 5.5588 µs 5.5930 µs]
       change: [−33.157% −32.863% −32.534%] (p = 0.00 Found 7 outliers among 100 measurements (7.00%)
2 (2.00%) high mild
5 (5.00%) high severe
decode 1048576 bytes, mask 3f: :broken_heart: Performance has regressed.
       time:   [1.7873 ms 1.7997 ms 1.8123 ms]
       change: [+12.244% +13.138% +13.972%] (p = 0.00 
1000 streams of 1 bytes/multistream: :broken_heart: Performance has regressed.
       time:   [47.764 ns 47.945 ns 48.127 ns]
       change: [+29.708% +31.271% +32.821%] (p = 0.00 Found 1 outliers among 500 measurements (0.20%)
1 (0.20%) high mild
1000 streams of 1000 bytes/multistream: :broken_heart: Performance has regressed.
       time:   [47.002 ns 47.177 ns 47.353 ns]
       change: [+22.520% +23.830% +25.204%] (p = 0.00 
coalesce_acked_from_zero 1+1 entries: No change in performance detected.
       time:   [88.065 ns 88.418 ns 88.774 ns]
       change: [−0.4540% −0.0593% +0.3303%] (p = 0.77 > 0.05)

Found 8 outliers among 100 measurements (8.00%) 7 (7.00%) high mild 1 (1.00%) high severe

coalesce_acked_from_zero 3+1 entries: No change in performance detected.
       time:   [105.56 ns 106.12 ns 106.83 ns]
       change: [−0.4586% +0.0028% +0.4900%] (p = 0.99 > 0.05)

Found 16 outliers among 100 measurements (16.00%) 1 (1.00%) high mild 15 (15.00%) high severe

coalesce_acked_from_zero 10+1 entries: No change in performance detected.
       time:   [104.67 ns 105.03 ns 105.46 ns]
       change: [−0.3186% +0.1905% +0.9788%] (p = 0.63 > 0.05)

Found 9 outliers among 100 measurements (9.00%) 3 (3.00%) low severe 1 (1.00%) low mild 5 (5.00%) high severe

coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
       time:   [88.603 ns 88.775 ns 88.973 ns]
       change: [−1.1413% −0.3373% +0.4524%] (p = 0.44 > 0.05)

Found 11 outliers among 100 measurements (11.00%) 6 (6.00%) high mild 5 (5.00%) high severe

RxStreamOrderer::inbound_frame(): No change in performance detected.
       time:   [107.89 ms 107.96 ms 108.03 ms]
       change: [−0.2639% −0.0098% +0.1676%] (p = 0.94 > 0.05)

Found 11 outliers among 100 measurements (11.00%) 10 (10.00%) low mild 1 (1.00%) high severe

sent::Packets::take_ranges: No change in performance detected.
       time:   [8.0893 µs 8.3207 µs 8.5443 µs]
       change: [−3.3996% +3.7280% +13.696%] (p = 0.52 > 0.05)

Found 22 outliers among 100 measurements (22.00%) 4 (4.00%) low severe 11 (11.00%) low mild 3 (3.00%) high mild 4 (4.00%) high severe

transfer/pacing-false/varying-seeds: Change within noise threshold.
       time:   [37.216 ms 37.293 ms 37.371 ms]
       change: [+0.5064% +0.8545% +1.2038%] (p = 0.00 
transfer/pacing-true/varying-seeds: Change within noise threshold.
       time:   [37.913 ms 38.031 ms 38.155 ms]
       change: [+0.7331% +1.1975% +1.6586%] (p = 0.00 Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
1 (1.00%) high mild
1 (1.00%) high severe
transfer/pacing-false/same-seed: Change within noise threshold.
       time:   [36.575 ms 36.650 ms 36.735 ms]
       change: [−0.6683% −0.3588% −0.0384%] (p = 0.02 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
transfer/pacing-true/same-seed: Change within noise threshold.
       time:   [38.728 ms 38.817 ms 38.911 ms]
       change: [+1.6254% +1.9650% +2.2815%] (p = 0.00 Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) low mild
1 (1.00%) high severe

Client/server transfer results

Performance differences relative to a341259e7b317445bc9dee12172a160722819b9d.

Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.

Client vs. server (params) Mean ± σ Min Max MiB/s ± σ Δ main Δ main
google vs. google 457.0 ± 3.9 451.4 467.3 70.0 ± 8.2
google vs. neqo (cubic, paced) 272.9 ± 4.2 266.3 285.4 117.3 ± 7.6 -0.0 -0.0%
msquic vs. msquic 127.6 ± 15.5 109.5 192.1 250.8 ± 2.1
msquic vs. neqo (cubic, paced) 141.1 ± 15.1 118.2 199.7 226.8 ± 2.1 :green_heart: -5.8 -4.0%
neqo vs. google (cubic, paced) 762.0 ± 4.0 755.8 773.1 42.0 ± 8.0 -0.9 -0.1%
neqo vs. msquic (cubic, paced) 155.3 ± 4.4 148.7 163.5 206.0 ± 7.3 :green_heart: -1.4 -0.9%
neqo vs. neqo (cubic) 89.0 ± 4.5 82.4 103.8 359.5 ± 7.1 :green_heart: -2.5 -2.8%
neqo vs. neqo (cubic, paced) 91.5 ± 5.0 83.9 109.1 349.6 ± 6.4 -0.1 -0.1%
neqo vs. neqo (reno) 89.1 ± 4.8 80.5 106.8 359.1 ± 6.7 :green_heart: -2.0 -2.2%
neqo vs. neqo (reno, paced) 90.6 ± 4.2 83.8 101.1 353.2 ± 7.6 :green_heart: -1.6 -1.7%
neqo vs. quiche (cubic, paced) 193.5 ± 4.5 185.6 204.4 165.4 ± 7.1 :broken_heart: 1.8 0.9%
neqo vs. s2n (cubic, paced) 218.9 ± 4.1 211.4 226.5 146.2 ± 7.8 :broken_heart: 1.3 0.6%
quiche vs. neqo (cubic, paced) 160.6 ± 5.1 150.8 171.4 199.2 ± 6.3 :broken_heart: 2.7 1.7%
quiche vs. quiche 147.6 ± 4.9 139.8 160.4 216.8 ± 6.5
s2n vs. neqo (cubic, paced) 170.8 ± 4.6 162.0 181.4 187.3 ± 7.0 -0.5 -0.3%
s2n vs. s2n 249.8 ± 27.6 231.2 352.9 128.1 ± 1.2

Download data for profiler.firefox.com or download performance comparison data.

github-actions[bot] avatar Mar 06 '25 11:03 github-actions[bot]

Also, @mxinden, I was wondering why we went with a multi-threaded tokio client and server.

I chose multi-threaded as it is the de-facto default. No other reason.

I'm wondering if the thread-management overheads are worth it compared to using just the rt scheduler?

:+1: worth experimenting. Intuitively, given that it is a single future only, there is no cross-thread communication and thus no significant overhead.

mxinden avatar Mar 06 '25 14:03 mxinden

I am fine merging here. That said, I would prefer individual pull requests per feature, to ensure each change, and not just all changes as a whole, have a positive performance impact. In addition, I don't think we should merge here before we have reliable benchmarks, i.e. not merge here before https://github.com/mozilla/neqo/issues/2657 is fixed.

mxinden avatar May 23 '25 19:05 mxinden

🐰 Bencher Report

Branchfix-features
Testbedt-linux64-ms-280

🚨 1 Alert

BenchmarkMeasure
Units
ViewBenchmark Result
(Result Δ%)
Upper Boundary
(Limit %)
decode 1048576 bytes, mask ffLatency
milliseconds (ms)
📈 plot
🚷 threshold
🚨 alert (🔔)
3.07 ms
(+1.15%)Baseline: 3.04 ms
3.07 ms
(100.04%)

Click to view all benchmark results
BenchmarkLatencyBenchmark Result
nanoseconds (ns)
(Result Δ%)
Upper Boundary
nanoseconds (ns)
(Limit %)
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client📈 view plot
🚷 view threshold
643,680,000.00 ns
(-3.09%)Baseline: 664,191,369.86 ns
732,128,729.16 ns
(87.92%)
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client📈 view plot
🚷 view threshold
636,170,000.00 ns
(+0.77%)Baseline: 631,338,493.15 ns
833,045,917.44 ns
(76.37%)
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client📈 view plot
🚷 view threshold
27,135,000.00 ns
(-0.21%)Baseline: 27,193,041.10 ns
27,664,766.42 ns
(98.09%)
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client📈 view plot
🚷 view threshold
303,130,000.00 ns
(-0.56%)Baseline: 304,823,150.68 ns
316,111,262.80 ns
(95.89%)
1000 streams of 1 bytes/multistream📈 view plot
🚷 view threshold
35.80 ns
(-4.67%)Baseline: 37.55 ns
54.48 ns
(65.71%)
1000 streams of 1000 bytes/multistream📈 view plot
🚷 view threshold
33.94 ns
(-8.45%)Baseline: 37.07 ns
54.08 ns
(62.76%)
RxStreamOrderer::inbound_frame()📈 view plot
🚷 view threshold
111,300,000.00 ns
(+0.73%)Baseline: 110,495,356.16 ns
114,591,968.70 ns
(97.13%)
coalesce_acked_from_zero 1+1 entries📈 view plot
🚷 view threshold
88.48 ns
(-0.23%)Baseline: 88.69 ns
89.30 ns
(99.08%)
coalesce_acked_from_zero 10+1 entries📈 view plot
🚷 view threshold
106.24 ns
(+0.28%)Baseline: 105.94 ns
106.89 ns
(99.39%)
coalesce_acked_from_zero 1000+1 entries📈 view plot
🚷 view threshold
89.08 ns
(-0.24%)Baseline: 89.29 ns
91.62 ns
(97.23%)
coalesce_acked_from_zero 3+1 entries📈 view plot
🚷 view threshold
106.45 ns
(-0.08%)Baseline: 106.53 ns
107.40 ns
(99.11%)
decode 1048576 bytes, mask 3f📈 view plot
🚷 view threshold
1,760,800.00 ns
(+8.76%)Baseline: 1,618,995.89 ns
1,772,698.80 ns
(99.33%)
decode 1048576 bytes, mask 7f📈 view plot
🚷 view threshold
5,090,000.00 ns
(+0.51%)Baseline: 5,064,032.88 ns
5,092,127.33 ns
(99.96%)
decode 1048576 bytes, mask ff📈 view plot
🚷 view threshold
🚨 view alert (🔔)
3,071,200.00 ns
(+1.15%)Baseline: 3,036,191.78 ns
3,069,876.22 ns
(100.04%)

decode 4096 bytes, mask 3f📈 view plot
🚷 view threshold
5,534.50 ns
(-29.78%)Baseline: 7,881.99 ns
10,226.42 ns
(54.12%)
decode 4096 bytes, mask 7f📈 view plot
🚷 view threshold
19,422.00 ns
(-2.45%)Baseline: 19,910.25 ns
20,417.73 ns
(95.12%)
decode 4096 bytes, mask ff📈 view plot
🚷 view threshold
11,627.00 ns
(-1.57%)Baseline: 11,812.75 ns
11,980.92 ns
(97.05%)
sent::Packets::take_ranges📈 view plot
🚷 view threshold
8,283.40 ns
(-1.34%)Baseline: 8,396.24 ns
8,610.25 ns
(96.20%)
transfer/pacing-false/same-seed📈 view plot
🚷 view threshold
35,787,000.00 ns
(+2.48%)Baseline: 34,920,095.89 ns
36,602,828.37 ns
(97.77%)
transfer/pacing-false/varying-seeds📈 view plot
🚷 view threshold
35,447,000.00 ns
(+1.09%)Baseline: 35,063,780.82 ns
36,793,170.04 ns
(96.34%)
transfer/pacing-true/same-seed📈 view plot
🚷 view threshold
37,384,000.00 ns
(+2.34%)Baseline: 36,530,616.44 ns
38,137,907.42 ns
(98.02%)
transfer/pacing-true/varying-seeds📈 view plot
🚷 view threshold
36,577,000.00 ns
(+1.88%)Baseline: 35,901,520.55 ns
37,524,596.72 ns
(97.47%)
🐰 View full continuous benchmarking report in Bencher

github-actions[bot] avatar Jun 24 '25 13:06 github-actions[bot]

🐰 Bencher Report

Branchfix-features
Testbedt-linux64-ms-279
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
nanoseconds (ns)
(Result Δ%)
Upper Boundary
nanoseconds (ns)
(Limit %)
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client📈 view plot
🚷 view threshold
627,590,000.00 ns
(-16.09%)Baseline: 747,942,500.00 ns
1,240,194,385.25 ns
(50.60%)
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client📈 view plot
🚷 view threshold
198,940,000.00 ns
(-52.41%)Baseline: 418,047,500.00 ns
1,407,118,298.59 ns
(14.14%)
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client📈 view plot
🚷 view threshold
27,439,000.00 ns
(+0.77%)Baseline: 27,228,750.00 ns
28,333,645.74 ns
(96.84%)
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client📈 view plot
🚷 view threshold
304,360,000.00 ns
(+1.17%)Baseline: 300,840,000.00 ns
313,432,123.06 ns
(97.11%)
1000 streams of 1 bytes/multistream📈 view plot
🚷 view threshold
47.95 ns
(+33.04%)Baseline: 36.04 ns
69.67 ns
(68.81%)
1000 streams of 1000 bytes/multistream📈 view plot
🚷 view threshold
47.18 ns
(+22.32%)Baseline: 38.57 ns
62.10 ns
(75.97%)
RxStreamOrderer::inbound_frame()📈 view plot
🚷 view threshold
107,960,000.00 ns
(-0.88%)Baseline: 108,920,000.00 ns
116,055,769.08 ns
(93.02%)
coalesce_acked_from_zero 1+1 entries📈 view plot
🚷 view threshold
88.42 ns
(+0.04%)Baseline: 88.39 ns
89.08 ns
(99.25%)
coalesce_acked_from_zero 10+1 entries📈 view plot
🚷 view threshold
105.03 ns
(-0.12%)Baseline: 105.16 ns
106.22 ns
(98.88%)
coalesce_acked_from_zero 1000+1 entries📈 view plot
🚷 view threshold
88.78 ns
(-2.06%)Baseline: 90.64 ns
99.03 ns
(89.65%)
coalesce_acked_from_zero 3+1 entries📈 view plot
🚷 view threshold
106.12 ns
(+0.17%)Baseline: 105.94 ns
106.90 ns
(99.27%)
decode 1048576 bytes, mask 3f📈 view plot
🚷 view threshold
1,799,700.00 ns
(+9.55%)Baseline: 1,642,750.00 ns
2,054,214.67 ns
(87.61%)
decode 1048576 bytes, mask 7f📈 view plot
🚷 view threshold
5,097,200.00 ns
(+0.65%)Baseline: 5,064,475.00 ns
5,154,319.19 ns
(98.89%)
decode 1048576 bytes, mask ff📈 view plot
🚷 view threshold
3,067,900.00 ns
(+0.93%)Baseline: 3,039,775.00 ns
3,113,852.76 ns
(98.52%)
decode 4096 bytes, mask 3f📈 view plot
🚷 view threshold
5,558.80 ns
(-26.89%)Baseline: 7,603.60 ns
12,964.41 ns
(42.88%)
decode 4096 bytes, mask 7f📈 view plot
🚷 view threshold
19,446.00 ns
(-2.06%)Baseline: 19,854.25 ns
20,924.94 ns
(92.93%)
decode 4096 bytes, mask ff📈 view plot
🚷 view threshold
11,672.00 ns
(-1.22%)Baseline: 11,816.50 ns
12,226.78 ns
(95.46%)
sent::Packets::take_ranges📈 view plot
🚷 view threshold
8,320.70 ns
(+1.78%)Baseline: 8,175.35 ns
8,875.44 ns
(93.75%)
transfer/pacing-false/same-seed📈 view plot
🚷 view threshold
36,650,000.00 ns
(+1.92%)Baseline: 35,961,000.00 ns
39,418,403.09 ns
(92.98%)
transfer/pacing-false/varying-seeds📈 view plot
🚷 view threshold
37,293,000.00 ns
(+2.89%)Baseline: 36,245,500.00 ns
40,338,863.04 ns
(92.45%)
transfer/pacing-true/same-seed📈 view plot
🚷 view threshold
38,817,000.00 ns
(+3.64%)Baseline: 37,452,500.00 ns
42,197,319.94 ns
(91.99%)
transfer/pacing-true/varying-seeds📈 view plot
🚷 view threshold
38,031,000.00 ns
(+3.16%)Baseline: 36,865,250.00 ns
41,255,039.36 ns
(92.19%)
🐰 View full continuous benchmarking report in Bencher

github-actions[bot] avatar Jun 27 '25 14:06 github-actions[bot]

🐰 Bencher Report

Branchfix-features
Testbedt-linux64-ms-279
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
s2n vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
170.83 ms
(-28.03%)Baseline: 237.36 ms
538.39 ms
(31.73%)
🐰 View full continuous benchmarking report in Bencher

github-actions[bot] avatar Jun 27 '25 14:06 github-actions[bot]

🐰 Bencher Report

Branchfix-features
Testbedt-linux64-ms-278
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
nanoseconds (ns)
(Result Δ%)
Upper Boundary
nanoseconds (ns)
(Limit %)
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client📈 view plot
🚷 view threshold
644,780,000.00 ns
(-22.62%)Baseline: 833,280,000.00 ns
1,135,572,397.07 ns
(56.78%)
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client📈 view plot
🚷 view threshold
655,620,000.00 ns
(+0.28%)Baseline: 653,791,666.67 ns
675,797,849.36 ns
(97.01%)
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client📈 view plot
🚷 view threshold
27,119,000.00 ns
(-0.06%)Baseline: 27,134,166.67 ns
27,330,233.80 ns
(99.23%)
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client📈 view plot
🚷 view threshold
298,380,000.00 ns
(-0.07%)Baseline: 298,586,666.67 ns
301,752,185.80 ns
(98.88%)
1000 streams of 1 bytes/multistream📈 view plot
🚷 view threshold
36.50 ns
(+13.87%)Baseline: 32.05 ns
44.97 ns
(81.16%)
1000 streams of 1000 bytes/multistream📈 view plot
🚷 view threshold
48.14 ns
(+40.65%)Baseline: 34.23 ns
57.58 ns
(83.60%)
RxStreamOrderer::inbound_frame()📈 view plot
🚷 view threshold
108,040,000.00 ns
(+0.44%)Baseline: 107,566,666.67 ns
108,789,772.31 ns
(99.31%)
coalesce_acked_from_zero 1+1 entries📈 view plot
🚷 view threshold
88.51 ns
(-0.42%)Baseline: 88.88 ns
90.79 ns
(97.49%)
coalesce_acked_from_zero 10+1 entries📈 view plot
🚷 view threshold
105.27 ns
(-0.52%)Baseline: 105.82 ns
107.01 ns
(98.37%)
coalesce_acked_from_zero 1000+1 entries📈 view plot
🚷 view threshold
90.32 ns
(+1.01%)Baseline: 89.42 ns
91.19 ns
(99.05%)
coalesce_acked_from_zero 3+1 entries📈 view plot
🚷 view threshold
105.76 ns
(-0.53%)Baseline: 106.32 ns
107.76 ns
(98.14%)
decode 1048576 bytes, mask 3f📈 view plot
🚷 view threshold
1,784,300.00 ns
(+9.65%)Baseline: 1,627,216.67 ns
1,863,844.66 ns
(95.73%)
decode 1048576 bytes, mask 7f📈 view plot
🚷 view threshold
5,098,800.00 ns
(+0.77%)Baseline: 5,059,716.67 ns
5,121,583.33 ns
(99.56%)
decode 1048576 bytes, mask ff📈 view plot
🚷 view threshold
3,073,400.00 ns
(+1.09%)Baseline: 3,040,133.33 ns
3,090,833.22 ns
(99.44%)
decode 4096 bytes, mask 3f📈 view plot
🚷 view threshold
5,558.10 ns
(-29.14%)Baseline: 7,844.00 ns
11,284.48 ns
(49.25%)
decode 4096 bytes, mask 7f📈 view plot
🚷 view threshold
19,372.00 ns
(-2.70%)Baseline: 19,909.00 ns
20,724.64 ns
(93.47%)
decode 4096 bytes, mask ff📈 view plot
🚷 view threshold
11,642.00 ns
(-1.47%)Baseline: 11,816.00 ns
12,085.52 ns
(96.33%)
sent::Packets::take_ranges📈 view plot
🚷 view threshold
8,293.30 ns
(+1.08%)Baseline: 8,204.87 ns
8,385.40 ns
(98.90%)
transfer/pacing-false/same-seed📈 view plot
🚷 view threshold
35,240,000.00 ns
(+1.40%)Baseline: 34,753,000.00 ns
35,696,133.31 ns
(98.72%)
transfer/pacing-false/varying-seeds📈 view plot
🚷 view threshold
35,181,000.00 ns
(+1.13%)Baseline: 34,789,000.00 ns
35,833,247.53 ns
(98.18%)
transfer/pacing-true/same-seed📈 view plot
🚷 view threshold
36,688,000.00 ns
(+1.16%)Baseline: 36,266,166.67 ns
37,342,750.44 ns
(98.25%)
transfer/pacing-true/varying-seeds📈 view plot
🚷 view threshold
36,264,000.00 ns
(+1.93%)Baseline: 35,575,833.33 ns
36,866,018.78 ns
(98.37%)
🐰 View full continuous benchmarking report in Bencher

github-actions[bot] avatar Jun 30 '25 14:06 github-actions[bot]

🐰 Bencher Report

Branchfix-features
Testbedt-linux64-ms-278
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
s2n vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
300.26 ms
(-1.12%)Baseline: 303.67 ms
315.23 ms
(95.25%)
🐰 View full continuous benchmarking report in Bencher

github-actions[bot] avatar Jun 30 '25 14:06 github-actions[bot]

Benchmark results

Performance differences relative to 5387454abc5da5b29e36dbc1ead47c69adfa51a8.

1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: :green_heart: Performance has improved.
       time:   [199.06 ms 199.35 ms 199.65 ms]
       thrpt:  [500.87 MiB/s 501.62 MiB/s 502.36 MiB/s]
change:
       time:   [−2.2498% −1.8915% −1.5688%] (p = 0.00 +1.9280% +2.3015%]

Found 1 outliers among 100 measurements (1.00%) 1 (1.00%) high mild

1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: No change in performance detected.
       time:   [300.97 ms 302.53 ms 304.09 ms]
       thrpt:  [32.885 Kelem/s 33.054 Kelem/s 33.226 Kelem/s]
change:
       time:   [−1.1631% −0.4865% +0.1677%] (p = 0.17 > 0.05)
       thrpt:  [−0.1674% +0.4889% +1.1768%]

Found 2 outliers among 100 measurements (2.00%) 1 (1.00%) low mild 1 (1.00%) high mild

1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
       time:   [27.466 ms 27.552 ms 27.652 ms]
       thrpt:  [36.164   B/s 36.295   B/s 36.408   B/s]
change:
       time:   [−0.7318% −0.1418% +0.3798%] (p = 0.63 > 0.05)
       thrpt:  [−0.3784% +0.1420% +0.7372%]

Found 1 outliers among 100 measurements (1.00%) 1 (1.00%) high severe

1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: :green_heart: Performance has improved.
       time:   [632.99 ms 636.81 ms 640.61 ms]
       thrpt:  [156.10 MiB/s 157.03 MiB/s 157.98 MiB/s]
change:
       time:   [−3.5012% −2.5727% −1.5710%] (p = 0.00 +2.6406% +3.6282%]

Found 4 outliers among 100 measurements (4.00%) 1 (1.00%) low severe 2 (2.00%) low mild 1 (1.00%) high severe

decode 4096 bytes, mask ff: :green_heart: Performance has improved.
       time:   [11.617 µs 11.651 µs 11.693 µs]
       change: [−1.8753% −1.5051% −1.1287%] (p = 0.00 Found 14 outliers among 100 measurements (14.00%)
3 (3.00%) low severe
2 (2.00%) low mild
9 (9.00%) high severe
decode 1048576 bytes, mask ff: Change within noise threshold.
       time:   [3.0609 ms 3.0704 ms 3.0816 ms]
       change: [+0.8765% +1.3615% +1.8152%] (p = 0.00 Found 11 outliers among 100 measurements (11.00%)
2 (2.00%) high mild
9 (9.00%) high severe
decode 4096 bytes, mask 7f: :green_heart: Performance has improved.
       time:   [19.380 µs 19.433 µs 19.490 µs]
       change: [−3.0589% −2.6482% −2.2598%] (p = 0.00 Found 20 outliers among 100 measurements (20.00%)
1 (1.00%) low severe
3 (3.00%) low mild
1 (1.00%) high mild
15 (15.00%) high severe
decode 1048576 bytes, mask 7f: Change within noise threshold.
       time:   [5.0899 ms 5.1123 ms 5.1425 ms]
       change: [+0.2416% +0.9940% +1.8198%] (p = 0.01 Found 17 outliers among 100 measurements (17.00%)
1 (1.00%) high mild
16 (16.00%) high severe
decode 4096 bytes, mask 3f: :green_heart: Performance has improved.
       time:   [5.5223 µs 5.5392 µs 5.5632 µs]
       change: [−33.607% −33.133% −32.618%] (p = 0.00 Found 14 outliers among 100 measurements (14.00%)
2 (2.00%) low mild
1 (1.00%) high mild
11 (11.00%) high severe
decode 1048576 bytes, mask 3f: :broken_heart: Performance has regressed.
       time:   [1.7577 ms 1.7579 ms 1.7580 ms]
       change: [+9.9304% +10.412% +10.805%] (p = 0.00 Found 6 outliers among 100 measurements (6.00%)
2 (2.00%) low mild
3 (3.00%) high mild
1 (1.00%) high severe
1000 streams of 1 bytes/multistream: :broken_heart: Performance has regressed.
       time:   [46.961 ns 47.141 ns 47.319 ns]
       change: [+25.604% +27.038% +28.507%] (p = 0.00 Found 3 outliers among 500 measurements (0.60%)
3 (0.60%) low mild
1000 streams of 1000 bytes/multistream: :broken_heart: Performance has regressed.
       time:   [46.879 ns 47.087 ns 47.298 ns]
       change: [+31.174% +32.753% +34.387%] (p = 0.00 Found 1 outliers among 500 measurements (0.20%)
1 (0.20%) high severe
coalesce_acked_from_zero 1+1 entries: No change in performance detected.
       time:   [88.056 ns 88.395 ns 88.731 ns]
       change: [−0.7580% −0.1239% +0.6309%] (p = 0.74 > 0.05)

Found 16 outliers among 100 measurements (16.00%) 12 (12.00%) high mild 4 (4.00%) high severe

coalesce_acked_from_zero 3+1 entries: Change within noise threshold.
       time:   [105.52 ns 105.89 ns 106.27 ns]
       change: [−1.1268% −0.6448% −0.1497%] (p = 0.01 Found 14 outliers among 100 measurements (14.00%)
14 (14.00%) high severe
coalesce_acked_from_zero 10+1 entries: No change in performance detected.
       time:   [104.94 ns 105.35 ns 105.87 ns]
       change: [−0.6239% +0.1725% +1.2132%] (p = 0.77 > 0.05)

Found 18 outliers among 100 measurements (18.00%) 2 (2.00%) low severe 3 (3.00%) low mild 3 (3.00%) high mild 10 (10.00%) high severe

coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
       time:   [88.740 ns 88.837 ns 88.954 ns]
       change: [−1.4282% −0.4340% +0.6132%] (p = 0.43 > 0.05)

Found 14 outliers among 100 measurements (14.00%) 6 (6.00%) high mild 8 (8.00%) high severe

RxStreamOrderer::inbound_frame(): No change in performance detected.
       time:   [107.94 ms 108.07 ms 108.22 ms]
       change: [−0.4014% −0.1339% +0.0813%] (p = 0.32 > 0.05)

Found 3 outliers among 100 measurements (3.00%) 3 (3.00%) high severe

sent::Packets::take_ranges: No change in performance detected.
       time:   [8.0711 µs 8.2591 µs 8.4299 µs]
       change: [−1.8308% +4.6497% +16.282%] (p = 0.39 > 0.05)

Found 18 outliers among 100 measurements (18.00%) 5 (5.00%) low severe 9 (9.00%) low mild 2 (2.00%) high mild 2 (2.00%) high severe

transfer/pacing-false/varying-seeds: Change within noise threshold.
       time:   [36.908 ms 37.009 ms 37.125 ms]
       change: [+0.5332% +0.9068% +1.2643%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
transfer/pacing-true/varying-seeds: Change within noise threshold.
       time:   [37.866 ms 37.985 ms 38.106 ms]
       change: [+1.2718% +1.7401% +2.1818%] (p = 0.00 
transfer/pacing-false/same-seed: Change within noise threshold.
       time:   [36.809 ms 36.895 ms 36.995 ms]
       change: [+1.4011% +1.7223% +2.0394%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
transfer/pacing-true/same-seed: Change within noise threshold.
       time:   [38.809 ms 38.888 ms 38.970 ms]
       change: [+1.9028% +2.2730% +2.6189%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild

Download data for profiler.firefox.com or download performance comparison data.

github-actions[bot] avatar Jul 01 '25 16:07 github-actions[bot]

Client/server transfer results

Performance differences relative to 5387454abc5da5b29e36dbc1ead47c69adfa51a8.

Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.

Client vs. server (params) Mean ± σ Min Max MiB/s ± σ Δ main Δ main
google vs. google 459.2 ± 4.1 452.6 468.4 69.7 ± 7.8
google vs. neqo (cubic, paced) 271.6 ± 4.2 264.3 287.6 117.8 ± 7.6 :green_heart: -1.9 -0.7%
msquic vs. msquic 131.2 ± 19.9 110.8 243.9 244.0 ± 1.6
msquic vs. neqo (cubic, paced) 149.6 ± 37.0 125.3 393.5 213.8 ± 0.9 4.7 3.2%
neqo vs. google (cubic, paced) 762.1 ± 5.2 754.6 778.0 42.0 ± 6.2 -1.4 -0.2%
neqo vs. msquic (cubic, paced) 156.4 ± 4.9 148.7 181.4 204.6 ± 6.5 0.4 0.2%
neqo vs. neqo (cubic) 90.5 ± 4.7 81.4 100.0 353.7 ± 6.8 :green_heart: -3.0 -3.2%
neqo vs. neqo (cubic, paced) 91.3 ± 4.0 82.4 98.9 350.4 ± 8.0 :green_heart: -1.4 -1.5%
neqo vs. neqo (reno) 90.0 ± 5.0 82.7 115.1 355.6 ± 6.4 -1.1 -1.2%
neqo vs. neqo (reno, paced) 91.3 ± 5.1 83.5 112.4 350.4 ± 6.3 -0.5 -0.5%
neqo vs. quiche (cubic, paced) 193.6 ± 4.8 185.9 206.5 165.3 ± 6.7 :green_heart: -1.8 -0.9%
neqo vs. s2n (cubic, paced) 219.7 ± 4.7 211.4 236.4 145.7 ± 6.8 0.3 0.1%
quiche vs. neqo (cubic, paced) 160.4 ± 6.4 148.4 194.6 199.5 ± 5.0 :broken_heart: 1.8 1.1%
quiche vs. quiche 149.2 ± 5.2 141.2 163.6 214.5 ± 6.2
s2n vs. neqo (cubic, paced) 170.6 ± 5.5 161.4 198.9 187.6 ± 5.8 -1.0 -0.6%
s2n vs. s2n 245.8 ± 22.4 230.0 346.3 130.2 ± 1.4

Download data for profiler.firefox.com or download performance comparison data.

github-actions[bot] avatar Jul 01 '25 16:07 github-actions[bot]

I think there is some weak signal that there is some performance benefit here.

larseggert avatar Jul 03 '25 15:07 larseggert

Client/server transfer results

Performance differences relative to 8c6524015e07834a72d566804041544d746e93ef.

Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.

Client vs. server (params) Mean ± σ Min Max MiB/s ± σ Δ main Δ main
google vs. google 459.1 ± 4.5 452.3 476.2 69.7 ± 7.1
google vs. neqo (cubic, paced) 271.0 ± 4.4 263.3 287.4 118.1 ± 7.3 -1.2 -0.4%
msquic vs. msquic 128.6 ± 15.7 109.8 214.1 248.9 ± 2.0
msquic vs. neqo (cubic, paced) 156.3 ± 44.1 123.2 429.5 204.8 ± 0.7 :broken_heart: 10.8 7.5%
neqo vs. google (cubic, paced) 761.9 ± 4.1 753.3 773.2 42.0 ± 7.8 -0.0 -0.0%
neqo vs. msquic (cubic, paced) 156.1 ± 4.8 149.6 170.7 204.9 ± 6.7 -0.4 -0.3%
neqo vs. neqo (cubic) 94.0 ± 5.4 85.1 112.5 340.4 ± 5.9 :broken_heart: 3.2 3.6%
neqo vs. neqo (cubic, paced) 93.7 ± 5.4 84.7 122.7 341.5 ± 5.9 :broken_heart: 3.7 4.1%
neqo vs. neqo (reno) 92.1 ± 4.5 84.2 105.2 347.3 ± 7.1 1.3 1.4%
neqo vs. neqo (reno, paced) 93.4 ± 5.0 86.0 114.1 342.7 ± 6.4 :broken_heart: 2.7 3.0%
neqo vs. quiche (cubic, paced) 195.2 ± 4.4 186.1 203.1 164.0 ± 7.3 0.5 0.3%
neqo vs. s2n (cubic, paced) 219.1 ± 4.6 210.6 227.6 146.0 ± 7.0 :broken_heart: 2.1 1.0%
quiche vs. neqo (cubic, paced) 156.2 ± 5.5 145.5 172.4 204.9 ± 5.8 :green_heart: -4.9 -3.0%
quiche vs. quiche 149.2 ± 4.9 141.4 161.4 214.5 ± 6.5
s2n vs. neqo (cubic, paced) 170.0 ± 4.7 160.7 179.3 188.2 ± 6.8 -1.3 -0.8%
s2n vs. s2n 243.6 ± 20.4 230.0 344.3 131.3 ± 1.6

Download data for profiler.firefox.com or download performance comparison data.

github-actions[bot] avatar Jul 04 '25 06:07 github-actions[bot]

Benchmark results

Performance differences relative to 8c6524015e07834a72d566804041544d746e93ef.

1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: :green_heart: Performance has improved.
       time:   [198.46 ms 198.74 ms 199.03 ms]
       thrpt:  [502.44 MiB/s 503.17 MiB/s 503.89 MiB/s]
change:
       time:   [−2.6756% −2.3995% −2.1512%] (p = 0.00 +2.4585% +2.7492%]

Found 3 outliers among 100 measurements (3.00%) 3 (3.00%) high mild

1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: Change within noise threshold.
       time:   [304.21 ms 305.72 ms 307.25 ms]
       thrpt:  [32.547 Kelem/s 32.710 Kelem/s 32.872 Kelem/s]
change:
       time:   [+0.3397% +0.9623% +1.6602%] (p = 0.01 −0.9531% −0.3385%]

Found 1 outliers among 100 measurements (1.00%) 1 (1.00%) high mild

1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
       time:   [28.283 ms 28.430 ms 28.594 ms]
       thrpt:  [34.972   B/s 35.174   B/s 35.357   B/s]
change:
       time:   [−0.5965% +0.2030% +0.9583%] (p = 0.61 > 0.05)
       thrpt:  [−0.9492% −0.2026% +0.6001%]

Found 8 outliers among 100 measurements (8.00%) 1 (1.00%) low mild 1 (1.00%) high mild 6 (6.00%) high severe

1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: No change in performance detected.
       time:   [205.54 ms 205.80 ms 206.09 ms]
       thrpt:  [485.22 MiB/s 485.91 MiB/s 486.51 MiB/s]
change:
       time:   [−0.3494% −0.1263% +0.1039%] (p = 0.28 > 0.05)
       thrpt:  [−0.1038% +0.1265% +0.3506%]

Found 3 outliers among 100 measurements (3.00%) 2 (2.00%) high mild 1 (1.00%) high severe

decode 4096 bytes, mask ff: :green_heart: Performance has improved.
       time:   [11.626 µs 11.669 µs 11.718 µs]
       change: [−1.9917% −1.6344% −1.2619%] (p = 0.00 Found 19 outliers among 100 measurements (19.00%)
2 (2.00%) low severe
5 (5.00%) low mild
2 (2.00%) high mild
10 (10.00%) high severe
decode 1048576 bytes, mask ff: :broken_heart: Performance has regressed.
       time:   [3.0641 ms 3.0735 ms 3.0847 ms]
       change: [+1.4047% +1.8195% +2.2402%] (p = 0.00 Found 12 outliers among 100 measurements (12.00%)
3 (3.00%) low mild
9 (9.00%) high severe
decode 4096 bytes, mask 7f: :green_heart: Performance has improved.
       time:   [19.398 µs 19.459 µs 19.525 µs]
       change: [−3.8802% −3.3747% −2.9285%] (p = 0.00 Found 21 outliers among 100 measurements (21.00%)
1 (1.00%) low mild
2 (2.00%) high mild
18 (18.00%) high severe
decode 1048576 bytes, mask 7f: Change within noise threshold.
       time:   [5.0873 ms 5.1008 ms 5.1160 ms]
       change: [+0.5145% +0.8992% +1.3186%] (p = 0.00 Found 16 outliers among 100 measurements (16.00%)
16 (16.00%) high severe
decode 4096 bytes, mask 3f: :green_heart: Performance has improved.
       time:   [5.5178 µs 5.5265 µs 5.5407 µs]
       change: [−34.130% −33.517% −32.988%] (p = 0.00 Found 9 outliers among 100 measurements (9.00%)
3 (3.00%) low mild
2 (2.00%) high mild
4 (4.00%) high severe
decode 1048576 bytes, mask 3f: :broken_heart: Performance has regressed.
       time:   [1.7576 ms 1.7591 ms 1.7620 ms]
       change: [+9.4831% +10.283% +10.884%] (p = 0.00 Found 34 outliers among 100 measurements (34.00%)
15 (15.00%) low mild
13 (13.00%) high mild
6 (6.00%) high severe
coalesce_acked_from_zero 1+1 entries: No change in performance detected.
       time:   [88.150 ns 88.487 ns 88.819 ns]
       change: [−0.7240% −0.2824% +0.1390%] (p = 0.21 > 0.05)

Found 10 outliers among 100 measurements (10.00%) 9 (9.00%) high mild 1 (1.00%) high severe

coalesce_acked_from_zero 3+1 entries: No change in performance detected.
       time:   [106.18 ns 106.51 ns 106.87 ns]
       change: [−0.4131% +0.0631% +0.5189%] (p = 0.79 > 0.05)

Found 12 outliers among 100 measurements (12.00%) 1 (1.00%) high mild 11 (11.00%) high severe

coalesce_acked_from_zero 10+1 entries: No change in performance detected.
       time:   [105.52 ns 105.80 ns 106.15 ns]
       change: [−0.7972% −0.0134% +0.7314%] (p = 0.98 > 0.05)

Found 19 outliers among 100 measurements (19.00%) 1 (1.00%) low severe 9 (9.00%) low mild 2 (2.00%) high mild 7 (7.00%) high severe

coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
       time:   [89.198 ns 89.317 ns 89.451 ns]
       change: [−0.9001% −0.0427% +0.8482%] (p = 0.92 > 0.05)

Found 9 outliers among 100 measurements (9.00%) 3 (3.00%) high mild 6 (6.00%) high severe

RxStreamOrderer::inbound_frame(): No change in performance detected.
       time:   [107.83 ms 107.99 ms 108.27 ms]
       change: [−0.1654% +0.0070% +0.3070%] (p = 0.96 > 0.05)

Found 11 outliers among 100 measurements (11.00%) 10 (10.00%) low mild 1 (1.00%) high severe

sent::Packets::take_ranges: No change in performance detected.
       time:   [8.0356 µs 8.2360 µs 8.4204 µs]
       change: [−1.2309% +5.5439% +15.772%] (p = 0.27 > 0.05)

Found 19 outliers among 100 measurements (19.00%) 4 (4.00%) low severe 10 (10.00%) low mild 2 (2.00%) high mild 3 (3.00%) high severe

transfer/pacing-false/varying-seeds: Change within noise threshold.
       time:   [36.424 ms 36.507 ms 36.592 ms]
       change: [−2.5591% −2.2187% −1.9012%] (p = 0.00 Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
2 (2.00%) high mild
transfer/pacing-true/varying-seeds: Change within noise threshold.
       time:   [37.322 ms 37.437 ms 37.554 ms]
       change: [−1.8225% −1.4028% −0.9780%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
transfer/pacing-false/same-seed: Change within noise threshold.
       time:   [36.223 ms 36.283 ms 36.345 ms]
       change: [−2.0844% −1.8231% −1.5680%] (p = 0.00 
transfer/pacing-true/same-seed: Change within noise threshold.
       time:   [37.816 ms 37.895 ms 37.983 ms]
       change: [−1.8263% −1.5237% −1.2467%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe

Download data for profiler.firefox.com or download performance comparison data.

github-actions[bot] avatar Jul 04 '25 06:07 github-actions[bot]

I don't see enough performance benefits here.

larseggert avatar Aug 08 '25 11:08 larseggert