-
Notifications
You must be signed in to change notification settings - Fork 17.7k
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
x/net/http2: WINDOW_UPDATE sent rate too high and can't be configured #28732
Comments
Most of the frameworks have chosen 50% as the deciding factor to send a WINDOW_UPDATE when reading DATA. nginx does it at the 25% mark. I will go experiment and see how much benefit some change like this truly offers. |
Definitely room for improvement here. (There might even be a TODO about this in the code, IIRC) But let's not add configurability here. |
Change https://golang.org/cl/150197 mentions this issue: |
I could not find the change in the master. |
Change https://go.dev/cl/432038 mentions this issue: |
Reopening because https://go.dev/cl/432038 (which marked this issue fixed) was reverted. |
Change https://go.dev/cl/448055 mentions this issue: |
…reshold" This reverts commit 2e0b12c. The calculation for when to return flow control doesn't properly take data in server read buffers into account, resulting in flow control credit being returned too quickly without backpressure. Fixes golang/go#56315 For golang/go#28732 Change-Id: I573afd1a37d8a711da47f05f38f4de04183fb941 Reviewed-on: https://go-review.googlesource.com/c/net/+/448055 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Damien Neil <dneil@google.com> Reviewed-by: Roland Shoemaker <roland@golang.org>
Change https://go.dev/cl/448155 mentions this issue: |
Rather than send a WindowUpdate on every chunk of bytes read, allow them to collect until we go past half the configured window size. Once the threshold is reached, send a single WindowUpdate to reset the amount back to the maximum amount configured. Fixes golang/go#28732 Change-Id: I177f962ee0a9b8daa1c4817e0ab7698e828bad96 Reviewed-on: https://go-review.googlesource.com/c/net/+/150197 TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Damien Neil <dneil@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Damien Neil <dneil@google.com> Run-TryBot: Damien Neil <dneil@google.com>
This rolls-forward CL 150197 with an added fix for TestProtocolErrorAfterGoAway. Rather than send a WindowUpdate on every chunk of bytes read, allow them to collect until we go past half the configured window size. Once the threshold is reached, send a single WindowUpdate to reset the amount back to the maximum amount configured. Fixes golang/go#28732 Change-Id: Icee93dedf68d6166aa6fe0c3845d717e66586e73 Reviewed-on: https://go-review.googlesource.com/c/net/+/432038 Run-TryBot: Damien Neil <dneil@google.com> Auto-Submit: Damien Neil <dneil@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Tatiana Bradley <tatiana@golang.org>
…reshold" This reverts commit 3a96036. The calculation for when to return flow control doesn't properly take data in server read buffers into account, resulting in flow control credit being returned too quickly without backpressure. Fixes golang/go#56315 For golang/go#28732 Change-Id: I573afd1a37d8a711da47f05f38f4de04183fb941 Reviewed-on: https://go-review.googlesource.com/c/net/+/448055 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Damien Neil <dneil@google.com> Reviewed-by: Roland Shoemaker <roland@golang.org>
What version of Go are you using (
go version
)?golang:1.10.0 linux
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (
go env
)?container: rhel
kubenet:
What did you do?
Currently golang http2 stack will send WINDOW_UPDATE back when receive a request with data.
It means a client will recevie a response and WINDOW_UPDATE when it send a request with data to golang http2 server.
sent one 'request' package and got two 'reponse' package, that will impact client performance in a high load traffic.
In fact, golang stack use 2^31 as default window size for connection. It is very big and updated too frequently is unnecessary.
What did you expect to see?
Change this behavior or make it configurable like other language http2 stack.
I think c++/java popular http2 stack have a configurable rate (default is 50%) used for sending WINDOS_UPDATE frame when the rate of left size/total is less than it.
What did you see instead?
The text was updated successfully, but these errors were encountered: