mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 04:10:24 +00:00
Make dynamic_buffer start at 128 and change less abruptly
Based on RabbitMQ performance testing.
This commit is contained in:
parent
24d32de931
commit
3b075c56a4
5 changed files with 7 additions and 7 deletions
|
@ -166,7 +166,7 @@ ensure_dynamic_buffer(TransOpts, #{dynamic_buffer := DynamicBuffer}) ->
|
||||||
ensure_dynamic_buffer(TransOpts=#{socket_opts := SocketOpts}, _) ->
|
ensure_dynamic_buffer(TransOpts=#{socket_opts := SocketOpts}, _) ->
|
||||||
case proplists:get_value(buffer, SocketOpts, undefined) of
|
case proplists:get_value(buffer, SocketOpts, undefined) of
|
||||||
undefined ->
|
undefined ->
|
||||||
{TransOpts#{socket_opts => [{buffer, 1024}|SocketOpts]}, {1024, 131072}};
|
{TransOpts#{socket_opts => [{buffer, 128}|SocketOpts]}, {128, 131072}};
|
||||||
_ ->
|
_ ->
|
||||||
{TransOpts, false}
|
{TransOpts, false}
|
||||||
end.
|
end.
|
||||||
|
|
|
@ -65,7 +65,7 @@ maybe_resize_buffer(State=#state{transport=Transport, socket=Socket,
|
||||||
opts=#{dynamic_buffer := {LowDynamicBuffer, HighDynamicBuffer}},
|
opts=#{dynamic_buffer := {LowDynamicBuffer, HighDynamicBuffer}},
|
||||||
dynamic_buffer_size=BufferSize0, dynamic_buffer_moving_average=MovingAvg0}, Data) ->
|
dynamic_buffer_size=BufferSize0, dynamic_buffer_moving_average=MovingAvg0}, Data) ->
|
||||||
DataLen = byte_size(Data),
|
DataLen = byte_size(Data),
|
||||||
MovingAvg = (MovingAvg0 + DataLen) div 2,
|
MovingAvg = (MovingAvg0 * 7 + DataLen) / 8,
|
||||||
if
|
if
|
||||||
BufferSize0 < HighDynamicBuffer andalso MovingAvg > BufferSize0 * 0.9 ->
|
BufferSize0 < HighDynamicBuffer andalso MovingAvg > BufferSize0 * 0.9 ->
|
||||||
BufferSize = min(BufferSize0 * 2, HighDynamicBuffer),
|
BufferSize = min(BufferSize0 * 2, HighDynamicBuffer),
|
||||||
|
|
|
@ -193,7 +193,7 @@ init(Parent, Ref, Socket, Transport, ProxyHeader, Opts) ->
|
||||||
transport=Transport, proxy_header=ProxyHeader, opts=Opts,
|
transport=Transport, proxy_header=ProxyHeader, opts=Opts,
|
||||||
peer=Peer, sock=Sock, cert=Cert,
|
peer=Peer, sock=Sock, cert=Cert,
|
||||||
dynamic_buffer_size=init_dynamic_buffer_size(Opts),
|
dynamic_buffer_size=init_dynamic_buffer_size(Opts),
|
||||||
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0),
|
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0.0),
|
||||||
last_streamid=maps:get(max_keepalive, Opts, 1000)},
|
last_streamid=maps:get(max_keepalive, Opts, 1000)},
|
||||||
safe_setopts_active(State),
|
safe_setopts_active(State),
|
||||||
before_loop(set_timeout(State, request_timeout)).
|
before_loop(set_timeout(State, request_timeout)).
|
||||||
|
|
|
@ -188,7 +188,7 @@ init(Parent, Ref, Socket, Transport, ProxyHeader, Opts, Peer, Sock, Cert, Buffer
|
||||||
transport=Transport, proxy_header=ProxyHeader,
|
transport=Transport, proxy_header=ProxyHeader,
|
||||||
opts=Opts, peer=Peer, sock=Sock, cert=Cert,
|
opts=Opts, peer=Peer, sock=Sock, cert=Cert,
|
||||||
dynamic_buffer_size=DynamicBuffer,
|
dynamic_buffer_size=DynamicBuffer,
|
||||||
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0),
|
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0.0),
|
||||||
http2_status=sequence, http2_machine=HTTP2Machine}), 0),
|
http2_status=sequence, http2_machine=HTTP2Machine}), 0),
|
||||||
safe_setopts_active(State),
|
safe_setopts_active(State),
|
||||||
case Buffer of
|
case Buffer of
|
||||||
|
@ -238,7 +238,7 @@ init(Parent, Ref, Socket, Transport, ProxyHeader, Opts, Peer, Sock, Cert, Buffer
|
||||||
transport=Transport, proxy_header=ProxyHeader,
|
transport=Transport, proxy_header=ProxyHeader,
|
||||||
opts=Opts, peer=Peer, sock=Sock, cert=Cert,
|
opts=Opts, peer=Peer, sock=Sock, cert=Cert,
|
||||||
dynamic_buffer_size=DynamicBuffer,
|
dynamic_buffer_size=DynamicBuffer,
|
||||||
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0),
|
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0.0),
|
||||||
http2_status=upgrade, http2_machine=HTTP2Machine},
|
http2_status=upgrade, http2_machine=HTTP2Machine},
|
||||||
State1 = headers_frame(State0#state{
|
State1 = headers_frame(State0#state{
|
||||||
http2_machine=HTTP2Machine}, StreamID, Req),
|
http2_machine=HTTP2Machine}, StreamID, Req),
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
|
|
||||||
%% Dynamic buffer moving average and current buffer size.
|
%% Dynamic buffer moving average and current buffer size.
|
||||||
dynamic_buffer_size = false :: pos_integer() | false,
|
dynamic_buffer_size = false :: pos_integer() | false,
|
||||||
dynamic_buffer_moving_average = 0 :: non_neg_integer(),
|
dynamic_buffer_moving_average = 0.0 :: non_neg_integer(),
|
||||||
|
|
||||||
hibernate = false :: boolean(),
|
hibernate = false :: boolean(),
|
||||||
frag_state = undefined :: cow_ws:frag_state(),
|
frag_state = undefined :: cow_ws:frag_state(),
|
||||||
|
@ -320,7 +320,7 @@ takeover(Parent, Ref, Socket, Transport, Opts, Buffer,
|
||||||
key=undefined, messages=Messages,
|
key=undefined, messages=Messages,
|
||||||
%% Dynamic buffer only applies to HTTP/1.1 Websocket.
|
%% Dynamic buffer only applies to HTTP/1.1 Websocket.
|
||||||
dynamic_buffer_size=init_dynamic_buffer_size(Opts),
|
dynamic_buffer_size=init_dynamic_buffer_size(Opts),
|
||||||
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0)}, 0),
|
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0.0)}, 0),
|
||||||
%% We call parse_header/3 immediately because there might be
|
%% We call parse_header/3 immediately because there might be
|
||||||
%% some data in the buffer that was sent along with the handshake.
|
%% some data in the buffer that was sent along with the handshake.
|
||||||
%% While it is not allowed by the protocol to send frames immediately,
|
%% While it is not allowed by the protocol to send frames immediately,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue