fixeria submitted this change.

View Change

Approvals: osmith: Looks good to me, but someone else must approve laforge: Looks good to me, but someone else must approve Jenkins Builder: Verified fixeria: Looks good to me, approved
sctp_{client,server}: set sndbuf/recbuf explicitly

For some reason, Erlang/OTP does overwrite the OS-default
SO_SNDBUF/SO_RCVBUF values even if the respective socket options
are not given to gen_sctp:open/N explicitly. Even worse, the
receive buffer size is set to a very low value (1024), resulting
in major performance issues when dealing with large packets.

Set both sndbuf/recbuf to 65536 explicitly - this is the value
that Erlang/OTP sets for the sndbuf by default. Allow tuning
sndbuf/recbuf via the environment variables.

Change-Id: I66f4a0f6a2441a3c8a4dbd266da8e44a3860b993
Related: SYS#7288
---
M src/osmo_s1gw_sup.erl
1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/osmo_s1gw_sup.erl b/src/osmo_s1gw_sup.erl
index 67b6f47..92f908b 100644
--- a/src/osmo_s1gw_sup.erl
+++ b/src/osmo_s1gw_sup.erl
@@ -42,6 +42,7 @@

-define(SERVER, ?MODULE).
-define(ENV_APP_NAME, osmo_s1gw).
+-define(ENV_DEFAULT_SCTP_BUFSZ, 65536).
-define(ENV_DEFAULT_SCTP_NODELAY, true).
-define(ENV_DEFAULT_S1GW_BIND_ADDR, "127.0.1.1").
-define(ENV_DEFAULT_S1GW_BIND_PORT, ?S1AP_PORT).
@@ -89,7 +90,9 @@

-spec client_cfg() -> sctp_client:cfg().
client_cfg() ->
- SockOpts = #{sctp_nodelay => get_env(mme_nodelay, ?ENV_DEFAULT_SCTP_NODELAY)},
+ SockOpts = #{sctp_nodelay => get_env(mme_nodelay, ?ENV_DEFAULT_SCTP_NODELAY),
+ recbuf => get_env(mme_recbuf, ?ENV_DEFAULT_SCTP_BUFSZ),
+ sndbuf => get_env(mme_sndbuf, ?ENV_DEFAULT_SCTP_BUFSZ)},
#{laddr => get_env(mme_loc_addr, ?ENV_DEFAULT_MME_LOC_ADDR),
raddr => get_env(mme_rem_addr, ?ENV_DEFAULT_MME_REM_ADDR),
rport => get_env(mme_rem_port, ?ENV_DEFAULT_MME_REM_PORT),
@@ -98,7 +101,9 @@

-spec server_cfg() -> sctp_server:cfg().
server_cfg() ->
- SockOpts = #{sctp_nodelay => get_env(s1gw_nodelay, ?ENV_DEFAULT_SCTP_NODELAY)},
+ SockOpts = #{sctp_nodelay => get_env(s1gw_nodelay, ?ENV_DEFAULT_SCTP_NODELAY),
+ recbuf => get_env(s1gw_recbuf, ?ENV_DEFAULT_SCTP_BUFSZ),
+ sndbuf => get_env(s1gw_sndbuf, ?ENV_DEFAULT_SCTP_BUFSZ)},
#{laddr => get_env(s1gw_bind_addr, ?ENV_DEFAULT_S1GW_BIND_ADDR),
lport => get_env(s1gw_bind_port, ?ENV_DEFAULT_S1GW_BIND_PORT),
sockopts => maps:to_list(SockOpts),

To view, visit change 40019. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: erlang/osmo-s1gw
Gerrit-Branch: master
Gerrit-Change-Id: I66f4a0f6a2441a3c8a4dbd266da8e44a3860b993
Gerrit-Change-Number: 40019
Gerrit-PatchSet: 2
Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: osmith <osmith@sysmocom.de>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>