pespin submitted this change.

View Change


Approvals: Jenkins Builder: Verified daniel: Looks good to me, but someone else must approve fixeria: Looks good to me, approved
meas_feed: Increase wqueue max_len to 100 and make it vty-configurable

The previous amount of 10 messages may be small if the BSC is processing
lots of measurements from lots of BTS connected to it.
Increase it to 100 by default, and allow changing the write_queue length
through the VTY.

Related: SYS#6550
Change-Id: Ib2e3591498c038b8e59f3ad447ac1f65928d6da8
---
M include/osmocom/bsc/meas_feed.h
M src/osmo-bsc/bsc_vty.c
M src/osmo-bsc/meas_feed.c
3 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/include/osmocom/bsc/meas_feed.h b/include/osmocom/bsc/meas_feed.h
index 353278e..f2bd4ba 100644
--- a/include/osmocom/bsc/meas_feed.h
+++ b/include/osmocom/bsc/meas_feed.h
@@ -35,9 +35,12 @@
};

#define MEAS_FEED_VERSION 1
+#define MEAS_FEED_WQUEUE_MAX_LEN_DEFAULT 100

int meas_feed_cfg_set(const char *dst_host, uint16_t dst_port);
void meas_feed_scenario_set(const char *name);
+void meas_feed_wqueue_max_length_set(unsigned int max_length);

void meas_feed_cfg_get(char **host, uint16_t *port);
const char *meas_feed_scenario_get(void);
+unsigned int meas_feed_wqueue_max_length_get(void);
diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c
index 7918d81..02f708e 100644
--- a/src/osmo-bsc/bsc_vty.c
+++ b/src/osmo-bsc/bsc_vty.c
@@ -385,6 +385,7 @@
uint16_t meas_port;
char *meas_host;
const char *meas_scenario;
+ unsigned int max_len = meas_feed_wqueue_max_length_get();

meas_feed_cfg_get(&meas_host, &meas_port);
meas_scenario = meas_feed_scenario_get();
@@ -395,6 +396,9 @@
if (strlen(meas_scenario) > 0)
vty_out(vty, " meas-feed scenario %s%s",
meas_scenario, VTY_NEWLINE);
+ if (max_len != MEAS_FEED_WQUEUE_MAX_LEN_DEFAULT)
+ vty_out(vty, " meas-feed write-queue-max-length %u%s",
+ max_len, VTY_NEWLINE);
}

if (gsmnet->allow_unusable_timeslots)
@@ -2416,6 +2420,16 @@
return CMD_SUCCESS;
}

+DEFUN_ATTR(cfg_net_meas_feed_wqueue_max_len, cfg_net_meas_feed_wqueue_max_len_cmd,
+ "meas-feed write-queue-max-length <1-65535>",
+ MEAS_FEED_STR "Set the maximum length of the message write queue towards the UDP socket\n"
+ "Maximum number of messages to be queued waiting for transmission\n",
+ CMD_ATTR_IMMEDIATE)
+{
+ meas_feed_wqueue_max_length_set(atoi(argv[0]));
+ return CMD_SUCCESS;
+}
+
static void legacy_timers(struct vty *vty, const char **T_arg)
{
if (!strcmp((*T_arg), "T993111") || !strcmp((*T_arg), "t993111")) {
@@ -3580,6 +3594,7 @@
install_element(GSMNET_NODE, &cfg_net_dyn_ts_allow_tch_f_cmd);
install_element(GSMNET_NODE, &cfg_net_meas_feed_dest_cmd);
install_element(GSMNET_NODE, &cfg_net_meas_feed_scenario_cmd);
+ install_element(GSMNET_NODE, &cfg_net_meas_feed_wqueue_max_len_cmd);
install_element(GSMNET_NODE, &cfg_net_timer_cmd);
install_element(GSMNET_NODE, &cfg_net_allow_unusable_timeslots_cmd);
install_element(GSMNET_NODE, &cfg_net_pcu_sock_cmd);
diff --git a/src/osmo-bsc/meas_feed.c b/src/osmo-bsc/meas_feed.c
index fbfd553..23b7d04 100644
--- a/src/osmo-bsc/meas_feed.c
+++ b/src/osmo-bsc/meas_feed.c
@@ -24,6 +24,7 @@

struct meas_feed_state {
struct osmo_wqueue wqueue;
+ unsigned int wqueue_max_len;
char scenario[31+1];
char *dst_host;
uint16_t dst_port;
@@ -31,6 +32,7 @@

static struct meas_feed_state g_mfs = {
.wqueue.bfd.fd = -1,
+ .wqueue_max_len = MEAS_FEED_WQUEUE_MAX_LEN_DEFAULT,
};

static int process_meas_rep(struct gsm_meas_rep *mr)
@@ -152,7 +154,7 @@
meas_feed_close();
}

- osmo_wqueue_init(&g_mfs.wqueue, 10);
+ osmo_wqueue_init(&g_mfs.wqueue, g_mfs.wqueue_max_len);
g_mfs.wqueue.write_cb = feed_write_cb;
g_mfs.wqueue.read_cb = feed_read_cb;

@@ -179,6 +181,18 @@
*host = g_mfs.dst_host;
}

+void meas_feed_wqueue_max_length_set(unsigned int max_length)
+{
+ g_mfs.wqueue_max_len = max_length;
+ if (g_mfs.wqueue.bfd.fd)
+ g_mfs.wqueue.max_length = max_length;
+}
+
+unsigned int meas_feed_wqueue_max_length_get(void)
+{
+ return g_mfs.wqueue_max_len;
+}
+
void meas_feed_scenario_set(const char *name)
{
osmo_strlcpy(g_mfs.scenario, name, sizeof(g_mfs.scenario));

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

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: Ib2e3591498c038b8e59f3ad447ac1f65928d6da8
Gerrit-Change-Number: 34244
Gerrit-PatchSet: 4
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann@sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>
Gerrit-CC: laforge <laforge@osmocom.org>
Gerrit-MessageType: merged