h2load: Effectively disable flow control by setting large window size
Previously h2load used default flow control window as described in HTTP/2 and SPDY specification. The window size is 64KiB, which is a bit small, and cannot utilize full server performance when response size is not too small. Basically, we do this kind of benchmarking test to measure server's throughput, and optimal performance. Smaller window certainly degrades performance even in local testing because server is so fast that it has to wait for WINDOW_UPDATE from h2load. To make default behaviour suitable for peak performance test, we decided to disable flow control in h2load by setting large enough window size. Most users used h2load without -w or -W options, so they were implicitly throttled by flow control and the result was affected by that negatively. Now flow control is disabled by default, the result may improve depending on the implementations.
This commit is contained in:
parent
42b2430fe1
commit
b41835f19b
|
@ -49,6 +49,15 @@ time for request
|
||||||
The fraction of the number of requests within standard deviation
|
The fraction of the number of requests within standard deviation
|
||||||
range (mean +/- sd) against total number of successful requests.
|
range (mean +/- sd) against total number of successful requests.
|
||||||
|
|
||||||
|
FLOW CONTROL
|
||||||
|
------------
|
||||||
|
|
||||||
|
h2load sets large flow control window by default, and effectively
|
||||||
|
disables flow control to avoid under utilization of server
|
||||||
|
performance. To set smaller flow control window, use :option:`-w` and
|
||||||
|
:option:`-W` options. For example, use ``-w16 -W16`` to set default
|
||||||
|
window size described in HTTP/2 and SPDY protocol specification.
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ namespace h2load {
|
||||||
|
|
||||||
Config::Config()
|
Config::Config()
|
||||||
: data_length(-1), addrs(nullptr), nreqs(1), nclients(1), nthreads(1),
|
: data_length(-1), addrs(nullptr), nreqs(1), nclients(1), nthreads(1),
|
||||||
max_concurrent_streams(-1), window_bits(16), connection_window_bits(16),
|
max_concurrent_streams(-1), window_bits(30), connection_window_bits(30),
|
||||||
no_tls_proto(PROTO_HTTP2), data_fd(-1), port(0), default_port(0),
|
no_tls_proto(PROTO_HTTP2), data_fd(-1), port(0), default_port(0),
|
||||||
verbose(false) {}
|
verbose(false) {}
|
||||||
|
|
||||||
|
@ -974,11 +974,13 @@ Options:
|
||||||
-w, --window-bits=<N>
|
-w, --window-bits=<N>
|
||||||
Sets the stream level initial window size to (2**<N>)-1.
|
Sets the stream level initial window size to (2**<N>)-1.
|
||||||
For SPDY, 2**<N> is used instead.
|
For SPDY, 2**<N> is used instead.
|
||||||
|
Default: )" << config.window_bits << R"(
|
||||||
-W, --connection-window-bits=<N>
|
-W, --connection-window-bits=<N>
|
||||||
Sets the connection level initial window size to
|
Sets the connection level initial window size to
|
||||||
(2**<N>)-1. For SPDY, if <N> is strictly less than 16,
|
(2**<N>)-1. For SPDY, if <N> is strictly less than 16,
|
||||||
this option is ignored. Otherwise 2**<N> is used for
|
this option is ignored. Otherwise 2**<N> is used for
|
||||||
SPDY.
|
SPDY.
|
||||||
|
Default: )" << config.connection_window_bits << R"(
|
||||||
-H, --header=<HEADER>
|
-H, --header=<HEADER>
|
||||||
Add/Override a header to the requests.
|
Add/Override a header to the requests.
|
||||||
-p, --no-tls-proto=<PROTOID>
|
-p, --no-tls-proto=<PROTOID>
|
||||||
|
|
Loading…
Reference in New Issue