Skip to content
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

feat(bin/client): add --stats flag printing connection statistics #1766

Merged
merged 2 commits into from
Mar 21, 2024

Conversation

mxinden
Copy link
Collaborator

@mxinden mxinden commented Mar 21, 2024

This commit introduces the --stats flag to neqo-client. It will print the neqo_transport::Stats of the Connection after close.

$ cargo run --bin neqo-client -- --stats http://127.0.0.1:12345/10000000

stats for Client ...
  rx: 7728 drop 1 dup 0 saved 1
  tx: 819 lost 12 lateack 0 ptoack 4
  resumed: false
  frames rx:
    crypto 3 done 1 token 1 close 0
    ack 40 (max 805) ping 0 padding 0
    stream 7704 reset 0 stop 0
    max: stream 0 data 0 stream_data 0
    blocked: stream 0 data 0 stream_data 19
    datagram 0
    ncid 7 rcid 0 pchallenge 0 presponse 0
    ack_frequency 4
  frames tx:
    crypto 2 done 0 token 0 close 0
    ack 783 (max 7769) ping 5 padding 0
    stream 5 reset 0 stop 0
    max: stream 0 data 0 stream_data 30
    blocked: stream 0 data 0 stream_data 0
    datagram 0
    ncid 0 rcid 0 pchallenge 0 presponse 0
    ack_frequency 2

Just an idea. Helpful to e.g. debug packet loss. What do folks think?

(I stumbled across neqo_transport/src/stats.rs only today. I see that Firefox consumes them. How are they surfaced to the user?)

https://searchfox.org/mozilla-central/source/netwerk/socket/neqo_glue/src/lib.rs#1287-1289

This commit introduces the `--stats` flag to `neqo-client`. It will print the
`neqo_transport::Stats` of the `Connection` after close.

```
$ cargo run --bin neqo-client -- --stats http://127.0.0.1:12345/10000000

stats for Client ...
  rx: 7728 drop 1 dup 0 saved 1
  tx: 819 lost 12 lateack 0 ptoack 4
  resumed: false
  frames rx:
    crypto 3 done 1 token 1 close 0
    ack 40 (max 805) ping 0 padding 0
    stream 7704 reset 0 stop 0
    max: stream 0 data 0 stream_data 0
    blocked: stream 0 data 0 stream_data 19
    datagram 0
    ncid 7 rcid 0 pchallenge 0 presponse 0
    ack_frequency 4
  frames tx:
    crypto 2 done 0 token 0 close 0
    ack 783 (max 7769) ping 5 padding 0
    stream 5 reset 0 stop 0
    max: stream 0 data 0 stream_data 30
    blocked: stream 0 data 0 stream_data 0
    datagram 0
    ncid 0 rcid 0 pchallenge 0 presponse 0
    ack_frequency 2
```
@larseggert larseggert linked an issue Mar 21, 2024 that may be closed by this pull request
@larseggert larseggert added this pull request to the merge queue Mar 21, 2024
Copy link

codecov bot commented Mar 21, 2024

Codecov Report

Attention: Patch coverage is 0% with 1 lines in your changes are missing coverage. Please review.

Project coverage is 93.09%. Comparing base (56f53bb) to head (9f0ee38).

Files Patch % Lines
neqo-transport/src/stats.rs 0.00% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1766   +/-   ##
=======================================
  Coverage   93.09%   93.09%           
=======================================
  Files         117      117           
  Lines       36401    36401           
=======================================
  Hits        33887    33887           
  Misses       2514     2514           

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

Merged via the queue into mozilla:main with commit a80db47 Mar 21, 2024
13 of 15 checks passed
mxinden added a commit to mxinden/neqo that referenced this pull request May 4, 2024
There are two server implementations based on neqo:

1. https://github.com/mozilla/neqo/tree/main/neqo-bin/src/server
  - http3 and http09 implementation
  - used for manual testing and QUIC Interop

2. https://searchfox.org/mozilla-central/source/netwerk/test/http3server/src/main.rs
  - used to test Firefox

I assume one was once an exact copy of the other. Both implement their own I/O,
event loop, ... Since then, the two implementations diverged significantly.
Especially (1) saw a lot of improvements in recent months:

- mozilla#1564
- mozilla#1569
- mozilla#1578
- mozilla#1581
- mozilla#1604
- mozilla#1612
- mozilla#1676
- mozilla#1692
- mozilla#1707
- mozilla#1708
- mozilla#1727
- mozilla#1753
- mozilla#1756
- mozilla#1766
- mozilla#1772
- mozilla#1786
- mozilla#1787
- mozilla#1788
- mozilla#1794
- mozilla#1806
- mozilla#1808
- mozilla#1848
- mozilla#1866

At this point, bugs in (2) are hard to fix, see e.g.
mozilla#1801.

This commit merges (2) into (1), thus removing all duplicate logic and
having (2) benefit from all the recent improvements to (1).
KershawChang pushed a commit to KershawChang/neqo that referenced this pull request May 7, 2024
There are two server implementations based on neqo:

1. https://github.com/mozilla/neqo/tree/main/neqo-bin/src/server
  - http3 and http09 implementation
  - used for manual testing and QUIC Interop

2. https://searchfox.org/mozilla-central/source/netwerk/test/http3server/src/main.rs
  - used to test Firefox

I assume one was once an exact copy of the other. Both implement their own I/O,
event loop, ... Since then, the two implementations diverged significantly.
Especially (1) saw a lot of improvements in recent months:

- mozilla#1564
- mozilla#1569
- mozilla#1578
- mozilla#1581
- mozilla#1604
- mozilla#1612
- mozilla#1676
- mozilla#1692
- mozilla#1707
- mozilla#1708
- mozilla#1727
- mozilla#1753
- mozilla#1756
- mozilla#1766
- mozilla#1772
- mozilla#1786
- mozilla#1787
- mozilla#1788
- mozilla#1794
- mozilla#1806
- mozilla#1808
- mozilla#1848
- mozilla#1866

At this point, bugs in (2) are hard to fix, see e.g.
mozilla#1801.

This commit merges (2) into (1), thus removing all duplicate logic and
having (2) benefit from all the recent improvements to (1).
github-merge-queue bot pushed a commit that referenced this pull request May 8, 2024
* refactor(bin): introduce server/http3.rs and server/http09.rs

The QUIC Interop Runner requires an http3 and http09 implementation for both
client and server. The client code is already structured into an http3 and an
http09 implementation since #1727.

This commit does the same for the server side, i.e. splits the http3 and http09
implementation into separate Rust modules.

* refactor: merge mozilla-central http3 server into neqo-bin

There are two server implementations based on neqo:

1. https://github.com/mozilla/neqo/tree/main/neqo-bin/src/server
  - http3 and http09 implementation
  - used for manual testing and QUIC Interop

2. https://searchfox.org/mozilla-central/source/netwerk/test/http3server/src/main.rs
  - used to test Firefox

I assume one was once an exact copy of the other. Both implement their own I/O,
event loop, ... Since then, the two implementations diverged significantly.
Especially (1) saw a lot of improvements in recent months:

- #1564
- #1569
- #1578
- #1581
- #1604
- #1612
- #1676
- #1692
- #1707
- #1708
- #1727
- #1753
- #1756
- #1766
- #1772
- #1786
- #1787
- #1788
- #1794
- #1806
- #1808
- #1848
- #1866

At this point, bugs in (2) are hard to fix, see e.g.
#1801.

This commit merges (2) into (1), thus removing all duplicate logic and
having (2) benefit from all the recent improvements to (1).

* Move firefox.rs to mozilla-central

* Reduce HttpServer trait functions

* Extract constructor

* Remove unused deps

* Remove clap color feature

Nice to have. Adds multiple dependencies. Hard to justify for mozilla-central.
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.

neqo-client and neqo-server should dump stats
3 participants