neqo icon indicating copy to clipboard operation
neqo copied to clipboard

fix(bin): handle EIO

Open mxinden opened this issue 1 month ago • 6 comments

Fixes https://github.com/mozilla/neqo/issues/3032.

mxinden avatar Nov 13 '25 12:11 mxinden

Codecov Report

:white_check_mark: All modified and coverable lines are covered by tests. :white_check_mark: Project coverage is 93.41%. Comparing base (11dec9b) to head (f20a8ff). :warning: Report is 10 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3130      +/-   ##
==========================================
- Coverage   93.47%   93.41%   -0.07%     
==========================================
  Files         125      125              
  Lines       36393    36393              
  Branches    36393    36393              
==========================================
- Hits        34020    33998      -22     
- Misses       1528     1551      +23     
+ Partials      845      844       -1     
Components Coverage Δ
neqo-common 97.36% <ø> (ø)
neqo-crypto 83.25% <ø> (-0.48%) :arrow_down:
neqo-http3 93.30% <ø> (ø)
neqo-qpack 94.29% <ø> (ø)
neqo-transport 94.51% <ø> (-0.07%) :arrow_down:
neqo-udp 79.42% <ø> (ø)
mtu 85.76% <ø> (ø)

codecov[bot] avatar Nov 13 '25 12:11 codecov[bot]

CodSpeed Performance Report

Merging #3130 will improve performances by 12.18%

Comparing mxinden:eio (f20a8ff) with main (e7be019)

Summary

⚡ 3 improvements
✅ 20 untouched

Benchmarks breakdown

Mode Benchmark BASE HEAD Change
Simulation client 858.7 ms 765.4 ms +12.18%
Simulation wallclock-time 35.2 ms 32.9 ms +6.84%
Simulation run 167.2 ms 158.4 ms +5.56%

codspeed-hq[bot] avatar Nov 13 '25 12:11 codspeed-hq[bot]

🐰 Bencher Report

Brancheio
TestbedOn-prem
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
280.95 ms
(+0.90%)Baseline: 278.45 ms
282.92 ms
(99.30%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
msquic vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
225.07 ms
(+12.16%)Baseline: 200.66 ms
238.90 ms
(94.21%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. google (cubic, paced)📈 view plot
🚷 view threshold
777.37 ms
(+2.18%)Baseline: 760.78 ms
778.26 ms
(99.89%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. msquic (cubic, paced)📈 view plot
🚷 view threshold
156.66 ms
(-0.64%)Baseline: 157.67 ms
160.43 ms
(97.65%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. neqo (cubic)📈 view plot
🚷 view threshold
94.69 ms
(+3.01%)Baseline: 91.92 ms
97.46 ms
(97.16%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
94.32 ms
(+1.13%)Baseline: 93.26 ms
98.69 ms
(95.57%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. neqo (reno)📈 view plot
🚷 view threshold
95.83 ms
(+4.30%)Baseline: 91.88 ms
97.23 ms
(98.55%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. neqo (reno, paced)📈 view plot
🚷 view threshold
94.79 ms
(+1.81%)Baseline: 93.11 ms
98.26 ms
(96.47%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. quiche (cubic, paced)📈 view plot
🚷 view threshold
193.17 ms
(-0.23%)Baseline: 193.62 ms
196.90 ms
(98.10%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
neqo vs. s2n (cubic, paced)📈 view plot
🚷 view threshold
222.67 ms
(+0.68%)Baseline: 221.18 ms
224.16 ms
(99.34%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
quiche vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
152.35 ms
(-0.60%)Baseline: 153.27 ms
158.49 ms
(96.13%)
BenchmarkLatencyBenchmark Result
milliseconds (ms)
(Result Δ%)
Upper Boundary
milliseconds (ms)
(Limit %)
s2n vs. neqo (cubic, paced)📈 view plot
🚷 view threshold
174.50 ms
(+0.48%)Baseline: 173.67 ms
177.85 ms
(98.12%)
🐰 View full continuous benchmarking report in Bencher

github-actions[bot] avatar Nov 13 '25 12:11 github-actions[bot]

@larseggert have you seen this CI failure in mtu before?

=================================================================
==8681==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 152 byte(s) in 1 object(s) allocated from:
    #0 0x000105d4d86c in malloc+0x6c (librustc-nightly_rt.asan.dylib:arm64+0x5186c)
    #1 0x0001905339d4 in _malloc_type_malloc_outlined+0x60 (libsystem_malloc.dylib:arm64+0x1d9d4)
    #2 0x000190721c4c in dyld::ThreadLocalVariables::instantiateVariable(dyld::ThreadLocalVariables::Thunk const&)+0x34 (libdyld.dylib:arm64+0x3c4c)
    #3 0x00019072115c in _tlv_get_addr+0x64 (libdyld.dylib:arm64+0x315c)
    #4 0x000104bd42fc in _RNvNtNtNtCsaUeK9K0zDRL_3std6thread7current2id3get+0x14 (mtu-24d5ed0aa1fa0db8:arm64+0x1003742fc)
    #5 0x000104bd42d0 in _RNvNtNtNtCsaUeK9K0zDRL_3std6thread7current2id11get_or_initB7_+0x8 (mtu-24d5ed0aa1fa0db8:arm64+0x1003742d0)
    #6 0x000104c05b9c in _RNvNtNtCsaUeK9K0zDRL_3std6thread7current10current_idB5_+0x8 (mtu-24d5ed0aa1fa0db8:arm64+0x1003a5b9c)
    #7 0x000104bc18c8 in _RNvNtCsaUeK9K0zDRL_3std2rt4init+0x20 (mtu-24d5ed0aa1fa0db8:arm64+0x1003618c8)
    #8 0x000104bbae78 in _RNCNvNtCsaUeK9K0zDRL_3std2rt19lang_start_internal0B5_+0x1c0 (mtu-24d5ed0aa1fa0db8:arm64+0x10035ae78)
    #9 0x000104adfeb0 in _RINvNvNtCsaUeK9K0zDRL_3std9panicking12catch_unwind7do_callNCNvNtB6_2rt19lang_start_internal0iEB6_+0x184 (mtu-24d5ed0aa1fa0db8:arm64+0x10027feb0)
    #10 0x000104af6ddc in __rust_try+0x1c (mtu-24d5ed0aa1fa0db8:arm64+0x100296ddc)
    #11 0x000104ade8e0 in _RINvNtCsaUeK9K0zDRL_3std9panicking12catch_unwindiNCNvNtB4_2rt19lang_start_internal0EB4_+0x16c (mtu-24d5ed0aa1fa0db8:arm64+0x10027e8e0)
    #12 0x000104b00754 in _RINvNtCsaUeK9K0zDRL_3std5panic12catch_unwindNCNvNtB4_2rt19lang_start_internal0iEB4_+0x8 (mtu-24d5ed0aa1fa0db8:arm64+0x1002a0754)
    #13 0x000104bc17d8 in _RNvNtCsaUeK9K0zDRL_3std2rt19lang_start_internal+0x1a0 (mtu-24d5ed0aa1fa0db8:arm64+0x1003617d8)
    #14 0x000104862224 in _RINvNtCsaUeK9K0zDRL_3std2rt10lang_startuECs4yXop3HQnl2_3mtu rt.rs:205
    #15 0x00010486e634 in main+0x20 (mtu-24d5ed0aa1fa0db8:arm64+0x10000e634)
    #16 0x000190376b94  (<unknown module>)

-----------------------------------------------------
Suppressions used:
  count      bytes template
      3        120 fetchInitializingClassList
-----------------------------------------------------

SUMMARY: AddressSanitizer: 152 byte(s) leaked in 1 allocation(s).
error: test failed, to rerun pass `-p mtu --lib`

https://github.com/mozilla/neqo/actions/runs/19595253367/job/56119038615?pr=3130

mxinden avatar Nov 22 '25 12:11 mxinden

Failed Interop Tests

QUIC Interop Runner, client vs. server, differences relative to 11dec9b1745bcdc948ab580499d894d14adbdb9a.

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 Nov 22 '25 13:11 github-actions[bot]

Benchmark results

Performance differences relative to e7be0197e0062929b260cd2384823f511c038703.

1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: :green_heart: Performance has improved.
       time:   [201.44 ms 201.76 ms 202.09 ms]
       thrpt:  [494.83 MiB/s 495.65 MiB/s 496.43 MiB/s]
change:
       time:   [-1.8627% -1.5707% -1.3001%] (p = 0.00 +1.5957% +1.8981%]

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: :broken_heart: Performance has regressed.
       time:   [284.75 ms 286.69 ms 288.75 ms]
       thrpt:  [34.632 Kelem/s 34.880 Kelem/s 35.118 Kelem/s]
change:
       time:   [+1.7889% +2.7615% +3.6882%] (p = 0.00 -2.6873% -1.7575%]

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

1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
       time:   [38.619 ms 38.781 ms 38.962 ms]
       thrpt:  [25.666   B/s 25.786   B/s 25.894   B/s]
change:
       time:   [-0.0084% +0.4839% +1.0186%] (p = 0.08 > 0.05)
       thrpt:  [-1.0084% -0.4816% +0.0084%]

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: :green_heart: Performance has improved.
       time:   [207.54 ms 207.99 ms 208.66 ms]
       thrpt:  [479.25 MiB/s 480.80 MiB/s 481.83 MiB/s]
change:
       time:   [-2.2538% -1.9770% -1.5834%] (p = 0.00 +2.0168% +2.3058%]

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:   [11.312 µs 11.346 µs 11.387 µs]
       change: [-0.4607% -0.0168% +0.4153%] (p = 0.94 > 0.05)

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

decode 1048576 bytes, mask ff: No change in performance detected.
       time:   [2.9913 ms 3.0006 ms 3.0115 ms]
       change: [-0.6900% -0.1944% +0.2857%] (p = 0.45 > 0.05)

Found 9 outliers among 100 measurements (9.00%) 9 (9.00%) high severe

decode 4096 bytes, mask 7f: No change in performance detected.
       time:   [19.572 µs 19.621 µs 19.677 µs]
       change: [-0.2924% +0.2334% +0.9667%] (p = 0.58 > 0.05)

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

decode 1048576 bytes, mask 7f: No change in performance detected.
       time:   [5.0306 ms 5.0421 ms 5.0552 ms]
       change: [-0.3901% -0.0206% +0.3346%] (p = 0.92 > 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:   [6.2006 µs 6.2198 µs 6.2467 µs]
       change: [-1.1008% -0.3174% +0.4508%] (p = 0.45 > 0.05)

Found 21 outliers among 100 measurements (21.00%) 8 (8.00%) low mild 5 (5.00%) high mild 8 (8.00%) high severe

decode 1048576 bytes, mask 3f: Change within noise threshold.
       time:   [1.7636 ms 1.7760 ms 1.7935 ms]
       change: [+0.1664% +0.8745% +1.6562%] (p = 0.03 Found 11 outliers among 100 measurements (11.00%)
1 (1.00%) low mild
1 (1.00%) high mild
9 (9.00%) high severe
1-streams/each-1000-bytes/wallclock-time: Change within noise threshold.
       time:   [586.54 µs 589.10 µs 591.97 µs]
       change: [+0.2897% +0.8267% +1.4115%] (p = 0.00 Found 11 outliers among 100 measurements (11.00%)
11 (11.00%) high severe
1-streams/each-1000-bytes/simulated-time
time:   [118.66 ms 118.90 ms 119.13 ms]
thrpt:  [8.1973 KiB/s 8.2134 KiB/s 8.2296 KiB/s]
change:
time:   [-0.5005% -0.2316% +0.0392%] (p = 0.10 > 0.05)
thrpt:  [-0.0392% +0.2322% +0.5030%]
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: No change in performance detected.
       time:   [12.436 ms 12.471 ms 12.506 ms]
       change: [-0.4853% -0.0234% +0.4182%] (p = 0.92 > 0.05)
1000-streams/each-1-bytes/simulated-time: No change in performance detected.
       time:   [2.3291 s 2.3323 s 2.3355 s]
       thrpt:  [428.18   B/s 428.76   B/s 429.35   B/s]
change:
       time:   [-0.0762% +0.1389% +0.3599%] (p = 0.21 > 0.05)
       thrpt:  [-0.3586% -0.1387% +0.0763%]

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

1000-streams/each-1000-bytes/wallclock-time: No change in performance detected.
       time:   [49.841 ms 49.951 ms 50.064 ms]
       change: [-0.9866% -0.4596% -0.0309%] (p = 0.06 > 0.05)
1000-streams/each-1000-bytes/simulated-time: No change in performance detected.
       time:   [16.176 s 16.392 s 16.606 s]
       thrpt:  [58.806 KiB/s 59.576 KiB/s 60.371 KiB/s]
change:
       time:   [-2.6278% -0.6381% +1.4515%] (p = 0.54 > 0.05)
       thrpt:  [-1.4307% +0.6422% +2.6988%]

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

coalesce_acked_from_zero 1+1 entries: No change in performance detected.
       time:   [89.400 ns 89.798 ns 90.179 ns]
       change: [-0.2759% +0.2421% +0.7853%] (p = 0.37 > 0.05)

Found 13 outliers among 100 measurements (13.00%) 11 (11.00%) high mild 2 (2.00%) high severe

coalesce_acked_from_zero 3+1 entries: Change within noise threshold.
       time:   [105.79 ns 106.11 ns 106.44 ns]
       change: [-0.8331% -0.4272% -0.0351%] (p = 0.04 Found 14 outliers among 100 measurements (14.00%)
1 (1.00%) low mild
3 (3.00%) high mild
10 (10.00%) high severe
coalesce_acked_from_zero 10+1 entries: No change in performance detected.
       time:   [105.18 ns 105.27 ns 105.46 ns]
       change: [-0.6573% -0.3143% +0.0099%] (p = 0.07 > 0.05)

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

coalesce_acked_from_zero 1000+1 entries: :broken_heart: Performance has regressed.
       time:   [93.294 ns 93.915 ns 94.575 ns]
       change: [+1.9528% +2.8722% +3.7806%] (p = 0.00 Found 9 outliers among 100 measurements (9.00%)
6 (6.00%) high mild
3 (3.00%) high severe
RxStreamOrderer::inbound_frame(): :green_heart: Performance has improved.
       time:   [108.26 ms 108.44 ms 108.73 ms]
       change: [-1.5421% -1.3550% -1.0943%] (p = 0.00 Found 34 outliers among 100 measurements (34.00%)
10 (10.00%) low severe
2 (2.00%) low mild
7 (7.00%) high mild
15 (15.00%) high severe
sent::Packets::take_ranges: No change in performance detected.
       time:   [4.5027 µs 4.6017 µs 4.6906 µs]
       change: [-4.0171% -0.1738% +3.5499%] (p = 0.93 > 0.05)

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

transfer/pacing-false/varying-seeds/wallclock-time/run: Change within noise threshold.
       time:   [24.684 ms 24.724 ms 24.764 ms]
       change: [-1.5500% -1.3450% -1.1386%] (p = 0.00 Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) low mild
3 (3.00%) high mild
transfer/pacing-false/varying-seeds/simulated-time/run: No change in performance detected.
       time:   [25.169 s 25.199 s 25.230 s]
       thrpt:  [162.35 KiB/s 162.54 KiB/s 162.74 KiB/s]
change:
       time:   [-0.2141% -0.0173% +0.1781%] (p = 0.86 > 0.05)
       thrpt:  [-0.1777% +0.0173% +0.2146%]

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

transfer/pacing-true/varying-seeds/wallclock-time/run: Change within noise threshold.
       time:   [25.366 ms 25.427 ms 25.487 ms]
       change: [-0.7550% -0.4438% -0.1314%] (p = 0.01 
transfer/pacing-true/varying-seeds/simulated-time/run: No change in performance detected.
       time:   [24.907 s 24.948 s 24.989 s]
       thrpt:  [163.91 KiB/s 164.18 KiB/s 164.45 KiB/s]
change:
       time:   [-0.3044% -0.0726% +0.1552%] (p = 0.52 > 0.05)
       thrpt:  [-0.1550% +0.0727% +0.3054%]
transfer/pacing-false/same-seed/wallclock-time/run: Change within noise threshold.
       time:   [24.359 ms 24.375 ms 24.390 ms]
       change: [-1.4480% -1.3551% -1.2609%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
transfer/pacing-false/same-seed/simulated-time/run: No change in performance detected.
       time:   [25.234 s 25.234 s 25.234 s]
       thrpt:  [162.32 KiB/s 162.32 KiB/s 162.32 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:   [25.133 ms 25.167 ms 25.218 ms]
       change: [-2.6919% -2.5025% -2.2784%] (p = 0.00 Found 5 outliers among 100 measurements (5.00%)
2 (2.00%) low mild
2 (2.00%) high mild
1 (1.00%) high severe
transfer/pacing-true/same-seed/simulated-time/run: No change in performance detected.
       time:   [25.069 s 25.069 s 25.069 s]
       thrpt:  [163.39 KiB/s 163.39 KiB/s 163.39 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.

github-actions[bot] avatar Nov 22 '25 13:11 github-actions[bot]

Client/server transfer results

Performance differences relative to e7be0197e0062929b260cd2384823f511c038703.

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 476.2 ± 3.7 471.7 488.1 67.2 ± 8.6
google vs. neqo (cubic, paced) 281.0 ± 4.3 271.8 295.9 113.9 ± 7.4 :broken_heart: 1.4 0.5%
msquic vs. msquic 193.0 ± 66.3 138.6 498.9 165.8 ± 0.5
msquic vs. neqo (cubic, paced) 225.1 ± 71.6 155.0 449.6 142.2 ± 0.4 3.9 1.8%
neqo vs. google (cubic, paced) 777.4 ± 7.2 718.0 792.3 41.2 ± 4.4 -2.0 -0.3%
neqo vs. msquic (cubic, paced) 156.7 ± 4.2 150.7 165.0 204.3 ± 7.6 0.3 0.2%
neqo vs. neqo (cubic) 94.7 ± 4.0 87.8 104.4 338.0 ± 8.0 -0.5 -0.5%
neqo vs. neqo (cubic, paced) 94.3 ± 4.1 88.3 105.8 339.3 ± 7.8 :green_heart: -1.6 -1.7%
neqo vs. neqo (reno) 95.8 ± 4.3 88.0 106.0 333.9 ± 7.4 -0.1 -0.1%
neqo vs. neqo (reno, paced) 94.8 ± 4.5 87.1 105.7 337.6 ± 7.1 :green_heart: -2.3 -2.4%
neqo vs. quiche (cubic, paced) 193.2 ± 4.6 186.5 202.1 165.7 ± 7.0 0.4 0.2%
neqo vs. s2n (cubic, paced) 222.7 ± 4.7 214.0 231.3 143.7 ± 6.8 :broken_heart: 2.7 1.2%
quiche vs. neqo (cubic, paced) 152.3 ± 5.3 139.4 161.2 210.0 ± 6.0 1.1 0.7%
quiche vs. quiche 143.5 ± 5.4 135.1 158.3 223.0 ± 5.9
s2n vs. neqo (cubic, paced) 174.5 ± 4.7 164.1 188.5 183.4 ± 6.8 0.9 0.5%
s2n vs. s2n 247.3 ± 17.9 233.7 349.9 129.4 ± 1.8

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

github-actions[bot] avatar Nov 22 '25 13:11 github-actions[bot]

I think the sanitizer failure is unrelated, but we should fix or suppress it. It's also happening on other PRs.

larseggert avatar Nov 23 '25 08:11 larseggert