Skip to content

refactor: split poll_transmit into per-path and per-space parts#338

Merged
divagant-martian merged 35 commits intomainfrom
flub/poll-transmit-ohno
Jan 26, 2026
Merged

refactor: split poll_transmit into per-path and per-space parts#338
divagant-martian merged 35 commits intomainfrom
flub/poll-transmit-ohno

Conversation

@flub
Copy link
Collaborator

@flub flub commented Jan 17, 2026

Description

This starts to pull the poll_transmit loop apart. Makes it easier to make/follow decisions on some levels. There is now a clean separation between paths and on and off-path packet building.

Surfaces some pre-existing bugs. This PR is not the time to fix them.

Closes #170

Breaking Changes

n/a

Notes & open questions

Follow up work:

@n0bot n0bot bot added this to iroh Jan 17, 2026
@github-project-automation github-project-automation bot moved this to 🏗 In progress in iroh Jan 17, 2026
@github-actions
Copy link

github-actions bot commented Jan 18, 2026

Documentation for this PR has been generated and is available at: https://n0-computer.github.io/quinn/pr/338/docs/iroh_quinn/

Last updated: 2026-01-26T14:04:13Z

@codecov-commenter
Copy link

codecov-commenter commented Jan 18, 2026

Codecov Report

❌ Patch coverage is 94.28571% with 16 lines in your changes missing coverage. Please review.
✅ Project coverage is 76.76%. Comparing base (e424c7f) to head (4570684).
⚠️ Report is 3 commits behind head on main.

Files with missing lines Patch % Lines
quinn-proto/src/connection/mod.rs 94.20% 16 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #338      +/-   ##
==========================================
- Coverage   76.90%   76.76%   -0.15%     
==========================================
  Files          81       81              
  Lines       22828    22907      +79     
==========================================
+ Hits        17557    17584      +27     
- Misses       5271     5323      +52     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions
Copy link

github-actions bot commented Jan 18, 2026

Performance Comparison Report

e82043fa8a4eab55cbd871a9b0f6e85e1602185d - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single N/A 7572.8 Mbps N/A N/A
medium-concurrent N/A 7581.3 Mbps N/A N/A
medium-single N/A 4236.9 Mbps N/A N/A
small-concurrent N/A 4866.5 Mbps N/A N/A
small-single N/A 4185.0 Mbps N/A N/A

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 1410.1 Mbps 3533.5 Mbps -60.1%
lan 684.6 Mbps 796.5 Mbps -14.0%
lossy 69.8 Mbps 69.8 Mbps ~0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 49.9% slower on average

---
fa271d48a7db763d53f83661443623bca5f14e4c - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5347.4 Mbps 7544.7 Mbps -29.1% 97.2% / 162.0%
medium-concurrent 5388.5 Mbps 6931.3 Mbps -22.3% 95.4% / 111.0%
medium-single 3919.9 Mbps 5279.0 Mbps -25.7% 92.5% / 111.0%
small-concurrent 3808.9 Mbps 5014.7 Mbps -24.0% 95.3% / 114.0%
small-single 3358.5 Mbps 4299.9 Mbps -21.9% 91.0% / 98.4%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2833.2 Mbps 3881.2 Mbps -27.0%
lan 768.5 Mbps 799.7 Mbps -3.9%
lossy 69.8 Mbps 55.9 Mbps +25.0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 24.5% slower on average

---
f7301a8764a12ae5c7c8cf219b2a6d34147b88c4 - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5325.4 Mbps 7789.2 Mbps -31.6% 93.4% / 98.1%
medium-concurrent 5353.5 Mbps 7712.4 Mbps -30.6% 95.7% / 111.0%
medium-single 3713.1 Mbps 4575.2 Mbps -18.8% 93.6% / 110.0%
small-concurrent 3854.3 Mbps 5189.3 Mbps -25.7% 96.7% / 113.0%
small-single 3260.3 Mbps 4659.6 Mbps -30.0% 89.1% / 96.9%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2891.1 Mbps 3605.2 Mbps -19.8%
lan 768.5 Mbps 796.4 Mbps -3.5%
lossy 69.8 Mbps 55.9 Mbps +25.0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 26.5% slower on average

---
33b9d34acbfa3140f089a1ed8c919bb52bf77025 - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5362.5 Mbps N/A N/A 94.3% / 117.0%
medium-concurrent 5511.3 Mbps N/A N/A 92.9% / 97.7%
medium-single 4041.8 Mbps N/A N/A 90.2% / 97.3%
small-concurrent 3856.8 Mbps N/A N/A 102.3% / 179.0%
small-single 3481.0 Mbps N/A N/A 89.8% / 97.3%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2793.2 Mbps 3561.8 Mbps -21.6%
lan 777.3 Mbps 796.5 Mbps -2.4%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 17.7% slower on average

---
6d461ef36fa45ae09cb79753ce2f700e3131728b - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5393.5 Mbps 7142.6 Mbps -24.5% 95.5% / 118.0%
medium-concurrent 5356.0 Mbps 6824.3 Mbps -21.5% 88.9% / 95.8%
medium-single 4049.3 Mbps 4177.6 Mbps -3.1% 88.7% / 96.8%
small-concurrent 3668.1 Mbps 4874.8 Mbps -24.8% 87.9% / 97.9%
small-single 3327.1 Mbps 4076.9 Mbps -18.4% 90.2% / 97.4%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2891.4 Mbps 3868.9 Mbps -25.3%
lan 782.4 Mbps 796.4 Mbps -1.8%
lossy 69.8 Mbps 69.8 Mbps ~0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 19.7% slower on average

---
b12e786e96eb0d5b32df972572c78b180ae9c65b - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5421.9 Mbps 8006.5 Mbps -32.3% 94.6% / 111.0%
medium-concurrent 5320.5 Mbps 7898.4 Mbps -32.6% 91.9% / 96.9%
medium-single 4140.8 Mbps 4470.4 Mbps -7.4% 95.9% / 112.0%
small-concurrent 3724.7 Mbps 5100.7 Mbps -27.0% 88.8% / 98.1%
small-single 3307.7 Mbps 4654.8 Mbps -28.9% 95.5% / 114.0%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2849.2 Mbps 3897.3 Mbps -26.9%
lan 769.7 Mbps 810.3 Mbps -5.0%
lossy 69.9 Mbps 69.8 Mbps ~0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 26.6% slower on average

---
7af282faafdbc1008e0c17f9a7a885d39e3f654c - artifacts

No results available

---
ff91de9c3029db16ce6f1e3f5f45260442b4e29d - artifacts

No results available

---
08751b8ea7c96c36fa3264d12e8bcfbab085e36f - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5293.7 Mbps 7600.8 Mbps -30.4% 92.5% / 97.2%
medium-concurrent 5433.5 Mbps 7243.1 Mbps -25.0% 93.9% / 117.0%
medium-single 3800.9 Mbps 4146.4 Mbps -8.3% 88.1% / 96.3%
small-concurrent 3829.3 Mbps 5112.1 Mbps -25.1% 94.7% / 121.0%
small-single 3492.2 Mbps 4391.6 Mbps -20.5% 87.0% / 95.7%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2852.7 Mbps 3659.8 Mbps -22.1%
lan 782.5 Mbps 796.4 Mbps -1.7%
lossy 69.8 Mbps 55.9 Mbps +25.0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 22.5% slower on average

---
ae89bc51d1d9faf2861d10bd98f049eb5396a2e3 - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5516.6 Mbps 7908.4 Mbps -30.2% 95.8% / 119.0%
medium-concurrent 5501.6 Mbps 7577.7 Mbps -27.4% 91.6% / 97.0%
medium-single 4120.1 Mbps 4404.0 Mbps -6.4% 92.0% / 100.0%
small-concurrent 3792.4 Mbps 5058.6 Mbps -25.0% 89.1% / 98.1%
small-single 3474.5 Mbps 4518.0 Mbps -23.1% 90.9% / 98.2%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2820.3 Mbps 3603.8 Mbps -21.7%
lan 782.5 Mbps 796.4 Mbps -1.7%
lossy 69.8 Mbps 69.8 Mbps ~0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 23.1% slower on average

---
b8238c46cd46b0c893a5500539233b52ab491851 - artifacts

No results available

---
3c9d82ca94f623d2a6038f36ea801aca87f8088c - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5307.7 Mbps 7943.2 Mbps -33.2% 90.3% / 96.8%
medium-concurrent 5460.3 Mbps 7679.4 Mbps -28.9% 91.7% / 97.0%
medium-single 3846.9 Mbps 4470.6 Mbps -13.9% 93.3% / 116.0%
small-concurrent 3788.7 Mbps 5109.0 Mbps -25.8% 91.2% / 99.0%
small-single 3480.4 Mbps 4685.3 Mbps -25.7% 93.8% / 120.0%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2897.8 Mbps 3611.2 Mbps -19.8%
lan 782.5 Mbps 796.5 Mbps -1.8%
lossy 69.9 Mbps 55.9 Mbps +25.0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 25.3% slower on average

---
e81119cdfa80b4a063d325b36835352b7b16dac2 - artifacts

No results available

---
54ffa24b6f636f5ef8e52d2af27a38746a23fbf5 - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5403.6 Mbps 7329.1 Mbps -26.3% 94.4% / 111.0%
medium-concurrent 5419.4 Mbps 6842.9 Mbps -20.8% 94.4% / 109.0%
medium-single 3709.3 Mbps 3911.2 Mbps -5.2% 98.6% / 163.0%
small-concurrent 3758.8 Mbps 5004.7 Mbps -24.9% 92.0% / 99.5%
small-single 3357.4 Mbps 4293.9 Mbps -21.8% 95.1% / 114.0%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2864.8 Mbps 3954.8 Mbps -27.6%
lan 782.3 Mbps 807.0 Mbps -3.1%
lossy 69.8 Mbps 55.9 Mbps +25.0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 21.2% slower on average

---
70f27512fa4c8098dc3dadfe2c7c0bb7b55bac15 - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5330.9 Mbps 7473.5 Mbps -28.7% 97.3% / 119.0%
medium-concurrent 5391.8 Mbps 6749.8 Mbps -20.1% 96.8% / 122.0%
medium-single 3572.7 Mbps 3914.6 Mbps -8.7% 91.2% / 98.4%
small-concurrent 3701.1 Mbps 4941.1 Mbps -25.1% 96.7% / 122.0%
small-single 3488.8 Mbps 4324.1 Mbps -19.3% 91.0% / 98.1%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 3058.8 Mbps 3577.0 Mbps -14.5%
lan 782.4 Mbps 796.5 Mbps -1.8%
lossy 69.8 Mbps 55.9 Mbps +24.9%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 20.2% slower on average

---
c8720bc1861ed3210cb096e8a1452169dbca9b36 - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5407.5 Mbps 7867.4 Mbps -31.3% 94.7% / 108.0%
medium-concurrent 5416.3 Mbps 7635.7 Mbps -29.1% 93.1% / 98.0%
medium-single 3532.2 Mbps 4554.3 Mbps -22.4% 92.4% / 109.0%
small-concurrent 3698.6 Mbps 5201.1 Mbps -28.9% 91.4% / 99.1%
small-single 3303.1 Mbps 4738.2 Mbps -30.3% 88.3% / 97.2%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2891.0 Mbps 3687.0 Mbps -21.6%
lan 782.4 Mbps 796.4 Mbps -1.8%
lossy 69.8 Mbps 55.9 Mbps +25.0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 27.3% slower on average

---
45706842d3eac39b8140dc22f298f13e03c9e0b1 - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5409.2 Mbps N/A N/A 93.5% / 98.1%
medium-concurrent 5457.0 Mbps N/A N/A 91.5% / 97.2%
medium-single 3782.0 Mbps N/A N/A 91.4% / 100.0%
small-concurrent 3668.6 Mbps N/A N/A 101.5% / 182.0%
small-single 3379.8 Mbps N/A N/A 94.9% / 122.0%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2975.1 Mbps N/A N/A
lan 782.5 Mbps N/A N/A
---
ce19b48e1bf39d6baab714112d4f78db74bf5597 - artifacts

Raw Benchmarks (localhost)

Scenario iroh-quinn upstream Delta CPU (avg/max)
large-single 5263.4 Mbps 7893.8 Mbps -33.3% 93.7% / 98.2%
medium-concurrent 5465.4 Mbps 8050.9 Mbps -32.1% 92.0% / 97.4%
medium-single 3803.1 Mbps 4749.0 Mbps -19.9% 94.2% / 121.0%
small-concurrent 3725.8 Mbps 5341.2 Mbps -30.2% 97.8% / 121.0%
small-single 3477.0 Mbps 4830.9 Mbps -28.0% 93.7% / 120.0%

Netsim Benchmarks (network simulation)

Condition iroh-quinn upstream Delta
ideal 2868.7 Mbps 3723.8 Mbps -23.0%
lan 769.4 Mbps 796.5 Mbps -3.4%
lossy 55.9 Mbps 55.9 Mbps ~0%
wan 83.8 Mbps 83.8 Mbps ~0%

Summary

iroh-quinn is 28.2% slower on average

@flub flub marked this pull request as ready for review January 18, 2026 16:37
@matheus23
Copy link
Member

matheus23 commented Jan 19, 2026

Should we merge #339 before doing all of the poll transmit refactors? It might help with all of the Send vs. SendTransmit hacks.

flub added a commit that referenced this pull request Jan 21, 2026
And collecting some functions together. Split off from #338.
github-merge-queue bot pushed a commit that referenced this pull request Jan 21, 2026
And collecting some functions together. Split off from #338.

Co-authored-by: Diva Martínez <26765164+divagant-martian@users.noreply.github.com>
@flub flub linked an issue Jan 23, 2026 that may be closed by this pull request
@dignifiedquire
Copy link
Contributor

once this merges, we should create issues for the todos, to keep track of them

}

/// poll_transmit logic for off-path data.
fn poll_transmit_off_path(
Copy link
Contributor

Choose a reason for hiding this comment

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

these method names make me happy

@flub flub self-assigned this Jan 26, 2026
@flub flub added the refactor label Jan 26, 2026
@flub flub added this to the quinn: iroh v0.96 milestone Jan 26, 2026
Copy link
Collaborator

@divagant-martian divagant-martian left a comment

Choose a reason for hiding this comment

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

🐸

@divagant-martian divagant-martian added this pull request to the merge queue Jan 26, 2026
Merged via the queue into main with commit 2cc515a Jan 26, 2026
59 checks passed
@github-project-automation github-project-automation bot moved this from 🏗 In progress to ✅ Done in iroh Jan 26, 2026
@divagant-martian divagant-martian deleted the flub/poll-transmit-ohno branch January 26, 2026 15:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: ✅ Done

Development

Successfully merging this pull request may close these issues.

Improve poll_transmit loop logic

6 participants