-
Notifications
You must be signed in to change notification settings - Fork 149
chore(transport/fc): add debug_assert to catch underflow #3209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #3209 +/- ##
==========================================
- Coverage 93.49% 93.46% -0.04%
==========================================
Files 125 125
Lines 36674 36677 +3
Branches 36674 36677 +3
==========================================
- Hits 34290 34280 -10
- Misses 1540 1553 +13
Partials 844 844
|
There was a problem hiding this 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 adds a debug assertion to the flow control code to detect unexpected underflow conditions during max_active value updates. The assertion helps diagnose issue #3208 by catching cases where max_active decreases when it shouldn't, providing detailed debug information when the assertion fails.
Key Changes
- Added a
debug_assert!in the flow control update logic to verify thatmax_activenever decreases relative to its previous value - Included comprehensive debug context (self state, timing, RTT, max_window, subject) in the assertion message for troubleshooting
Client/server transfer resultsPerformance differences relative to d070393. Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Table above only shows statistically significant changes. See all results below. All resultsTransfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Download data for |
Failed Interop TestsQUIC Interop Runner, client vs. server, differences relative to d070393.
All resultsSucceeded Interop TestsQUIC Interop Runner, client vs. server neqo-latest as client
neqo-latest as server
Unsupported Interop TestsQUIC Interop Runner, client vs. server neqo-latest as client
neqo-latest as server
|
Benchmark resultsSignificant performance differences relative to d070393. 1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: 💔 Performance has regressed by +2.1036%. time: [285.14 ms 287.22 ms 289.31 ms]
thrpt: [34.564 Kelem/s 34.817 Kelem/s 35.070 Kelem/s]
change:
time: [+1.0892% +2.1036% +3.1037] (p = 0.00 < 0.05)
thrpt: [-3.0103% -2.0603% -1.0775]
Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildAll results1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: No change in performance detected. time: [206.73 ms 207.02 ms 207.32 ms]
thrpt: [482.34 MiB/s 483.04 MiB/s 483.72 MiB/s]
change:
time: [-0.2941% +0.0503% +0.3376] (p = 0.77 > 0.05)
thrpt: [-0.3364% -0.0502% +0.2950]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: 💔 Performance has regressed by +2.1036%. time: [285.14 ms 287.22 ms 289.31 ms]
thrpt: [34.564 Kelem/s 34.817 Kelem/s 35.070 Kelem/s]
change:
time: [+1.0892% +2.1036% +3.1037] (p = 0.00 < 0.05)
thrpt: [-3.0103% -2.0603% -1.0775]
Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mild1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected. time: [38.486 ms 38.642 ms 38.824 ms]
thrpt: [25.757 B/s 25.878 B/s 25.984 B/s]
change:
time: [-1.0187% -0.3679% +0.2949] (p = 0.28 > 0.05)
thrpt: [-0.2940% +0.3692% +1.0291]
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
2 (2.00%) high mild
5 (5.00%) high severe1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: Change within noise threshold. time: [212.24 ms 212.59 ms 212.97 ms]
thrpt: [469.56 MiB/s 470.40 MiB/s 471.16 MiB/s]
change:
time: [+0.7692% +1.1783% +1.5064] (p = 0.00 < 0.05)
thrpt: [-1.4840% -1.1646% -0.7633]
Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high severedecode 4096 bytes, mask ff: No change in performance detected. time: [11.331 µs 11.374 µs 11.422 µs]
change: [-0.7854% -0.2529% +0.2478] (p = 0.36 > 0.05)
No change in performance detected.
Found 16 outliers among 100 measurements (16.00%)
3 (3.00%) low severe
2 (2.00%) low mild
1 (1.00%) high mild
10 (10.00%) high severedecode 1048576 bytes, mask ff: No change in performance detected. time: [2.9955 ms 3.0051 ms 3.0163 ms]
change: [-0.3333% +0.1563% +0.5975] (p = 0.53 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
10 (10.00%) high severedecode 4096 bytes, mask 7f: No change in performance detected. time: [19.580 µs 19.638 µs 19.702 µs]
change: [-0.4748% -0.0716% +0.3323] (p = 0.74 > 0.05)
No change in performance detected.
Found 14 outliers among 100 measurements (14.00%)
3 (3.00%) low mild
1 (1.00%) high mild
10 (10.00%) high severedecode 1048576 bytes, mask 7f: No change in performance detected. time: [5.0319 ms 5.0498 ms 5.0730 ms]
change: [-0.3586% +0.1003% +0.6433] (p = 0.71 > 0.05)
No change in performance detected.
Found 14 outliers among 100 measurements (14.00%)
14 (14.00%) high severedecode 4096 bytes, mask 3f: No change in performance detected. time: [6.2001 µs 6.2209 µs 6.2492 µs]
change: [-0.5434% +0.2025% +0.9851] (p = 0.64 > 0.05)
No change in performance detected.
Found 15 outliers among 100 measurements (15.00%)
5 (5.00%) low mild
4 (4.00%) high mild
6 (6.00%) high severedecode 1048576 bytes, mask 3f: No change in performance detected. time: [1.7582 ms 1.7639 ms 1.7715 ms]
change: [-0.2923% +0.1819% +0.6895] (p = 0.53 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
2 (2.00%) high mild
4 (4.00%) high severe1-streams/each-1000-bytes/wallclock-time: No change in performance detected. time: [583.23 µs 585.50 µs 588.02 µs]
change: [-0.7770% -0.2457% +0.2777] (p = 0.38 > 0.05)
No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
9 (9.00%) high severe1-streams/each-1000-bytes/simulated-time: No change in performance detected. time: [118.79 ms 119.02 ms 119.25 ms]
thrpt: [8.1891 KiB/s 8.2047 KiB/s 8.2208 KiB/s]
change:
time: [-0.3676% -0.1029% +0.1713] (p = 0.46 > 0.05)
thrpt: [-0.1710% +0.1030% +0.3690]
No change in performance detected.1000-streams/each-1-bytes/wallclock-time: No change in performance detected. time: [12.324 ms 12.364 ms 12.403 ms]
change: [-0.6860% -0.2386% +0.1597] (p = 0.28 > 0.05)
No change in performance detected.1000-streams/each-1-bytes/simulated-time: No change in performance detected. time: [2.3254 s 2.3293 s 2.3333 s]
thrpt: [428.58 B/s 429.31 B/s 430.03 B/s]
change:
time: [-0.3250% -0.1207% +0.0844] (p = 0.25 > 0.05)
thrpt: [-0.0844% +0.1209% +0.3261]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild1000-streams/each-1000-bytes/wallclock-time: Change within noise threshold. time: [49.651 ms 49.763 ms 49.877 ms]
change: [-0.7194% -0.4011% -0.0709] (p = 0.02 < 0.05)
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild1000-streams/each-1000-bytes/simulated-time: No change in performance detected. time: [16.267 s 16.516 s 16.768 s]
thrpt: [58.240 KiB/s 59.127 KiB/s 60.035 KiB/s]
change:
time: [-1.8918% +0.2367% +2.5106] (p = 0.83 > 0.05)
thrpt: [-2.4491% -0.2361% +1.9283]
No change in performance detected.coalesce_acked_from_zero 1+1 entries: No change in performance detected. time: [89.095 ns 89.375 ns 89.664 ns]
change: [-0.4092% +0.0384% +0.4978] (p = 0.86 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
7 (7.00%) high mild
3 (3.00%) high severecoalesce_acked_from_zero 3+1 entries: No change in performance detected. time: [105.78 ns 106.07 ns 106.39 ns]
change: [-0.4078% -0.0084% +0.3758] (p = 0.97 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
10 (10.00%) high severecoalesce_acked_from_zero 10+1 entries: No change in performance detected. time: [105.44 ns 106.06 ns 106.93 ns]
change: [+0.1770% +1.2525% +2.8566] (p = 0.05 > 0.05)
No change in performance detected.
Found 13 outliers among 100 measurements (13.00%)
2 (2.00%) low severe
2 (2.00%) low mild
9 (9.00%) high severecoalesce_acked_from_zero 1000+1 entries: No change in performance detected. time: [91.230 ns 91.333 ns 91.455 ns]
change: [-0.7059% -0.1313% +0.4484] (p = 0.67 > 0.05)
No change in performance detected.
Found 16 outliers among 100 measurements (16.00%)
5 (5.00%) high mild
11 (11.00%) high severeRxStreamOrderer::inbound_frame(): No change in performance detected. time: [109.32 ms 109.52 ms 109.84 ms]
change: [-0.6058% -0.2860% +0.0205] (p = 0.07 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
2 (2.00%) low mild
1 (1.00%) high mild
3 (3.00%) high severesent::Packets::take_ranges: No change in performance detected. time: [4.3984 µs 4.4841 µs 4.5564 µs]
change: [-3.2373% -0.3348% +2.8364] (p = 0.83 > 0.05)
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/pacing-false/varying-seeds/wallclock-time/run: Change within noise threshold. time: [25.034 ms 25.070 ms 25.107 ms]
change: [-1.2690% -1.0488% -0.8379] (p = 0.00 < 0.05)
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/pacing-false/varying-seeds/simulated-time/run: No change in performance detected. time: [25.153 s 25.188 s 25.223 s]
thrpt: [162.39 KiB/s 162.62 KiB/s 162.84 KiB/s]
change:
time: [-0.1276% +0.0627% +0.2657] (p = 0.53 > 0.05)
thrpt: [-0.2650% -0.0626% +0.1277]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/pacing-true/varying-seeds/wallclock-time/run: Change within noise threshold. time: [25.474 ms 25.513 ms 25.556 ms]
change: [-0.6246% -0.3942% -0.1761] (p = 0.00 < 0.05)
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/pacing-true/varying-seeds/simulated-time/run: Change within noise threshold. time: [24.886 s 24.924 s 24.961 s]
thrpt: [164.10 KiB/s 164.34 KiB/s 164.59 KiB/s]
change:
time: [+0.0271% +0.2288% +0.4403] (p = 0.03 < 0.05)
thrpt: [-0.4383% -0.2283% -0.0271]
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/pacing-false/same-seed/wallclock-time/run: Change within noise threshold. time: [24.915 ms 24.982 ms 25.049 ms]
change: [-0.6906% -0.3720% -0.0602] (p = 0.02 < 0.05)
Change within noise threshold.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]
No change in performance detected.transfer/pacing-true/same-seed/wallclock-time/run: Change within noise threshold. time: [25.706 ms 25.735 ms 25.778 ms]
change: [+0.6641% +0.9201% +1.1566] (p = 0.00 < 0.05)
Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severetransfer/pacing-true/same-seed/simulated-time/run: No change in performance detected. time: [25.207 s 25.207 s 25.207 s]
thrpt: [162.50 KiB/s 162.50 KiB/s 162.50 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 |
If I only knew how to hit it, I wouldn't need the @larseggert would you mind merging manually? I don't have the permissions. |
Needed for #3208.