fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39666?usp=email )
Change subject: s1gw_metrics: add histograms for gen_sctp:send delay ......................................................................
s1gw_metrics: add histograms for gen_sctp:send delay
Change-Id: I7633a6e6182bda3fca4e7562e2b780b2b9f9708f Related: SYS#7288 --- M include/s1gw_metrics.hrl M src/s1gw_metrics.erl M src/sctp_common.erl M src/sctp_proxy.erl M src/sctp_server.erl 5 files changed, 44 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-s1gw refs/changes/66/39666/1
diff --git a/include/s1gw_metrics.hrl b/include/s1gw_metrics.hrl index 940529b..e6a1316 100644 --- a/include/s1gw_metrics.hrl +++ b/include/s1gw_metrics.hrl @@ -40,6 +40,9 @@ -define(S1GW_GAUGE_S1AP_ENB_NUM_SCTP_CONNECTIONS, [gauge, s1ap, enb, num_sctp_connections]). -define(S1GW_GAUGE_S1AP_PROXY_UPLINK_PACKETS_QUEUED, [gauge, s1ap, proxy, uplink_packets_queued]).
+-define(S1GW_HIST_SCTP_ENB_SEND_TIME, [hist, sctp, enb, send_time]). +-define(S1GW_HIST_SCTP_MME_SEND_TIME, [hist, sctp, mme, send_time]). + %% NOTE: Remember to add new entries to s1gw_metric:init()!
%% vim:set ts=4 sw=4 et: diff --git a/src/s1gw_metrics.erl b/src/s1gw_metrics.erl index dceb477..8df8efc 100644 --- a/src/s1gw_metrics.erl +++ b/src/s1gw_metrics.erl @@ -42,7 +42,9 @@ gauge_set/2, gauge_inc/1, gauge_inc/2, - gauge_dec/1]). + gauge_dec/1, + hist_reset/1, + hist_add/2]).
-include_lib("kernel/include/logger.hrl"). -include("s1gw_metrics.hrl"). @@ -95,8 +97,14 @@ ?S1GW_GAUGE_S1AP_PROXY_UPLINK_PACKETS_QUEUED ]).
+-define(S1GW_HISTOGRAMS, [ + ?S1GW_HIST_SCTP_ENB_SEND_TIME, + ?S1GW_HIST_SCTP_MME_SEND_TIME +]). + -type counter() :: [ctr | _]. -type gauge() :: [gauge | _]. +-type hist() :: [hist | _].
-spec register_all(Type, List) -> Result @@ -121,7 +129,8 @@ init() -> ?LOG_INFO("Initiating metrics"), [] = register_all(counter, ?S1GW_COUNTERS), - [] = register_all(gauge, ?S1GW_GAUGES). + [] = register_all(gauge, ?S1GW_GAUGES), + [] = register_all(histogram, ?S1GW_HISTOGRAMS).
%%%%%%%%%%%%% %% CTR APIs @@ -166,5 +175,18 @@ gauge_dec(Name) -> gauge_inc(Name, -1).
+%%%%%%%%%%%% +%% HIST APIs +%%%%%%%%%%%% +-spec hist_reset(hist()) -> ok | {error, any()}. +hist_reset(Name) -> + ?LOG_DEBUG("~p(~p)", [?FUNCTION_NAME, Name]), + exometer:reset(Name). + +-spec hist_add(hist(), integer()) -> ok | {error, any()}. +hist_add(Name, Value) -> + ?LOG_DEBUG("~p(~p)", [?FUNCTION_NAME, Name]), + exometer:update(Name, Value). +
%% vim:set ts=4 sw=4 et: diff --git a/src/sctp_common.erl b/src/sctp_common.erl index 0d28f81..428cf95 100644 --- a/src/sctp_common.erl +++ b/src/sctp_common.erl @@ -35,12 +35,14 @@ -module(sctp_common).
-export([send_data/2, + send_data_to/3, shutdown/1]).
-include_lib("kernel/include/logger.hrl"). -include_lib("kernel/include/inet_sctp.hrl").
-include("s1ap.hrl"). +-include("s1gw_metrics.hrl").
-type sock_aid() :: {gen_sctp:sctp_socket(), @@ -58,6 +60,18 @@ assoc_id = Aid}, Data).
+-spec send_data_to(enb | mme, sock_aid(), binary()) -> ok | {error, term()}. +send_data_to(Peer, {Sock, Aid}, Data) -> + {Time, Result} = timer:tc(fun() -> send_data({Sock, Aid}, Data) end), + case Peer of + enb -> + s1gw_metrics:hist_add(?S1GW_HIST_SCTP_ENB_SEND_TIME, Time); + mme -> + s1gw_metrics:hist_add(?S1GW_HIST_SCTP_MME_SEND_TIME, Time) + end, + Result. + + -spec shutdown(sock_aid()) -> ok | {error, term()}. shutdown({Sock, Aid}) -> gen_sctp:eof(Sock, #sctp_assoc_change{assoc_id = Aid}). diff --git a/src/sctp_proxy.erl b/src/sctp_proxy.erl index 94ff36a..a52424d 100644 --- a/src/sctp_proxy.erl +++ b/src/sctp_proxy.erl @@ -197,7 +197,7 @@ {forward, FwdData} -> sctp_server:send_data(EnbAid, FwdData); {reply, ReData} -> - ok = sctp_common:send_data({Sock, Aid}, ReData) + ok = sctp_common:send_data_to(mme, {Sock, Aid}, ReData) end, {keep_state, S};
@@ -260,7 +260,7 @@ handler := Pid}) -> case s1ap_proxy:process_pdu(Pid, Data) of {forward, FwdData} -> - ok = sctp_common:send_data({Sock, Aid}, FwdData); + ok = sctp_common:send_data_to(mme, {Sock, Aid}, FwdData); {reply, ReData} -> sctp_server:send_data(EnbAid, ReData) end. diff --git a/src/sctp_server.erl b/src/sctp_server.erl index 27752d8..77a0969 100644 --- a/src/sctp_server.erl +++ b/src/sctp_server.erl @@ -133,7 +133,7 @@
handle_cast({send_data, Aid, Data}, #server_state{sock = Sock} = S) -> - sctp_common:send_data({Sock, Aid}, Data), + sctp_common:send_data_to(enb, {Sock, Aid}, Data), {noreply, S};
handle_cast(Info, S) ->