Skip to content

chore: Add quic-zig to QNS matrix#3556

Merged
larseggert merged 1 commit intomozilla:mainfrom
larseggert:chore-qns-quic-zig
Apr 13, 2026
Merged

chore: Add quic-zig to QNS matrix#3556
larseggert merged 1 commit intomozilla:mainfrom
larseggert:chore-qns-quic-zig

Conversation

@larseggert
Copy link
Copy Markdown
Collaborator

No description provided.

Copilot AI review requested due to automatic review settings April 13, 2026 05:31
Copy link
Copy Markdown
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 QNS PR workflow to include the quic-zig implementation in the set of additional QUIC implementations used for interop pair generation, expanding coverage of Neqo’s PR/baseline interop testing against another external stack.

Changes:

  • Add a reference comment for quic-zig in the workflow’s “non-default implementations” list.
  • Extend the generated additional.json implementations map to include quic-zig (image/url/role), so it participates in the QNS interop pair generation.

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

Clean, minimal addition of quic-zig to the QNS interop matrix. The new entry is structurally consistent with the existing non-default implementations (tquic, openssl, linuxquic): comment referencing the upstream quic-interop-runner PR, proper JSON with image/url/role, and correct trailing-comma fixup on the preceding linuxquic block. role: "both" will generate client and server pairs against both neqo-pr and neqo-baseline, which is the right default for a full QUIC stack.

No issues found.

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 13, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.43%. Comparing base (b50af73) to head (052ecd1).
⚠️ Report is 2 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3556      +/-   ##
==========================================
- Coverage   94.55%   94.43%   -0.13%     
==========================================
  Files         127      131       +4     
  Lines       39627    39957     +330     
  Branches    39627    39957     +330     
==========================================
+ Hits        37470    37734     +264     
- Misses       1318     1377      +59     
- Partials      839      846       +7     
Flag Coverage Δ
freebsd 93.49% <ø> (-0.09%) ⬇️
linux 94.50% <ø> (ø)
macos 94.44% <ø> (ø)
windows 94.49% <ø> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
neqo-common 98.61% <ø> (ø)
neqo-crypto 87.08% <ø> (ø)
neqo-http3 93.92% <ø> (ø)
neqo-qpack 95.14% <ø> (ø)
neqo-transport 95.57% <ø> (-0.04%) ⬇️
neqo-udp 84.90% <ø> (ø)
mtu 86.61% <ø> (ø)

@github-actions
Copy link
Copy Markdown
Contributor

Benchmark results

No significant performance differences relative to b50af73.

All results
transfer/1-conn/1-100mb-resp (aka. Download)/mtu-1504: No change in performance detected.
       time:   [203.97 ms 204.28 ms 204.63 ms]
       thrpt:  [488.69 MiB/s 489.51 MiB/s 490.26 MiB/s]
change:
       time:   [-0.2510% -0.0168% +0.2110] (p = 0.89 > 0.05)
       thrpt:  [-0.2106% +0.0168% +0.2516]
       No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
transfer/1-conn/10_000-parallel-1b-resp (aka. RPS)/mtu-1504: Change within noise threshold.
       time:   [284.32 ms 286.12 ms 287.93 ms]
       thrpt:  [34.731 Kelem/s 34.950 Kelem/s 35.172 Kelem/s]
change:
       time:   [-2.1356% -1.1894% -0.3035] (p = 0.01 < 0.05)
       thrpt:  [+0.3044% +1.2037% +2.1822]
       Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
transfer/1-conn/1-1b-resp (aka. HPS)/mtu-1504: No change in performance detected.
       time:   [38.661 ms 38.799 ms 38.953 ms]
       thrpt:  [25.672   B/s 25.774   B/s 25.866   B/s]
change:
       time:   [-1.1479% -0.5082% +0.1171] (p = 0.12 > 0.05)
       thrpt:  [-0.1169% +0.5108% +1.1612]
       No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
2 (2.00%) high mild
4 (4.00%) high severe
transfer/1-conn/1-100mb-req (aka. Upload)/mtu-1504: Change within noise threshold.
       time:   [207.43 ms 207.73 ms 208.03 ms]
       thrpt:  [480.71 MiB/s 481.40 MiB/s 482.09 MiB/s]
change:
       time:   [+0.2384% +0.5955% +0.8963] (p = 0.00 < 0.05)
       thrpt:  [-0.8884% -0.5920% -0.2378]
       Change within noise threshold.
streams/walltime/1-streams/each-1000-bytes: No change in performance detected.
       time:   [593.03 µs 594.71 µs 596.76 µs]
       change: [-0.5091% -0.0290% +0.4428] (p = 0.91 > 0.05)
       No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high severe
streams/walltime/1000-streams/each-1-bytes: No change in performance detected.
       time:   [12.438 ms 12.457 ms 12.478 ms]
       change: [-0.6573% -0.2574% +0.0467] (p = 0.16 > 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
streams/walltime/1000-streams/each-1000-bytes: Change within noise threshold.
       time:   [45.794 ms 45.835 ms 45.878 ms]
       change: [+0.5600% +0.6994% +0.8415] (p = 0.00 < 0.05)
       Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild
transfer/walltime/pacing-false/varying-seeds: No change in performance detected.
       time:   [80.254 ms 80.369 ms 80.527 ms]
       change: [-0.3882% -0.1364% +0.0861] (p = 0.29 > 0.05)
       No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
1 (1.00%) high mild
1 (1.00%) high severe
transfer/walltime/pacing-true/varying-seeds: No change in performance detected.
       time:   [80.296 ms 80.404 ms 80.540 ms]
       change: [-0.2695% -0.1179% +0.0684] (p = 0.20 > 0.05)
       No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) low mild
5 (5.00%) high severe
transfer/walltime/pacing-false/same-seed: No change in performance detected.
       time:   [78.815 ms 78.902 ms 79.012 ms]
       change: [-0.2061% -0.0527% +0.1279] (p = 0.55 > 0.05)
       No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
transfer/walltime/pacing-true/same-seed: Change within noise threshold.
       time:   [80.247 ms 80.317 ms 80.401 ms]
       change: [-0.5438% -0.2862% -0.0855] (p = 0.01 < 0.05)
       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

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

@github-actions
Copy link
Copy Markdown
Contributor

Failed Interop Tests

QUIC Interop Runner, client vs. server, differences relative to main at b50af73.

neqo-pr as clientneqo-pr as server
neqo-pr vs. go-x-net: BP BA
neqo-pr vs. haproxy: BP BA
neqo-pr vs. kwik: S L1 C1 BP BA
neqo-pr vs. linuxquic: C1
neqo-pr vs. lsquic: L1 C1
neqo-pr vs. msquic: A L1 C1 🚀C2
neqo-pr vs. mvfst: H DC LR M R Z 3 B U A L1 L2 C1 C2 6 BP BA
neqo-pr vs. neqo: Z A
neqo-pr vs. nginx: BP BA
neqo-pr vs. ngtcp2: CM
neqo-pr vs. picoquic: A ⚠️BA
neqo-pr vs. quic-go: A
neqo-pr vs. quic-zig: 3 🚀L1
neqo-pr vs. quiche: BP BA
neqo-pr vs. s2n-quic: ⚠️BA CM
neqo-pr vs. tquic: S BP BA
neqo-pr vs. xquic: A L1 🚀C1
aioquic vs. neqo-pr: Z 🚀C1 CM
go-x-net vs. neqo-pr: CM
kwik vs. neqo-pr: Z BP BA CM
lsquic vs. neqo-pr: Z
msquic vs. neqo-pr: Z CM
mvfst vs. neqo-pr: Z A L1 C1 CM
neqo vs. neqo-pr: Z A
openssl vs. neqo-pr: LR M A CM
picoquic vs. neqo-pr: Z
quic-go vs. neqo-pr: ⚠️Z CM
quic-zig vs. neqo-pr: DC 3 🚀CM
quiche vs. neqo-pr: Z CM
quinn vs. neqo-pr: Z V2 CM
s2n-quic vs. neqo-pr: 🚀B CM
tquic vs. neqo-pr: Z CM
xquic vs. neqo-pr: M CM
All results

Succeeded Interop Tests

QUIC Interop Runner, client vs. server

neqo-pr as client

neqo-pr as server

Unsupported Interop Tests

QUIC Interop Runner, client vs. server

neqo-pr as client

neqo-pr as server

@github-actions
Copy link
Copy Markdown
Contributor

Client/server transfer results

Performance differences relative to b50af73.

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 ± σ Δ baseline Δ baseline
neqo-msquic-cubic 155.2 ± 4.3 147.7 163.6 206.2 ± 7.4 💔 1.9 1.2%
neqo-neqo-newreno-nopacing 97.7 ± 5.2 85.7 106.2 327.4 ± 6.2 💔 1.6 1.6%
quiche-neqo-cubic 177.8 ± 4.4 170.6 189.4 180.0 ± 7.3 💚 -1.7 -0.9%

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 ± σ Δ baseline Δ baseline
google-google-nopacing 454.0 ± 3.4 448.3 465.6 70.5 ± 9.4
google-neqo-cubic 273.3 ± 4.4 264.9 283.7 117.1 ± 7.3 1.1 0.4%
msquic-msquic-nopacing 141.2 ± 38.8 114.3 371.6 226.6 ± 0.8
msquic-neqo-cubic 157.1 ± 37.8 124.6 368.1 203.6 ± 0.8 2.9 1.9%
neqo-google-cubic 751.0 ± 4.3 744.9 764.9 42.6 ± 7.4 -0.6 -0.1%
neqo-msquic-cubic 155.2 ± 4.3 147.7 163.6 206.2 ± 7.4 💔 1.9 1.2%
neqo-neqo-cubic 97.3 ± 4.2 88.3 108.3 328.8 ± 7.6 -0.3 -0.3%
neqo-neqo-cubic-nopacing 97.1 ± 5.6 88.8 134.0 329.7 ± 5.7 -1.3 -1.4%
neqo-neqo-newreno 96.4 ± 4.0 90.2 104.4 331.9 ± 8.0 0.1 0.1%
neqo-neqo-newreno-nopacing 97.7 ± 5.2 85.7 106.2 327.4 ± 6.2 💔 1.6 1.6%
neqo-quiche-cubic 190.4 ± 4.0 184.7 206.0 168.0 ± 8.0 -0.4 -0.2%
neqo-s2n-cubic 221.1 ± 4.0 213.6 230.2 144.7 ± 8.0 -0.3 -0.2%
quiche-neqo-cubic 177.8 ± 4.4 170.6 189.4 180.0 ± 7.3 💚 -1.7 -0.9%
quiche-quiche-nopacing 140.0 ± 4.7 133.9 166.0 228.6 ± 6.8
s2n-neqo-cubic 221.7 ± 6.9 209.7 271.8 144.3 ± 4.6 0.2 0.1%
s2n-s2n-nopacing 303.7 ± 32.3 282.2 398.5 105.4 ± 1.0

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

@larseggert larseggert merged commit 846a0ee into mozilla:main Apr 13, 2026
193 checks passed
@larseggert larseggert deleted the chore-qns-quic-zig branch April 13, 2026 13:08
martinthomson pushed a commit to martinthomson/neqo that referenced this pull request Apr 13, 2026
github-merge-queue Bot pushed a commit that referenced this pull request Apr 14, 2026
* Events for SCONE

Clean version of #3448.

Closes #3448.

* Restore missing file

* reduce noisiness

Co-authored-by: Lars Eggert <lars@eggert.org>
Signed-off-by: Martin Thomson <mt@lowentropy.net>

* Revert comment change

Signed-off-by: Martin Thomson <mt@lowentropy.net>

* Address review comments, iterate

This uses a loop rather than recursion by popular demand.

It also improves the logic for updates, so that updates occur when
receiving any packet, in case enough time has elapsed.  This resets the
state back to "unknown" after one period.

Tests to match, plus some improved factoring.

* Access PartialOrd directly

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Signed-off-by: Martin Thomson <mt@lowentropy.net>

* Clippy

* Factor SCONE to track state on the path

* Take a suggestion for commenting

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Signed-off-by: Martin Thomson <mt@lowentropy.net>

* chore: Use Claude PR review from `mozilla/actions` (#3559)

* chore: Add `quic-zig` to QNS matrix (#3556)

* At least the suggestion could be properly formatted...

* OK, that was far worse a suggestion than I thought

---------

Signed-off-by: Martin Thomson <mt@lowentropy.net>
Co-authored-by: Lars Eggert <lars@eggert.org>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

2 participants