Skip to content

chore: Split QNS workflows#3279

Merged
larseggert merged 2 commits into
mozilla:mainfrom
larseggert:chore-split-qns
Dec 17, 2025
Merged

chore: Split QNS workflows#3279
larseggert merged 2 commits into
mozilla:mainfrom
larseggert:chore-split-qns

Conversation

@larseggert

Copy link
Copy Markdown
Collaborator

Into one generating a Docker image for the interop runner, and one running on PRs. The old file had both, and they had zero overlap.

Into one generating a Docker image for the interop runner, and one running on PRs. The old file had both, and they had zero overlap.
Copilot AI review requested due to automatic review settings December 16, 2025 16:26
@codecov

codecov Bot commented Dec 16, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.66%. Comparing base (4f38c91) to head (8399f7c).
⚠️ Report is 5 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3279      +/-   ##
==========================================
- Coverage   93.73%   93.66%   -0.07%     
==========================================
  Files         125      125              
  Lines       37134    37134              
  Branches    37134    37134              
==========================================
- Hits        34807    34782      -25     
- Misses       1470     1497      +27     
+ Partials      857      855       -2     
Components Coverage Δ
neqo-common 98.13% <ø> (ø)
neqo-crypto 83.19% <ø> (-0.49%) ⬇️
neqo-http3 93.66% <ø> (ø)
neqo-qpack 94.47% <ø> (ø)
neqo-transport 94.54% <ø> (-0.08%) ⬇️
neqo-udp 82.42% <ø> (-0.42%) ⬇️
mtu 88.77% <ø> (-0.17%) ⬇️

@codspeed-hq

codspeed-hq Bot commented Dec 16, 2025

Copy link
Copy Markdown

CodSpeed Performance Report

Merging #3279 will degrade performances by 7.01%

Comparing larseggert:chore-split-qns (8399f7c) with main (e74f986)1

Summary

⚡ 1 improvement
❌ 1 regression
✅ 21 untouched

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Benchmarks breakdown

Mode Benchmark BASE HEAD Change
Simulation client 816.2 ms 770.3 ms +5.97%
Simulation wallclock-time 32.3 ms 34.7 ms -7.01%

Footnotes

  1. No successful run was found on main (b3338f9) during the generation of this report, so e74f986 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 refactors the QNS (QUIC Network Simulator) workflow by splitting it into two separate workflow files: one for building and pushing Docker images to the registry (scheduled and manual), and another for running interop tests on pull requests. The original qns.yml file contained both workflows with conditional logic, but they had no overlap in functionality.

Key changes:

  • Removed PR-triggered logic and all PR-specific jobs from qns.yml, keeping only the scheduled Docker image build
  • Created new qns-pr.yml workflow containing all PR-specific jobs (docker-image, implementations, run-qns, report)
  • Updated concurrency groups and removed unnecessary conditions to reflect the split responsibilities

Reviewed changes

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

File Description
.github/workflows/qns.yml Simplified to only build and push Docker images on schedule/manual trigger; removed all PR-related jobs and conditions
.github/workflows/qns-pr.yml New workflow file containing all PR-specific QNS testing logic moved from the original file

Comment thread .github/workflows/qns-pr.yml
@larseggert larseggert enabled auto-merge December 16, 2025 20:04
@larseggert larseggert added this pull request to the merge queue Dec 16, 2025
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Dec 16, 2025
@github-actions

Copy link
Copy Markdown
Contributor

Client/server transfer results

Performance differences relative to b3338f9.

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-neqo-cubic 270.8 ± 3.8 264.3 281.0 118.2 ± 8.4 💚 -1.8 -0.7%
neqo-google-cubic 741.2 ± 4.3 735.0 754.3 43.2 ± 7.4 💚 -1.2 -0.2%
neqo-neqo-cubic-nopacing 97.4 ± 5.3 87.8 121.9 328.4 ± 6.0 💔 1.5 1.6%
neqo-s2n-cubic 220.8 ± 4.3 213.6 234.4 144.9 ± 7.4 💔 1.3 0.6%

Table above only shows statistically significant changes. See all results below.

All results

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-google-nopacing 446.4 ± 4.8 439.5 459.0 71.7 ± 6.7
google-neqo-cubic 270.8 ± 3.8 264.3 281.0 118.2 ± 8.4 💚 -1.8 -0.7%
msquic-msquic-nopacing 178.5 ± 58.7 138.2 406.3 179.3 ± 0.5
msquic-neqo-cubic 201.7 ± 58.7 150.0 609.1 158.7 ± 0.5 -2.1 -1.0%
neqo-google-cubic 741.2 ± 4.3 735.0 754.3 43.2 ± 7.4 💚 -1.2 -0.2%
neqo-msquic-cubic 159.7 ± 3.9 153.7 167.3 200.4 ± 8.2 -0.5 -0.3%
neqo-neqo-cubic 98.4 ± 4.6 87.4 107.3 325.2 ± 7.0 -0.9 -0.9%
neqo-neqo-cubic-nopacing 97.4 ± 5.3 87.8 121.9 328.4 ± 6.0 💔 1.5 1.6%
neqo-neqo-reno 97.6 ± 4.4 88.5 105.8 327.9 ± 7.3 0.8 0.9%
neqo-neqo-reno-nopacing 97.0 ± 4.0 88.5 106.6 329.8 ± 8.0 -0.4 -0.4%
neqo-quiche-cubic 193.6 ± 4.7 185.6 204.0 165.3 ± 6.8 0.9 0.4%
neqo-s2n-cubic 220.8 ± 4.3 213.6 234.4 144.9 ± 7.4 💔 1.3 0.6%
quiche-neqo-cubic 151.9 ± 4.9 141.9 162.6 210.7 ± 6.5 0.0 0.0%
quiche-quiche-nopacing 145.1 ± 5.5 136.9 175.7 220.6 ± 5.8
s2n-neqo-cubic 174.1 ± 4.8 164.7 195.8 183.8 ± 6.7 1.2 0.7%
s2n-s2n-nopacing 247.0 ± 22.7 233.2 348.2 129.6 ± 1.4

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

@github-actions

Copy link
Copy Markdown
Contributor

Benchmark results

No significant performance differences relative to b3338f9.

All results
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: Change within noise threshold.
       time:   [205.23 ms 205.65 ms 206.23 ms]
       thrpt:  [484.91 MiB/s 486.27 MiB/s 487.26 MiB/s]
change:
       time:   [-0.5597% -0.2989% +0.0232] (p = 0.04 < 0.05)
       thrpt:  [-0.0232% +0.2998% +0.5628]
       Change within noise threshold.
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: No change in performance detected.
       time:   [281.89 ms 283.59 ms 285.30 ms]
       thrpt:  [35.051 Kelem/s 35.262 Kelem/s 35.475 Kelem/s]
change:
       time:   [-1.2291% -0.3615% +0.5379] (p = 0.43 > 0.05)
       thrpt:  [-0.5350% +0.3628% +1.2444]
       No change in performance detected.
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
       time:   [38.754 ms 38.903 ms 39.069 ms]
       thrpt:  [25.596   B/s 25.705   B/s 25.804   B/s]
change:
       time:   [-0.7999% -0.1474% +0.5139] (p = 0.65 > 0.05)
       thrpt:  [-0.5113% +0.1476% +0.8063]
       No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) high mild
7 (7.00%) high severe
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: No change in performance detected.
       time:   [210.25 ms 210.60 ms 210.99 ms]
       thrpt:  [473.96 MiB/s 474.83 MiB/s 475.63 MiB/s]
change:
       time:   [-0.1911% +0.0803% +0.3424] (p = 0.56 > 0.05)
       thrpt:  [-0.3413% -0.0802% +0.1915]
       No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe
decode 4096 bytes, mask ff: No change in performance detected.
       time:   [4.5121 µs 4.5191 µs 4.5264 µs]
       change: [-0.6970% -0.3054% +0.0437] (p = 0.10 > 0.05)
       No change in performance detected.
Found 4 outliers among 100 measurements (4.00%)
3 (3.00%) high mild
1 (1.00%) high severe
decode 1048576 bytes, mask ff: No change in performance detected.
       time:   [1.1621 ms 1.1650 ms 1.1692 ms]
       change: [-0.7046% +0.1779% +1.1423] (p = 0.71 > 0.05)
       No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
1 (1.00%) high mild
11 (11.00%) high severe
decode 4096 bytes, mask 7f: No change in performance detected.
       time:   [5.7957 µs 5.8046 µs 5.8135 µs]
       change: [-0.3960% -0.0618% +0.2456] (p = 0.73 > 0.05)
       No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severe
decode 1048576 bytes, mask 7f: No change in performance detected.
       time:   [1.4758 ms 1.4810 ms 1.4886 ms]
       change: [-0.8617% -0.4348% +0.1264] (p = 0.07 > 0.05)
       No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe
decode 4096 bytes, mask 3f: No change in performance detected.
       time:   [5.5389 µs 5.5492 µs 5.5602 µs]
       change: [-0.6790% -0.2441% +0.0952] (p = 0.25 > 0.05)
       No change in performance detected.
Found 4 outliers among 100 measurements (4.00%)
3 (3.00%) high mild
1 (1.00%) high severe
decode 1048576 bytes, mask 3f: No change in performance detected.
       time:   [1.4157 ms 1.4182 ms 1.4208 ms]
       change: [-0.1975% +0.0480% +0.2753] (p = 0.70 > 0.05)
       No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
1-streams/each-1000-bytes/wallclock-time: No change in performance detected.
       time:   [584.61 µs 587.76 µs 591.18 µs]
       change: [-0.8562% -0.1770% +0.4905] (p = 0.62 > 0.05)
       No change in performance detected.
Found 19 outliers among 100 measurements (19.00%)
19 (19.00%) high severe
1-streams/each-1000-bytes/simulated-time: No change in performance detected.
       time:   [118.72 ms 118.97 ms 119.23 ms]
       thrpt:  [8.1906 KiB/s 8.2082 KiB/s 8.2257 KiB/s]
change:
       time:   [-0.2820% +0.0062% +0.3109] (p = 0.96 > 0.05)
       thrpt:  [-0.3099% -0.0062% +0.2828]
       No change in performance detected.
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high mild
1000-streams/each-1-bytes/wallclock-time: Change within noise threshold.
       time:   [12.255 ms 12.296 ms 12.338 ms]
       change: [-1.3308% -0.8785% -0.4377] (p = 0.00 < 0.05)
       Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
1000-streams/each-1-bytes/simulated-time: No change in performance detected.
       time:   [2.3315 s 2.3352 s 2.3389 s]
       thrpt:  [427.54   B/s 428.23   B/s 428.91   B/s]
change:
       time:   [-0.0883% +0.1154% +0.3377] (p = 0.30 > 0.05)
       thrpt:  [-0.3366% -0.1153% +0.0884]
       No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) low mild
1000-streams/each-1000-bytes/wallclock-time: Change within noise threshold.
       time:   [49.926 ms 50.026 ms 50.129 ms]
       change: [-1.1159% -0.8114% -0.5138] (p = 0.00 < 0.05)
       Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mild
1000-streams/each-1000-bytes/simulated-time: No change in performance detected.
       time:   [16.106 s 16.344 s 16.577 s]
       thrpt:  [58.911 KiB/s 59.751 KiB/s 60.634 KiB/s]
change:
       time:   [-2.9959% -0.8567% +1.3823] (p = 0.45 > 0.05)
       thrpt:  [-1.3634% +0.8641% +3.0884]
       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:   [89.495 ns 89.834 ns 90.169 ns]
       change: [-0.8172% -0.2274% +0.2907] (p = 0.44 > 0.05)
       No change in performance detected.
Found 13 outliers among 100 measurements (13.00%)
12 (12.00%) high mild
1 (1.00%) high severe
coalesce_acked_from_zero 3+1 entries: No change in performance detected.
       time:   [105.76 ns 106.10 ns 106.45 ns]
       change: [-0.6572% -0.2186% +0.1698] (p = 0.31 > 0.05)
       No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
1 (1.00%) low mild
1 (1.00%) high mild
10 (10.00%) high severe
coalesce_acked_from_zero 10+1 entries: No change in performance detected.
       time:   [105.56 ns 106.42 ns 107.61 ns]
       change: [-0.1306% +0.9703% +2.2174] (p = 0.11 > 0.05)
       No change in performance detected.
Found 17 outliers among 100 measurements (17.00%)
1 (1.00%) low severe
3 (3.00%) low mild
1 (1.00%) high mild
12 (12.00%) high severe
coalesce_acked_from_zero 1000+1 entries: Change within noise threshold.
       time:   [90.367 ns 90.512 ns 90.680 ns]
       change: [-1.7063% -1.1433% -0.6114] (p = 0.00 < 0.05)
       Change within noise threshold.
Found 12 outliers among 100 measurements (12.00%)
4 (4.00%) high mild
8 (8.00%) high severe
RxStreamOrderer::inbound_frame(): No change in performance detected.
       time:   [108.36 ms 108.48 ms 108.63 ms]
       change: [-0.1989% -0.0039% +0.1663] (p = 0.97 > 0.05)
       No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe
sent::Packets::take_ranges: Change within noise threshold.
       time:   [4.3856 µs 4.4994 µs 4.6161 µs]
       change: [-7.8288% -4.1917% -0.4388] (p = 0.03 < 0.05)
       Change within noise threshold.
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:   [23.263 ms 23.277 ms 23.292 ms]
       change: [+1.1936% +1.2930% +1.3853] (p = 0.00 < 0.05)
       Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
transfer/pacing-false/varying-seeds/simulated-time/run: No change in performance detected.
       time:   [23.941 s 23.941 s 23.941 s]
       thrpt:  [171.09 KiB/s 171.09 KiB/s 171.09 KiB/s]
change:
       time:   [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
       thrpt:  [+0.0000% +0.0000% +0.0000]
       No change in performance detected.
transfer/pacing-true/varying-seeds/wallclock-time/run: Change within noise threshold.
       time:   [23.493 ms 23.517 ms 23.548 ms]
       change: [+0.2922% +0.4248% +0.5654] (p = 0.00 < 0.05)
       Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high severe
transfer/pacing-true/varying-seeds/simulated-time/run: No change in performance detected.
       time:   [23.676 s 23.676 s 23.676 s]
       thrpt:  [173.01 KiB/s 173.01 KiB/s 173.01 KiB/s]
change:
       time:   [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
       thrpt:  [+0.0000% +0.0000% +0.0000]
       No change in performance detected.
transfer/pacing-false/same-seed/wallclock-time/run: Change within noise threshold.
       time:   [23.168 ms 23.197 ms 23.240 ms]
       change: [+0.3259% +0.4663% +0.6526] (p = 0.00 < 0.05)
       Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severe
transfer/pacing-false/same-seed/simulated-time/run: No change in performance detected.
       time:   [23.941 s 23.941 s 23.941 s]
       thrpt:  [171.09 KiB/s 171.09 KiB/s 171.09 KiB/s]
change:
       time:   [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
       thrpt:  [+0.0000% +0.0000% +0.0000]
       No change in performance detected.
transfer/pacing-true/same-seed/wallclock-time/run: Change within noise threshold.
       time:   [23.831 ms 23.855 ms 23.885 ms]
       change: [-0.2775% -0.1537% -0.0198] (p = 0.02 < 0.05)
       Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severe
transfer/pacing-true/same-seed/simulated-time/run: No change in performance detected.
       time:   [23.676 s 23.676 s 23.676 s]
       thrpt:  [173.01 KiB/s 173.01 KiB/s 173.01 KiB/s]
change:
       time:   [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
       thrpt:  [+0.0000% +0.0000% +0.0000]
       No change in performance detected.

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

@larseggert larseggert added this pull request to the merge queue Dec 17, 2025
Merged via the queue into mozilla:main with commit c324197 Dec 17, 2025
144 of 145 checks passed
@larseggert larseggert deleted the chore-split-qns branch December 17, 2025 09:47
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