fix: handle network changes in multipath#383
Conversation
Performance Comparison Report
|
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5303.4 Mbps | 7897.0 Mbps | -32.8% | 92.6% / 97.5% |
| medium-concurrent | 5546.9 Mbps | 7903.1 Mbps | -29.8% | 96.9% / 122.0% |
| medium-single | 4040.9 Mbps | 4476.5 Mbps | -9.7% | 94.8% / 122.0% |
| small-concurrent | 3637.2 Mbps | 5182.3 Mbps | -29.8% | 92.6% / 100.0% |
| small-single | 3494.8 Mbps | 4690.7 Mbps | -25.5% | 95.4% / 126.0% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 2911.9 Mbps | 3643.4 Mbps | -20.1% |
| lan | 768.9 Mbps | 796.4 Mbps | -3.4% |
| lossy | 69.8 Mbps | 69.8 Mbps | ~0% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 25.6% slower on average
21c45f304150b4893695759731af69bbb9608a07 - artifacts
No results available
284690ed7799ab3c9c5defe17d4d9caf810475c8 - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5338.1 Mbps | 7713.4 Mbps | -30.8% | 91.9% / 97.2% |
| medium-concurrent | 5255.7 Mbps | 7606.4 Mbps | -30.9% | 92.9% / 97.6% |
| medium-single | 4071.3 Mbps | 4189.9 Mbps | -2.8% | 95.6% / 112.0% |
| small-concurrent | 3681.2 Mbps | 5120.1 Mbps | -28.1% | 97.5% / 116.0% |
| small-single | 3341.3 Mbps | 4408.4 Mbps | -24.2% | 91.4% / 99.0% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 2992.8 Mbps | 3687.6 Mbps | -18.8% |
| lan | 782.4 Mbps | 796.4 Mbps | -1.8% |
| lossy | 69.8 Mbps | 55.9 Mbps | +24.9% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 23.9% slower on average
2a4ec09a13dee967107f307fea859c547fee5b4f - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5291.7 Mbps | 7835.9 Mbps | -32.5% | 93.7% / 98.3% |
| medium-concurrent | 5386.5 Mbps | 7661.3 Mbps | -29.7% | 98.3% / 177.0% |
| medium-single | 3813.7 Mbps | 4100.7 Mbps | -7.0% | 87.1% / 96.5% |
| small-concurrent | 3791.6 Mbps | 5061.0 Mbps | -25.1% | 96.3% / 128.0% |
| small-single | 3475.0 Mbps | 4377.8 Mbps | -20.6% | 96.9% / 126.0% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 2835.6 Mbps | 3939.1 Mbps | -28.0% |
| lan | 768.4 Mbps | 801.7 Mbps | -4.2% |
| lossy | 69.8 Mbps | 55.9 Mbps | +25.0% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 24.8% slower on average
dd78fc69458144461b072070ed8ef5f1f47019b1 - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5309.8 Mbps | 8012.5 Mbps | -33.7% | 90.3% / 97.0% |
| medium-concurrent | 5346.0 Mbps | 7665.7 Mbps | -30.3% | 99.0% / 189.0% |
| medium-single | 3548.0 Mbps | 4748.6 Mbps | -25.3% | 85.7% / 95.6% |
| small-concurrent | 3736.5 Mbps | 5392.5 Mbps | -30.7% | 88.0% / 97.8% |
| small-single | 3363.4 Mbps | 4733.5 Mbps | -28.9% | 97.1% / 133.0% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 3006.7 Mbps | N/A | N/A |
| lan | 782.4 Mbps | N/A | N/A |
| lossy | 69.8 Mbps | N/A | N/A |
| wan | 83.8 Mbps | N/A | N/A |
Summary
iroh-quinn is 30.3% slower on average
1a4f55324b3e2da13c940ff5ca01f0dbf3227258 - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5345.3 Mbps | 7940.6 Mbps | -32.7% | 97.1% / 149.0% |
| medium-concurrent | 5428.9 Mbps | 7919.1 Mbps | -31.4% | 96.5% / 149.0% |
| medium-single | 4261.3 Mbps | 4749.7 Mbps | -10.3% | 91.9% / 101.0% |
| small-concurrent | 3872.7 Mbps | 4920.5 Mbps | -21.3% | 95.1% / 103.0% |
| small-single | 3516.8 Mbps | 4799.7 Mbps | -26.7% | 97.6% / 153.0% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | N/A | 3701.8 Mbps | N/A |
| lan | N/A | 796.5 Mbps | N/A |
| lossy | N/A | 58.8 Mbps | N/A |
| wan | N/A | 83.8 Mbps | N/A |
Summary
iroh-quinn is 26.1% slower on average
1e9e567583f5e924185ab6a0d67174147636f197 - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5385.5 Mbps | 7732.1 Mbps | -30.3% | 96.3% / 98.2% |
| medium-concurrent | 5134.5 Mbps | 7460.9 Mbps | -31.2% | 95.0% / 97.0% |
| medium-single | 4089.1 Mbps | 4072.2 Mbps | ~0% | 96.2% / 98.4% |
| small-concurrent | 3585.0 Mbps | 5098.4 Mbps | -29.7% | 94.9% / 97.3% |
| small-single | 3453.1 Mbps | 4431.5 Mbps | -22.1% | 96.9% / 98.7% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 2835.5 Mbps | 4057.9 Mbps | -30.1% |
| lan | 782.5 Mbps | 810.4 Mbps | -3.4% |
| lossy | 69.9 Mbps | 69.9 Mbps | ~0% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 24.8% slower on average
218441309342d61fa655f0c6929ced7804e317d1 - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5440.6 Mbps | 7898.7 Mbps | -31.1% | 95.7% / 101.0% |
| medium-concurrent | 5424.5 Mbps | 7890.6 Mbps | -31.3% | 94.7% / 101.0% |
| medium-single | 4086.1 Mbps | 4742.2 Mbps | -13.8% | 99.1% / 153.0% |
| small-concurrent | 3668.4 Mbps | 5246.6 Mbps | -30.1% | 90.8% / 98.8% |
| small-single | 3564.5 Mbps | 4797.3 Mbps | -25.7% | 95.2% / 104.0% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 2835.3 Mbps | 3882.9 Mbps | -27.0% |
| lan | 772.2 Mbps | 796.4 Mbps | -3.0% |
| lossy | 69.9 Mbps | 55.9 Mbps | +25.0% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 26.7% slower on average
adb3c993738d022cb12ecf667fbfb539dc619aa3 - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5601.9 Mbps | 7652.7 Mbps | -26.8% | 96.8% / 98.5% |
| medium-concurrent | 5343.5 Mbps | 7874.9 Mbps | -32.1% | 95.6% / 97.6% |
| medium-single | 3833.8 Mbps | 4652.4 Mbps | -17.6% | 95.2% / 97.7% |
| small-concurrent | 3592.7 Mbps | 5236.1 Mbps | -31.4% | 95.2% / 99.3% |
| small-single | 3536.2 Mbps | 4779.8 Mbps | -26.0% | 95.5% / 97.9% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 3042.7 Mbps | 3701.5 Mbps | -17.8% |
| lan | 782.4 Mbps | 796.4 Mbps | -1.8% |
| lossy | 69.9 Mbps | 63.5 Mbps | +9.9% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 25.7% slower on average
c456958584d19f87849daca43d719131f6fcfebe - artifacts
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | N/A | 3687.7 Mbps | N/A |
e84b1821ea761aa5cd9153b28c075a4a77d0f45e - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5911.2 Mbps | 8028.6 Mbps | -26.4% | 96.4% / 98.2% |
| medium-concurrent | 5669.7 Mbps | 7669.1 Mbps | -26.1% | 96.3% / 98.0% |
| medium-single | 4228.0 Mbps | 4623.5 Mbps | -8.6% | 96.4% / 98.1% |
| small-concurrent | 3681.1 Mbps | 5097.3 Mbps | -27.8% | 96.0% / 100.0% |
| small-single | 3581.8 Mbps | 4669.5 Mbps | -23.3% | 96.9% / 99.3% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 2779.1 Mbps | 4136.3 Mbps | -32.8% |
| lan | 774.8 Mbps | 810.4 Mbps | -4.4% |
| lossy | 69.8 Mbps | 55.9 Mbps | +25.0% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 23.9% slower on average
eb650b604b67d2492e015799d58ba16b3eb44d39 - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 6000.0 Mbps | 7897.6 Mbps | -24.0% | 97.4% / 98.7% |
| medium-concurrent | 5540.2 Mbps | 7969.0 Mbps | -30.5% | 95.3% / 97.2% |
| medium-single | 4024.2 Mbps | 4712.3 Mbps | -14.6% | 95.8% / 98.2% |
| small-concurrent | 3647.1 Mbps | 5168.7 Mbps | -29.4% | 95.1% / 97.6% |
| small-single | 3547.3 Mbps | 4693.2 Mbps | -24.4% | 96.0% / 98.4% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 2849.0 Mbps | 4104.7 Mbps | -30.6% |
| lan | 771.3 Mbps | 810.3 Mbps | -4.8% |
| lossy | 69.9 Mbps | 69.8 Mbps | ~0% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 25.3% slower on average
4be21998c085b16dec8ec9fd5830bd0cda45e9a0 - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5571.6 Mbps | 7873.6 Mbps | -29.2% | 96.0% / 150.0% |
| medium-concurrent | 5516.2 Mbps | 7864.8 Mbps | -29.9% | 96.3% / 151.0% |
| medium-single | 4124.2 Mbps | 4749.0 Mbps | -13.2% | 90.8% / 100.0% |
| small-concurrent | 3778.8 Mbps | 5026.7 Mbps | -24.8% | 95.3% / 104.0% |
| small-single | 3494.0 Mbps | 4760.8 Mbps | -26.6% | 97.9% / 154.0% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 2898.5 Mbps | 4078.6 Mbps | -28.9% |
| lan | 772.2 Mbps | 810.3 Mbps | -4.7% |
| lossy | 69.9 Mbps | 55.9 Mbps | +25.1% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 25.5% slower on average
424fc3668bf4865ef8d6b439dff43eac2e04212d - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5481.2 Mbps | 7795.3 Mbps | -29.7% | 96.1% / 104.0% |
| medium-concurrent | 5334.3 Mbps | 7139.6 Mbps | -25.3% | 95.7% / 104.0% |
| medium-single | 4149.2 Mbps | 4155.5 Mbps | ~0% | 98.9% / 155.0% |
| small-concurrent | 3842.4 Mbps | 5028.5 Mbps | -23.6% | 92.9% / 107.0% |
| small-single | 3475.4 Mbps | 4358.4 Mbps | -20.3% | 95.7% / 105.0% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | N/A | 4080.5 Mbps | N/A |
| lan | N/A | 810.3 Mbps | N/A |
| lossy | N/A | 55.9 Mbps | N/A |
| wan | N/A | 83.8 Mbps | N/A |
Summary
iroh-quinn is 21.8% slower on average
4c4996d46e85b24c4b94439021785bf1bf09191a - artifacts
Raw Benchmarks (localhost)
| Scenario | iroh-quinn | upstream | Delta | CPU (avg/max) |
|---|---|---|---|---|
| large-single | 5583.5 Mbps | 7786.0 Mbps | -28.3% | 96.8% / 98.3% |
| medium-concurrent | 5479.7 Mbps | 7888.2 Mbps | -30.5% | 95.2% / 97.0% |
| medium-single | 4346.6 Mbps | 4602.9 Mbps | -5.6% | 96.8% / 99.2% |
| small-concurrent | 3634.1 Mbps | 5164.7 Mbps | -29.6% | 96.1% / 98.7% |
| small-single | 3477.6 Mbps | 4707.4 Mbps | -26.1% | 98.5% / 100.0% |
Netsim Benchmarks (network simulation)
| Condition | iroh-quinn | upstream | Delta |
|---|---|---|---|
| ideal | 2855.5 Mbps | 3705.1 Mbps | -22.9% |
| lan | 782.4 Mbps | 796.5 Mbps | -1.8% |
| lossy | 69.8 Mbps | 55.9 Mbps | +25.0% |
| wan | 83.8 Mbps | 83.8 Mbps | ~0% |
Summary
iroh-quinn is 24.4% slower on average
|
Documentation for this PR has been generated and is available at: https://n0-computer.github.io/quinn/pr/383/docs/iroh_quinn/ Last updated: 2026-02-10T18:48:32Z |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #383 +/- ##
==========================================
- Coverage 77.24% 77.03% -0.22%
==========================================
Files 81 81
Lines 23142 23228 +86
==========================================
+ Hits 17877 17893 +16
- Misses 5265 5335 +70 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
flub
left a comment
There was a problem hiding this comment.
I know it's still in draft, but you said you were only really working on tests so I already had a look at the non-test code... hope that's helpful.
flub
left a comment
There was a problem hiding this comment.
Thanks, I think this all makes sense. The wording of the comments is better now as well.
Description
Adds proto an quinn level apis for dealing with netwokr changes.
Adds
Connection::handle_network_change(hint, now)to let applications signalthat the underlying network has changed.
Behavior:
migration) This might require more love but RFC9000 migrations are out of
scope for this PR
non-recoverable. In multipath the standard behaviour is to consider paths non
recoverable and move then to new
PathIds. The optionalNetworkChangeHintgives special treatment to paths that survive the network change so that
these retain the RFC9000 migration behaviour.
addresses in theory and should not migrate).
scratch.
Public API:
NetworkChangeHintConnection::handle_network_changeat proto level is added.Endpoint::handle_network_changeis added in quinn. This just broadcasts toall connections using the above.
Also includes:
some pending discussions but seemed the best choice right now.
Breaking Changes
in
proto::Connectionlocal_address_changedis gone, and it's replaced withhandle_network_change.Notes & open questions
n/a