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

Stats: Which ones are appropriate for Http3Transport? #206

Closed
aboba opened this issue Feb 18, 2021 · 7 comments
Closed

Stats: Which ones are appropriate for Http3Transport? #206

aboba opened this issue Feb 18, 2021 · 7 comments

Comments

@aboba
Copy link
Collaborator

aboba commented Feb 18, 2021

ISSUE 2 says (referring to Stats):

"some of those are safe to expose for HTTP/2 and HTTP/3 connections (like min-RTT), while most would either result in information disclosure or are impossible to define for pooled connections."

One question this raises is whether we should remove some stats entirely for Http3Transport, or whether some stats are only returned for Http3Transport connections where pooling is not allowed.

@aboba aboba changed the title Stats: Which ones are appropriate for HTTP/3? Stats: Which ones are appropriate for Http3Transport Feb 18, 2021
@aboba aboba changed the title Stats: Which ones are appropriate for Http3Transport Stats: Which ones are appropriate for Http3Transport? Feb 18, 2021
@wilaw wilaw added the Discuss at next meeting Flags an issue to be discussed at the next WG working label Feb 24, 2021
@wilaw
Copy link
Contributor

wilaw commented Feb 24, 2021

Current stats for reference

The dictionary SHALL have the following attributes:

timestamp, of type DOMHighResTimeStamp
The timestamp for when the stats are gathered, relative to the UNIX epoch (Jan 1, 1970, UTC).

bytesSent, of type unsigned long long
The number of bytes sent on the QUIC connection, including retransmissions. Does not include UDP or any other outer framing.

packetsSent, of type unsigned long long
The number of packets sent on the QUIC connection, including retransmissions.

numOutgoingStreamsCreated, of type unsigned long
The number of outgoing QUIC streams created on the QUIC connection.

numIncomingStreamsCreated, of type unsigned long
The number of incoming QUIC streams created on the QUIC connection.

bytesReceived, of type unsigned long long
The number of total bytes received on the QUIC connection, including duplicate data for streams. Does not include UDP or any other outer framing.

packetsReceived, of type unsigned long long
The number of total packets received on the QUIC connection, including packets that were not processable.

minRtt, of type DOMHighResTimeStamp
The minimum RTT observed on the entire connection.

numReceivedDatagramsDropped, of type unsigned long
The number of datagrams that were dropped, due to too many datagrams buffered between calls to datagrams' readable.

@jan-ivar
Copy link
Member

Meeting:

May depend in allowPooling.
All definitions may need to be rewritten, e.g. should bytes sent/received include resends?
May be a security issue to expose too much data when pooling is in effect.
H2 vs H3 is going to be different.

WebSockets don't have stats, but people want them.
Stats may be more needed on dedicated connections used for e.g. media.
Useful stat ask: Max throughput achieved #21

@jan-ivar
Copy link
Member

Meeting:

  • Per-stream stats? Pros: Would be easier to expose even in pooled mode. Cons: might be super-easy to polyfill (a transform stream that counts), but if this is the only JS in an pipe solely of browser objects, a natice API might be preferable for performance.

@jan-ivar
Copy link
Member

Meeting:

  • A feeling that a PR (of any quality) might promote progress on this issue.

@wilaw wilaw removed the Discuss at next meeting Flags an issue to be discussed at the next WG working label Apr 21, 2021
@jan-ivar
Copy link
Member

jan-ivar commented Apr 27, 2021

Meeting:

  • Count stream resets
  • Focus on stats the JS could polyfill anyway.
  • Maybe per-stream or per-WebTransport instance?
  • Maybe return measured throughput (that could be deduced from counting anyway)
  • @aboba to write up an outline of potential API

@yutakahirano yutakahirano added this to the Uncategorized Future milestone Jun 30, 2021
@aboba
Copy link
Collaborator Author

aboba commented Jul 21, 2021

From RTP over QUIC Section 4.1:

"Additionally, a QUIC implementation MUST expose the recorded RTT
statistics as described in Section 5 of [RFC9002] to the application.
These statistics include the minium observed RTT over a period of
time ("min_rtt"), exponentially-weighted moving average
("smoothed_rtt") and the mean deviation ("rtt_var"). These values
are necessary to perform congestion control as explained in
Section 4.2."

@jan-ivar
Copy link
Member

With #386 and #395 I think we can close this issue. Please reopen if you disagree.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants