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

Add support for number of window update frames sent #6

Open
carl-mastrangelo opened this issue Jul 28, 2016 · 5 comments
Open

Add support for number of window update frames sent #6

carl-mastrangelo opened this issue Jul 28, 2016 · 5 comments

Comments

@carl-mastrangelo
Copy link

In additional to the total amount of Window sent, it would be useful to know the granularity of the window size. A case where this would be useful is a misbehaving client that may send window in response to each data frame. A million window update frames of one byte each is interestingly different than a single window update frame of a million bytes.

Pretty much any case where the number of Window Update frames is high would be helpful in explaining why a connection/stream is slow.

@Lukasa
Copy link
Member

Lukasa commented Jul 29, 2016

@carl-mastrangelo How would you envision this information being presented?

@carl-mastrangelo
Copy link
Author

@Lukasa Something like the number of window updates sent between probing the remote point twice. It wouldn't be exact, but it would allow the inquirer to find out if there were lots of window updates between the last time sampled and the current time sampled.

The impetus was based on a conversation with @louiscryan on what some light weight signals were to detect why a stream/connection was slow. Sending lots of small window updates (like 1 byte updates) is a common failure, that we (gRPC) have at one point run into.

@Lukasa
Copy link
Member

Lukasa commented Jul 29, 2016

So while that's do-able, it does represent a request to track substantially more state than would ordinarily be tracked, I think. I can't speak for all implementers, but certainly my implementations don't track this kind of information.

Essentially, it changes the behaviour of this to stop being a "tell me what's going on right now" and to become a bit more "tell me what's been going on". Asking implementations to keep historical data makes me a bit nervous: done incautiously it risks being a DoS vector.

@louiscryan
Copy link

@Lukasa Totally agreed that we should be extremely cautious about maintaining historical state, that said some historical state is absolutely crucial to understanding the behavior of flow control in an implementation.

For example the total amount of flow control window received per-connection and the total number of bytes written over the lifetime of that connection are necessary to understand how many bytes the implementation thinks it can make available to it's streams. Given that we're not going keep state for streams that have been completed there's no other way to get this information.

@Lukasa
Copy link
Member

Lukasa commented Jul 30, 2016

Is the information obtained by polling the URI sufficient this purpose?

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

No branches or pull requests

3 participants