Skip to content

add metric for spurious congestion events - #2549

Merged
Ralith merged 1 commit into
quinn-rs:mainfrom
stormshield-fabs:add-spurious-congestion-events-metric
Feb 28, 2026
Merged

add metric for spurious congestion events#2549
Ralith merged 1 commit into
quinn-rs:mainfrom
stormshield-fabs:add-spurious-congestion-events-metric

Conversation

@stormshield-fabs

Copy link
Copy Markdown
Contributor

This is inspired by recent work seen on neqo: we would like to track spurious congestion events through telemetry to understand the congestion controller behavior at scale.

@djc djc left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do you want to backport this to 0.11.x?

@stormshield-fabs

Copy link
Copy Markdown
Contributor Author

We're already using the unreleased 0.12 so I don't need a backport, but I can open a similar PR targeting 0.11 if you want me to.

@djc

djc commented Feb 27, 2026

Copy link
Copy Markdown
Member

We're already using the unreleased 0.12 so I don't need a backport, but I can open a similar PR targeting 0.11 if you want me to.

Nope, no need to for me.

@Ralith
Ralith added this pull request to the merge queue Feb 28, 2026
Merged via the queue into quinn-rs:main with commit 459c347 Feb 28, 2026
19 checks passed
dignifiedquire added a commit to n0-computer/noq that referenced this pull request Apr 22, 2026
Synced up to
quinn-rs/quinn@07ce61c

Closes #602 

### Commits applied in this PR

| upstream SHA | PR | subject | noq commit |
|---|---|---|---|
| 06f7f7d | [#2611](quinn-rs/quinn#2611) |
Take boxed connection ID generator factories | `167c709c7` |
| 404db1b | [#2495](quinn-rs/quinn#2495) |
Move the ref counts out | `e6772ea9f` (bundled) |
| 4b7a039 | [#2495](quinn-rs/quinn#2495) | Fix
the (pre-existing) rightward drift by inverting conditions | `e6772ea9f`
(bundled) |
| 475b55b | [#2495](quinn-rs/quinn#2495) |
Early return in `RecvStream::drop()` | `e6772ea9f` (bundled) |
| 803c814 | [#2541](quinn-rs/quinn#2541) |
Remove `RecvStream`s from `blocked_readers` on `stop` | `e6772ea9f`
(bundled) |
| 37625fe | [#2609](quinn-rs/quinn#2609) |
quinn: fix ref count logic for ConnectionRef and EndpointRef |
`e6772ea9f` (bundled) |
| 07ce61c | [#2612](quinn-rs/quinn#2612) |
Test cleanup of connections/endpoints when all references are dropped |
`e6772ea9f` (bundled) |
| 42de9dd | [#2469](quinn-rs/quinn#2469) |
refactor(quinn-udp): extract `decode_socket_addr` helper | `2e4effbe4` |
| 4742a70 | [#2469](quinn-rs/quinn#2469) |
refactor(quinn-udp): extract `ControlMetadata` helper | `6f5904350` |
| 2964782 | [#2472](quinn-rs/quinn#2472) |
refactor(quinn-udp): split fast&slow send/recv paths | `a17058e80` |
| 459c347 | [#2549](quinn-rs/quinn#2549) | add
metric for spurious congestion events | `0c78d6435` |
| f853e5e | [#2550](quinn-rs/quinn#2550) |
fix(perf): suppress table output in JSON mode | `0155ee3f6` |
| a0ec97a | [#2463](quinn-rs/quinn#2463) |
feat(quinn-udp): make Apple fast datapath opt-in | `412dc6684` |
| bb00530 | [#2560](quinn-rs/quinn#2560) |
docs: fix book build with mdbook 0.5.2 | `98cb0ad67` |
| ee8f946 | [#2565](quinn-rs/quinn#2565) |
fix: reuse existing socket for probing GRO/GSO support | `012530527` |
| 56bba7c | [#2565](quinn-rs/quinn#2565) |
refactor: remove `gro` module | `1174207fa` |
| 04ba57c | [#2565](quinn-rs/quinn#2565) |
fix: remove opportunistic GRO syscall | `35400c04e` |
| f0905db | [#2570](quinn-rs/quinn#2570) |
docs(quinn): improve `Connection::close_reason()` documentation |
`287fd2b63` |
| 0adcd20 | [#2573](quinn-rs/quinn#2573) |
docs: clarify that `Event::ConnectionLost` is not emitted on local close
| `7f34b4517` |
| b8e4d3b | [#2572](quinn-rs/quinn#2572) |
quinn: Make Endpoint::server dual-stack V6 by default | `461fe7f28` |
| 52c7ad1 | [#2583](quinn-rs/quinn#2583) |
refactor(quinn-udp): add `retry_if_interrupted` helper | `348b91383` |
| 8acb578 | [#2584](quinn-rs/quinn#2584) |
fix(unix): disable GSO after probing | `85c022d75` |
| e01f99e | [#2571](quinn-rs/quinn#2571) |
fix: Resolve `sendmsg_x`/`recvmsg_x` via `dlsym` | `881d6f151` |
| eff5572 | [#2579](quinn-rs/quinn#2579) |
proto: send STREAMS_BLOCKED when stream limit is hit | `e64abef10` |
| dc86400 | [#2556](quinn-rs/quinn#2556) |
Introduce `max_outgoing_bytes_per_second` option | `ffe5a5474` |
| bda24fd | [#2602](quinn-rs/quinn#2602) |
Upgrade rustls-platform-verifier to 0.7 | `e4570ea71` |

### Already present in noq 

| upstream SHA | PR | subject |
|---|---|---|
| 16e1aaa | [#2511](quinn-rs/quinn#2511) | Fix
unused_mut warning from Rust 1.93 |
| e96c279 | [#2533](quinn-rs/quinn#2533) |
quinn-proto: make cids_exhausted overflow-safe on 32-bit |
| 5db36fe | [#2534](quinn-rs/quinn#2534) |
docs: fix typo in EndpointStats |
| d305440 | [#2540](quinn-rs/quinn#2540) |
Upgrade fastbloom to 0.17 |
| 57b9d0a | [#2558](quinn-rs/quinn#2558) |
fuzz: add fuzzing target for parsing transport parameters |
| 655a8ad | [#2558](quinn-rs/quinn#2558) |
proto: avoid unwrapping varint decoding during parameters parsing |
| 7f7d9ea | [#2610](quinn-rs/quinn#2610) | Fix
clippy warnings from 1.95

### Skipped 

| upstream SHA | PR | subject | reason |
|---|---|---|---|
| e5b30f5 | [#2532](quinn-rs/quinn#2532) |
quinn-udp: make ECN best-effort on Windows (Wine/Proton) | noq already
has its own Wine/Proton ECN handling using `AtomicBool`
runtime-detection (noq PR
[#414](#414)); upstream's
static-bool approach would be redundant. |
| 70d083b | [#2540](quinn-rs/quinn#2540) |
Upgrade to qlog 0.16 | noq uses its own `n0-qlog` fork with a different
API. |
| d8db7a0 | [#2599](quinn-rs/quinn#2599) |
Upgrade to qlog 0.17 | Same reason as above. |
| 41bf1db | [#2564](quinn-rs/quinn#2564) |
fix: evaluate `max_gso_segments` for every socket on Windows | noq
already tracks `max_gso_segments` per-socket on an `AtomicUsize`. |
| 905e109 | [#2599](quinn-rs/quinn#2599) |
Bump MSRV to 1.82 (for qlog -> serde_with) | noq is already at MSRV
1.88. |
| 95863af | [#2602](quinn-rs/quinn#2602) |
Bump MSRV to 1.85 (for rustls-platform-verifier) | Same reason as above.
|

---------

Co-authored-by: Benjamin Saunders <ben.e.saunders@gmail.com>
Co-authored-by: Lars Eggert <lars@eggert.org>
Co-authored-by: Fabien SAVY <fabien.savy@stormshield.eu>
Co-authored-by: Zotyamester <szatmary.zoltan1222@gmail.com>
Co-authored-by: Dirkjan Ochtman <dirkjan@ochtman.nl>
Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
Co-authored-by: zphrs <z@zephiris.dev>
Co-authored-by: alexchenai <alexchenai@users.noreply.github.com>
Co-authored-by: Romain Roffé <r2@kyber.media>
Co-authored-by: cong-or <conchubhar.gannon@gmail.com>
Co-authored-by: Adolfo Ochagavía <github@adolfo.ochagavia.nl>
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.

3 participants