Skip to content

feat(transport/cubic): cubic region RFC9438 updates#2983

Merged
omansfeld merged 5 commits intomozilla:mainfrom
omansfeld:cubic_region_updates
Oct 14, 2025
Merged

feat(transport/cubic): cubic region RFC9438 updates#2983
omansfeld merged 5 commits intomozilla:mainfrom
omansfeld:cubic_region_updates

Conversation

@omansfeld
Copy link
Collaborator

@omansfeld omansfeld commented Sep 15, 2025

Split off of #2535.
Part of #2967.

EDIT 2025-10-13:

I rebased after parts of this have already landed (see above checklist). This PR now contains the last updates to the cubic region and should be ready for review.

In the old code we'd also apply the clamping to 1.5 * curr_cwnd to the reno region, since it was applied to the return value, not to the cubic region calculation result. Since this clamping is supposed to prevent exponential growth ("less than the increase rate of slow start" - RFC9438) it doesn't need to be applied to the reno region, which is growing additively per design.

@codecov
Copy link

codecov bot commented Sep 15, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.38%. Comparing base (b90ded6) to head (920de9a).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2983      +/-   ##
==========================================
- Coverage   93.41%   93.38%   -0.04%     
==========================================
  Files         124      124              
  Lines       35969    35970       +1     
  Branches    35969    35970       +1     
==========================================
- Hits        33602    33591      -11     
- Misses       1523     1535      +12     
  Partials      844      844              
Components Coverage Δ
neqo-common 97.50% <ø> (ø)
neqo-crypto 83.25% <ø> (-0.48%) ⬇️
neqo-http3 93.34% <ø> (ø)
neqo-qpack 94.18% <ø> (ø)
neqo-transport 94.46% <100.00%> (-0.02%) ⬇️
neqo-udp 79.32% <ø> (+0.48%) ⬆️
mtu 85.57% <ø> (-0.20%) ⬇️

@omansfeld omansfeld force-pushed the cubic_region_updates branch from fa05f07 to a2d3411 Compare October 13, 2025 11:32
Copilot AI review requested due to automatic review settings October 13, 2025 11:32
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR updates the CUBIC congestion control implementation with significant refinements to target calculation and documentation improvements. The changes enhance the algorithm's adherence to RFC 9438 specifications while removing obsolete constants.

  • Updated documentation and comments to reference RFC 9438 instead of RFC 8312
  • Implemented new target formula with clamping between cwnd and cwnd*1.5
  • Removed EXPONENTIAL_GROWTH_REDUCTION constant in favor of the new target clamping approach

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@omansfeld omansfeld force-pushed the cubic_region_updates branch from a2d3411 to 1d42561 Compare October 13, 2025 11:47
@omansfeld omansfeld changed the title cubic: cubic region updates feat(transport/cubic): cubic region RFC9438 updates Oct 13, 2025
@omansfeld omansfeld marked this pull request as ready for review October 13, 2025 12:08
Copilot AI review requested due to automatic review settings October 13, 2025 12:08
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 2 comments.


Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Copy link
Member

@mxinden mxinden left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well done! Thank you.

@mxinden
Copy link
Member

mxinden commented Oct 13, 2025

Once the latest congestion control changes landed in Nightly, we should closely monitor packet loss:

https://glam.telemetry.mozilla.org/firefox/probe/http3_loss_ratio/explore?activeBuckets=%5B%220%22%2C%221%22%2C%222%22%2C%224%22%2C%223%22%2C%225%22%5D&process=parent&timeHorizon=ALL&visiblePercentiles=%5B99.9%2C99%2C95%2C75%2C50%5D

@mxinden
Copy link
Member

mxinden commented Oct 13, 2025

In the old code we'd also apply the clamping to 1.5 * curr_cwnd to the reno region, since it was applied to the return value, not to the cubic region calculation result. Since this clamping is supposed to prevent exponential growth ("less than the increase rate of slow start" - RFC9438) it doesn't need to be applied to the reno region, which is growing additively per design.

Worth adding a debug_assert asserting that the Reno target never grows exponentially?

@github-actions
Copy link
Contributor

github-actions bot commented Oct 13, 2025

🐰 Bencher Report

Branchcubic_region_updates
TestbedOn-prem
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
205,030,000.00 ns
(-1.74%)Baseline: 208,655,425.53 ns
218,012,106.18 ns
(94.05%)
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client📈 view plot
🚷 view threshold
199,230,000.00 ns
(-1.69%)Baseline: 202,660,797.87 ns
212,889,465.14 ns
(93.58%)
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client📈 view plot
🚷 view threshold
28,498,000.00 ns
(+0.29%)Baseline: 28,415,441.49 ns
28,858,220.30 ns
(98.75%)
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client📈 view plot
🚷 view threshold
282,720,000.00 ns
(-3.92%)Baseline: 294,259,521.28 ns
306,283,616.21 ns
(92.31%)
1-streams/each-1000-bytes/simulated-time📈 view plot
🚷 view threshold
119,050,000.00 ns
(+0.58%)Baseline: 118,357,978.72 ns
120,888,615.11 ns
(98.48%)
1-streams/each-1000-bytes/wallclock-time📈 view plot
🚷 view threshold
591,170.00 ns
(-1.09%)Baseline: 597,663.46 ns
622,601.76 ns
(94.95%)
1000-streams/each-1-bytes/simulated-time📈 view plot
🚷 view threshold
14,996,000,000.00 ns
(+0.03%)Baseline: 14,992,058,510.64 ns
15,010,807,004.61 ns
(99.90%)
1000-streams/each-1-bytes/wallclock-time📈 view plot
🚷 view threshold
13,803,000.00 ns
(-2.76%)Baseline: 14,194,686.17 ns
14,973,867.89 ns
(92.18%)
1000-streams/each-1000-bytes/simulated-time📈 view plot
🚷 view threshold
19,061,000,000.00 ns
(+0.74%)Baseline: 18,921,611,702.13 ns
19,189,763,596.48 ns
(99.33%)
1000-streams/each-1000-bytes/wallclock-time📈 view plot
🚷 view threshold
48,754,000.00 ns
(-6.45%)Baseline: 52,117,143.62 ns
58,599,715.44 ns
(83.20%)
RxStreamOrderer::inbound_frame()📈 view plot
🚷 view threshold
107,120,000.00 ns
(-2.43%)Baseline: 109,791,595.74 ns
111,981,697.30 ns
(95.66%)
coalesce_acked_from_zero 1+1 entries📈 view plot
🚷 view threshold
88.66 ns
(+0.04%)Baseline: 88.62 ns
89.29 ns
(99.29%)
coalesce_acked_from_zero 10+1 entries📈 view plot
🚷 view threshold
105.63 ns
(-0.42%)Baseline: 106.08 ns
107.08 ns
(98.65%)
coalesce_acked_from_zero 1000+1 entries📈 view plot
🚷 view threshold
88.96 ns
(-0.95%)Baseline: 89.82 ns
94.42 ns
(94.21%)
coalesce_acked_from_zero 3+1 entries📈 view plot
🚷 view threshold
106.39 ns
(-0.19%)Baseline: 106.59 ns
107.55 ns
(98.92%)
decode 1048576 bytes, mask 3f📈 view plot
🚷 view threshold
1,590,600.00 ns
(-0.12%)Baseline: 1,592,520.21 ns
1,599,563.62 ns
(99.44%)
decode 1048576 bytes, mask 7f📈 view plot
🚷 view threshold
5,059,500.00 ns
(+0.04%)Baseline: 5,057,326.06 ns
5,076,842.39 ns
(99.66%)
decode 1048576 bytes, mask ff📈 view plot
🚷 view threshold
3,033,100.00 ns
(+0.05%)Baseline: 3,031,698.94 ns
3,043,449.39 ns
(99.66%)
decode 4096 bytes, mask 3f📈 view plot
🚷 view threshold
8,317.10 ns
(+0.25%)Baseline: 8,296.37 ns
8,343.26 ns
(99.69%)
decode 4096 bytes, mask 7f📈 view plot
🚷 view threshold
20,047.00 ns
(+0.19%)Baseline: 20,008.22 ns
20,087.14 ns
(99.80%)
decode 4096 bytes, mask ff📈 view plot
🚷 view threshold
11,656.00 ns
(-0.60%)Baseline: 11,726.27 ns
11,970.14 ns
(97.38%)
sent::Packets::take_ranges📈 view plot
🚷 view threshold
4,668.30 ns
(-1.67%)Baseline: 4,747.42 ns
4,986.14 ns
(93.63%)
transfer/pacing-false/same-seed/simulated-time/run📈 view plot
🚷 view threshold
25,710,000,000.00 ns
(+1.72%)Baseline: 25,275,000,000.00 ns
25,817,812,451.62 ns
(99.58%)
transfer/pacing-false/same-seed/wallclock-time/run📈 view plot
🚷 view threshold
26,156,000.00 ns
(+0.63%)Baseline: 25,993,139.78 ns
27,070,349.68 ns
(96.62%)
transfer/pacing-false/varying-seeds/simulated-time/run📈 view plot
🚷 view threshold
25,176,000,000.00 ns
(+0.03%)Baseline: 25,168,268,817.20 ns
25,215,941,018.90 ns
(99.84%)
transfer/pacing-false/varying-seeds/wallclock-time/run📈 view plot
🚷 view threshold
25,500,000.00 ns
(-2.66%)Baseline: 26,197,709.68 ns
27,647,732.39 ns
(92.23%)
transfer/pacing-true/same-seed/simulated-time/run📈 view plot
🚷 view threshold
25,675,000,000.00 ns
(+0.26%)Baseline: 25,607,177,419.35 ns
25,691,809,468.26 ns
(99.93%)
transfer/pacing-true/same-seed/wallclock-time/run📈 view plot
🚷 view threshold
27,187,000.00 ns
(-0.76%)Baseline: 27,395,930.11 ns
28,804,606.05 ns
(94.38%)
transfer/pacing-true/varying-seeds/simulated-time/run📈 view plot
🚷 view threshold
24,959,000,000.00 ns
(-0.14%)Baseline: 24,994,043,010.75 ns
25,044,262,140.71 ns
(99.66%)
transfer/pacing-true/varying-seeds/wallclock-time/run📈 view plot
🚷 view threshold
26,007,000.00 ns
(-2.68%)Baseline: 26,724,134.41 ns
28,219,820.17 ns
(92.16%)
🐰 View full continuous benchmarking report in Bencher

@omansfeld
Copy link
Collaborator Author

In the old code we'd also apply the clamping to 1.5 * curr_cwnd to the reno region, since it was applied to the return value, not to the cubic region calculation result. Since this clamping is supposed to prevent exponential growth ("less than the increase rate of slow start" - RFC9438) it doesn't need to be applied to the reno region, which is growing additively per design.

Worth adding a debug_assert asserting that the Reno target never grows exponentially?

I don't think it's necessary, as it really mathematically cannot happen (unless with unrealistically small cwnd values).

Just as an example, if we had a cwnd of 10 * mss (which is already really small) we would need to ack 50 * mss bytes to reach the curr_cwnd * 1.5 threshold. Which cannot really happen, because the congestion window is only 10 * mss. That is with the increased CUBIC_ALPHA = 1.0 which we currently don't even implement. And the magnitude of acked bytes needed for this gets bigger the bigger the cwnd is. Should be something like curr_cwnd^2 / 2 acked bytes needed to reach the threshold.

That said, I'm not opposed to putting in a debug_assert there. You said "worth it" implying there is some downside to having it?

@mxinden
Copy link
Member

mxinden commented Oct 13, 2025

That said, I'm not opposed to putting in a debug_assert there. You said "worth it" implying there is some downside to having it?

Just one more line of code. No other downside.

@omansfeld omansfeld force-pushed the cubic_region_updates branch from 35d6048 to bcd1bb5 Compare October 13, 2025 15:41
Copilot AI review requested due to automatic review settings October 13, 2025 16:14
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@github-actions
Copy link
Contributor

github-actions bot commented Oct 13, 2025

🐰 Bencher Report

Branchcubic_region_updates
TestbedOn-prem

🚨 1 Alert

IterationBenchmarkMeasure
Units
ViewBenchmark Result
(Result Δ%)
Upper Boundary
(Limit %)
9neqo vs. s2n (cubic, paced)Latency
milliseconds (ms)
📈 plot
🚷 threshold
🚨 alert (🔔)
226.24 ms
(+2.44%)Baseline: 220.85 ms
223.80 ms
(101.09%)

Click to view all benchmark results
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
google vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
275.35 ms
(-0.84%)Baseline: 277.68 ms
280.33 ms
(98.23%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
msquic vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
196.83 ms
(+1.33%)Baseline: 194.24 ms
227.67 ms
(86.45%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. google (cubic, paced)📈 view plot
🚷 view threshold
757.64 ms
(+0.00%)Baseline: 757.63 ms
764.85 ms
(99.06%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. msquic (cubic, paced)📈 view plot
🚷 view threshold
159.64 ms
(+1.50%)Baseline: 157.27 ms
159.70 ms
(99.96%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. neqo (cubic)📈 view plot
🚷 view threshold
89.32 ms
(-1.44%)Baseline: 90.63 ms
94.43 ms
(94.59%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
90.10 ms
(-1.90%)Baseline: 91.84 ms
95.56 ms
(94.29%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. neqo (reno)📈 view plot
🚷 view threshold
89.47 ms
(-1.23%)Baseline: 90.59 ms
93.95 ms
(95.24%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. neqo (reno, paced)📈 view plot
🚷 view threshold
93.08 ms
(+1.37%)Baseline: 91.82 ms
95.42 ms
(97.54%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. quiche (cubic, paced)📈 view plot
🚷 view threshold
193.10 ms
(-0.35%)Baseline: 193.77 ms
197.23 ms
(97.91%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. s2n (cubic, paced)📈 view plot
🚷 view threshold
🚨 view alert (🔔)
226.24 ms
(+2.44%)Baseline: 220.85 ms
223.80 ms
(101.09%)

BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
quiche vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
155.72 ms
(+2.05%)Baseline: 152.59 ms
158.25 ms
(98.41%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
s2n vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
175.94 ms
(+1.15%)Baseline: 173.94 ms
178.08 ms
(98.80%)
🐰 View full continuous benchmarking report in Bencher

Copilot AI review requested due to automatic review settings October 14, 2025 15:26
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comments suppressed due to low confidence (1)

neqo-transport/src/cc/cubic.rs:1

  • The phrase should be 'no more than' instead of 'less than' to accurately reflect the RFC constraint that CUBIC's increase rate should not exceed slow start's rate.
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

- comments and docs
- new `target` formula clamping to min and max value
  (`cwnd<=target<=cwnd*1.5`)
- removing `EXPONENTIAL_GROWTH_REDUCTION` since it's use is now covered
  by the max value mentioned above
- linux reference links
- renaming variables
- `debug_assert!` to check exponential growth of `w_est`
- comments
- moved debug assert
- add predicate for small cwnd values
- move assert and change the message
@omansfeld omansfeld force-pushed the cubic_region_updates branch from 28ffece to 920de9a Compare October 14, 2025 15:27
Copy link
Member

@mxinden mxinden left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For others, debug_assert removed after out-of-band discussion. RFC does not require the limit on the Reno region. Assumption is, that it is fine to follow the RFC only.

@omansfeld omansfeld enabled auto-merge October 14, 2025 15:47
@omansfeld omansfeld added this pull request to the merge queue Oct 14, 2025
@github-actions
Copy link
Contributor

Failed Interop Tests

QUIC Interop Runner, client vs. server, differences relative to 791fd40.

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
Copy link
Contributor

Client/server transfer results

Performance differences relative to b90ded6.

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 ± 5.2 448.6 466.5 70.0 ± 6.2
google vs. neqo (cubic, paced) 275.4 ± 4.5 266.5 283.8 116.2 ± 7.1 -0.2 -0.1%
msquic vs. msquic 177.6 ± 45.5 137.6 354.4 180.2 ± 0.7
msquic vs. neqo (cubic, paced) 196.8 ± 47.0 141.5 406.6 162.6 ± 0.7 -2.5 -1.3%
neqo vs. google (cubic, paced) 757.6 ± 4.5 749.3 773.6 42.2 ± 7.1 💔 2.3 0.3%
neqo vs. msquic (cubic, paced) 159.6 ± 8.4 149.4 186.4 200.5 ± 3.8 1.3 0.8%
neqo vs. neqo (cubic) 89.3 ± 4.7 79.7 106.0 358.3 ± 6.8 -0.5 -0.5%
neqo vs. neqo (cubic, paced) 90.1 ± 5.2 81.7 106.7 355.2 ± 6.2 💔 1.5 1.7%
neqo vs. neqo (reno) 89.5 ± 4.5 78.9 104.7 357.6 ± 7.1 -0.8 -0.9%
neqo vs. neqo (reno, paced) 93.1 ± 5.0 82.4 108.4 343.8 ± 6.4 1.4 1.5%
neqo vs. quiche (cubic, paced) 193.1 ± 4.6 186.4 200.8 165.7 ± 7.0 💔 1.4 0.8%
neqo vs. s2n (cubic, paced) 226.2 ± 4.5 215.2 237.4 141.4 ± 7.1 💔 6.0 2.7%
quiche vs. neqo (cubic, paced) 155.7 ± 4.6 146.4 166.9 205.5 ± 7.0 💔 1.8 1.1%
quiche vs. quiche 145.6 ± 5.1 137.8 161.6 219.7 ± 6.3
s2n vs. neqo (cubic, paced) 175.9 ± 4.9 166.1 187.2 181.9 ± 6.5 0.0 0.0%
s2n vs. s2n 254.1 ± 30.9 230.8 353.2 125.9 ± 1.0

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

Merged via the queue into mozilla:main with commit 7334a18 Oct 14, 2025
94 checks passed
@omansfeld omansfeld deleted the cubic_region_updates branch October 14, 2025 16:05
@github-actions
Copy link
Contributor

Benchmark results

Performance differences relative to b90ded6.

1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: Change within noise threshold.
       time:   [198.86 ms 199.23 ms 199.67 ms]
       thrpt:  [500.83 MiB/s 501.94 MiB/s 502.88 MiB/s]
change:
       time:   [−0.5566% −0.2927% −0.0386%] (p = 0.03 < 0.05)
       thrpt:  [+0.0387% +0.2936% +0.5597%]

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

1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: Change within noise threshold.
       time:   [280.98 ms 282.72 ms 284.52 ms]
       thrpt:  [35.147 Kelem/s 35.370 Kelem/s 35.590 Kelem/s]
change:
       time:   [−2.5094% −1.6343% −0.6886%] (p = 0.00 < 0.05)
       thrpt:  [+0.6934% +1.6614% +2.5740%]

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.445 ms 28.498 ms 28.571 ms]
       thrpt:  [35.000   B/s 35.090   B/s 35.155   B/s]
change:
       time:   [−0.3734% −0.0046% +0.3304%] (p = 0.98 > 0.05)
       thrpt:  [−0.3293% +0.0046% +0.3748%]

Found 14 outliers among 100 measurements (14.00%)
3 (3.00%) low severe
1 (1.00%) high mild
10 (10.00%) high severe

1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: Change within noise threshold.
       time:   [204.78 ms 205.03 ms 205.28 ms]
       thrpt:  [487.14 MiB/s 487.73 MiB/s 488.34 MiB/s]
change:
       time:   [+0.6909% +0.8881% +1.0673%] (p = 0.00 < 0.05)
       thrpt:  [−1.0560% −0.8803% −0.6862%]

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

decode 4096 bytes, mask ff: No change in performance detected.
       time:   [11.605 µs 11.656 µs 11.721 µs]
       change: [−0.0692% +0.4745% +1.1337%] (p = 0.14 > 0.05)

Found 16 outliers among 100 measurements (16.00%)
2 (2.00%) low severe
2 (2.00%) low mild
12 (12.00%) high severe

decode 1048576 bytes, mask ff: No change in performance detected.
       time:   [3.0212 ms 3.0331 ms 3.0475 ms]
       change: [−0.4890% +0.0817% +0.6473%] (p = 0.79 > 0.05)

Found 11 outliers among 100 measurements (11.00%)
2 (2.00%) low mild
1 (1.00%) high mild
8 (8.00%) high severe

decode 4096 bytes, mask 7f: No change in performance detected.
       time:   [19.984 µs 20.047 µs 20.112 µs]
       change: [−0.1467% +0.3306% +0.8997%] (p = 0.24 > 0.05)

Found 24 outliers among 100 measurements (24.00%)
2 (2.00%) low severe
3 (3.00%) low mild
1 (1.00%) high mild
18 (18.00%) high severe

decode 1048576 bytes, mask 7f: No change in performance detected.
       time:   [5.0479 ms 5.0595 ms 5.0728 ms]
       change: [−0.2863% +0.0679% +0.4199%] (p = 0.70 > 0.05)

Found 14 outliers among 100 measurements (14.00%)
14 (14.00%) high severe

decode 4096 bytes, mask 3f: No change in performance detected.
       time:   [8.2820 µs 8.3171 µs 8.3584 µs]
       change: [−3.3451% −0.7110% +1.0209%] (p = 0.66 > 0.05)

Found 16 outliers among 100 measurements (16.00%)
4 (4.00%) low mild
1 (1.00%) high mild
11 (11.00%) high severe

decode 1048576 bytes, mask 3f: No change in performance detected.
       time:   [1.5854 ms 1.5906 ms 1.5969 ms]
       change: [−0.4174% +0.0858% +0.5841%] (p = 0.74 > 0.05)

Found 8 outliers among 100 measurements (8.00%)
3 (3.00%) high mild
5 (5.00%) high severe

1-streams/each-1000-bytes/wallclock-time: No change in performance detected.
       time:   [589.03 µs 591.17 µs 593.62 µs]
       change: [−1.1062% −0.2596% +0.4791%] (p = 0.54 > 0.05)

Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) high mild
7 (7.00%) high severe
1-streams/each-1000-bytes/simulated-time
time: [118.82 ms 119.05 ms 119.29 ms]
thrpt: [8.1862 KiB/s 8.2027 KiB/s 8.2190 KiB/s]
change:
time: [−0.1071% +0.1614% +0.4457%] (p = 0.26 > 0.05)
thrpt: [−0.4438% −0.1611% +0.1072%]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild

1000-streams/each-1-bytes/wallclock-time: Change within noise threshold.
       time:   [13.779 ms 13.803 ms 13.827 ms]
       change: [−1.4949% −0.8003% −0.2708%] (p = 0.01 < 0.05)

Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
1000-streams/each-1-bytes/simulated-time
time: [14.981 s 14.996 s 15.011 s]
thrpt: [66.619 B/s 66.684 B/s 66.750 B/s]
change:
time: [−0.1933% −0.0598% +0.0488%] (p = 0.35 > 0.05)
thrpt: [−0.0488% +0.0598% +0.1937%]
No change in performance detected.

1000-streams/each-1000-bytes/wallclock-time: Change within noise threshold.
       time:   [48.591 ms 48.754 ms 48.923 ms]
       change: [−1.2857% −0.7961% −0.3212%] (p = 0.00 < 0.05)

Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild
1000-streams/each-1000-bytes/simulated-time
time: [18.883 s 19.061 s 19.238 s]
thrpt: [50.763 KiB/s 51.233 KiB/s 51.716 KiB/s]
change:
time: [−1.4684% −0.2121% +0.9641%] (p = 0.74 > 0.05)
thrpt: [−0.9549% +0.2125% +1.4903%]
No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) low mild

coalesce_acked_from_zero 1+1 entries: No change in performance detected.
       time:   [88.300 ns 88.657 ns 88.998 ns]
       change: [−0.7076% −0.0900% +0.4401%] (p = 0.76 > 0.05)

Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high mild

coalesce_acked_from_zero 3+1 entries: No change in performance detected.
       time:   [106.04 ns 106.39 ns 106.76 ns]
       change: [−3.3446% −0.7650% +0.8209%] (p = 0.68 > 0.05)

Found 11 outliers among 100 measurements (11.00%)
11 (11.00%) high severe

coalesce_acked_from_zero 10+1 entries: No change in performance detected.
       time:   [105.29 ns 105.63 ns 106.07 ns]
       change: [−0.3605% +0.2551% +0.8561%] (p = 0.45 > 0.05)

Found 8 outliers among 100 measurements (8.00%)
8 (8.00%) high severe

coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
       time:   [88.850 ns 88.961 ns 89.097 ns]
       change: [−1.1690% −0.2602% +0.6253%] (p = 0.58 > 0.05)

Found 13 outliers among 100 measurements (13.00%)
6 (6.00%) high mild
7 (7.00%) high severe

RxStreamOrderer::inbound_frame(): 💚 Performance has improved.
       time:   [107.05 ms 107.12 ms 107.19 ms]
       change: [−1.3466% −1.2436% −1.1448%] (p = 0.00 < 0.05)

Found 30 outliers among 100 measurements (30.00%)
12 (12.00%) low severe
2 (2.00%) low mild
5 (5.00%) high mild
11 (11.00%) high severe

sent::Packets::take_ranges: No change in performance detected.
       time:   [4.5999 µs 4.6683 µs 4.7373 µs]
       change: [−3.0742% +0.1722% +3.6012%] (p = 0.92 > 0.05)

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

transfer/pacing-false/varying-seeds/wallclock-time/run: Change within noise threshold.
       time:   [25.450 ms 25.500 ms 25.558 ms]
       change: [−0.7068% −0.4516% −0.1821%] (p = 0.00 < 0.05)

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

transfer/pacing-false/varying-seeds/simulated-time/run: No change in performance detected.
       time:   [25.139 s 25.176 s 25.214 s]
       thrpt:  [162.45 KiB/s 162.69 KiB/s 162.94 KiB/s]
change:
       time:   [−0.3739% −0.1767% +0.0336%] (p = 0.09 > 0.05)
       thrpt:  [−0.0335% +0.1770% +0.3753%]
transfer/pacing-true/varying-seeds/wallclock-time/run: Change within noise threshold.
       time:   [25.936 ms 26.007 ms 26.083 ms]
       change: [+1.5088% +1.8631% +2.2585%] (p = 0.00 < 0.05)

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

transfer/pacing-true/varying-seeds/simulated-time/run: No change in performance detected.
       time:   [24.921 s 24.959 s 25.000 s]
       thrpt:  [163.84 KiB/s 164.11 KiB/s 164.36 KiB/s]
change:
       time:   [−0.3303% −0.1258% +0.0979%] (p = 0.27 > 0.05)
       thrpt:  [−0.0978% +0.1259% +0.3314%]

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

transfer/pacing-false/same-seed/wallclock-time/run: Change within noise threshold.
       time:   [26.137 ms 26.156 ms 26.175 ms]
       change: [+2.1238% +2.3229% +2.4737%] (p = 0.00 < 0.05)

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

transfer/pacing-false/same-seed/simulated-time/run: No change in performance detected.
       time:   [25.710 s 25.710 s 25.710 s]
       thrpt:  [159.31 KiB/s 159.31 KiB/s 159.31 KiB/s]
change:
       time:   [+0.0000% +0.0000% +0.0000%] (p = NaN > 0.05)
       thrpt:  [+0.0000% +0.0000% +0.0000%]
transfer/pacing-true/same-seed/wallclock-time/run: Change within noise threshold.
       time:   [27.163 ms 27.187 ms 27.212 ms]
       change: [+0.8877% +1.1122% +1.2727%] (p = 0.00 < 0.05)

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

transfer/pacing-true/same-seed/simulated-time/run: No change in performance detected.
       time:   [25.675 s 25.675 s 25.675 s]
       thrpt:  [159.53 KiB/s 159.53 KiB/s 159.53 KiB/s]
change:
       time:   [+0.0000% +0.0000% +0.0000%] (p = NaN > 0.05)
       thrpt:  [+0.0000% +0.0000% +0.0000%]

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants