Skip to content

Commit a0e1bd0

Browse files
committed
Make dynamic_buffer start at 128 and change less abruptly
Based on RabbitMQ performance testing.
1 parent 8da6ca1 commit a0e1bd0

File tree

5 files changed

+7
-7
lines changed

5 files changed

+7
-7
lines changed

src/cowboy.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ ensure_dynamic_buffer(TransOpts, #{dynamic_buffer := DynamicBuffer}) ->
172172
ensure_dynamic_buffer(TransOpts=#{socket_opts := SocketOpts}, _) ->
173173
case proplists:get_value(buffer, SocketOpts, undefined) of
174174
undefined ->
175-
{TransOpts#{socket_opts => [{buffer, 1024}|SocketOpts]}, {1024, 131072}};
175+
{TransOpts#{socket_opts => [{buffer, 128}|SocketOpts]}, {128, 131072}};
176176
_ ->
177177
{TransOpts, false}
178178
end.

src/cowboy_dynamic_buffer.hrl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ maybe_resize_buffer(State=#state{transport=Transport, socket=Socket,
6565
opts=#{dynamic_buffer := {LowDynamicBuffer, HighDynamicBuffer}},
6666
dynamic_buffer_size=BufferSize0, dynamic_buffer_moving_average=MovingAvg0}, Data) ->
6767
DataLen = byte_size(Data),
68-
MovingAvg = (MovingAvg0 + DataLen) div 2,
68+
MovingAvg = (MovingAvg0 * 7 + DataLen) / 8,
6969
if
7070
BufferSize0 < HighDynamicBuffer andalso MovingAvg > BufferSize0 * 0.9 ->
7171
BufferSize = min(BufferSize0 * 2, HighDynamicBuffer),

src/cowboy_http.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ init(Parent, Ref, Socket, Transport, ProxyHeader, Opts) ->
193193
transport=Transport, proxy_header=ProxyHeader, opts=Opts,
194194
peer=Peer, sock=Sock, cert=Cert,
195195
dynamic_buffer_size=init_dynamic_buffer_size(Opts),
196-
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0),
196+
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0.0),
197197
last_streamid=maps:get(max_keepalive, Opts, 1000)},
198198
safe_setopts_active(State),
199199
before_loop(set_timeout(State, request_timeout)).

src/cowboy_http2.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ init(Parent, Ref, Socket, Transport, ProxyHeader, Opts, Peer, Sock, Cert, Buffer
195195
transport=Transport, proxy_header=ProxyHeader,
196196
opts=Opts, peer=Peer, sock=Sock, cert=Cert,
197197
dynamic_buffer_size=DynamicBuffer,
198-
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0),
198+
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0.0),
199199
http2_status=sequence, http2_machine=HTTP2Machine}), 0),
200200
safe_setopts_active(State),
201201
case Buffer of
@@ -246,7 +246,7 @@ init(Parent, Ref, Socket, Transport, ProxyHeader, Opts, Peer, Sock, Cert, Buffer
246246
transport=Transport, proxy_header=ProxyHeader,
247247
opts=Opts, peer=Peer, sock=Sock, cert=Cert,
248248
dynamic_buffer_size=DynamicBuffer,
249-
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0),
249+
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0.0),
250250
http2_status=upgrade, http2_machine=HTTP2Machine},
251251
State1 = headers_frame(State0#state{
252252
http2_machine=HTTP2Machine}, StreamID, Req),

src/cowboy_websocket.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@
105105

106106
%% Dynamic buffer moving average and current buffer size.
107107
dynamic_buffer_size = false :: pos_integer() | false,
108-
dynamic_buffer_moving_average = 0 :: non_neg_integer(),
108+
dynamic_buffer_moving_average = 0.0 :: non_neg_integer(),
109109

110110
hibernate = false :: boolean(),
111111
frag_state = undefined :: cow_ws:frag_state(),
@@ -337,7 +337,7 @@ takeover(Parent, Ref, Socket, Transport, Opts, Buffer,
337337
key=undefined, messages=Messages,
338338
%% Dynamic buffer only applies to HTTP/1.1 Websocket.
339339
dynamic_buffer_size=init_dynamic_buffer_size(Opts),
340-
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0)}, 0),
340+
dynamic_buffer_moving_average=maps:get(dynamic_buffer_initial_average, Opts, 0.0)}, 0),
341341
%% We call parse_header/3 immediately because there might be
342342
%% some data in the buffer that was sent along with the handshake.
343343
%% While it is not allowed by the protocol to send frames immediately,

0 commit comments

Comments
 (0)