From 27881af5432ca6725920e8038807c3c39312e9ad Mon Sep 17 00:00:00 2001 From: Maryam Tahhan Date: Tue, 14 Feb 2017 18:34:15 +0000 Subject: [PATCH] dpdkstat: fix fixed shared mem object name Fix the shared memory object name so that it's configurable. This way multiple DPDK applications running in containers can be monitored at the same time (assuming collectd is also running in that container). Signed-off-by: Maryam Tahhan --- src/collectd.conf.in | 1 + src/collectd.conf.pod | 8 +++++++- src/dpdkstat.c | 22 +++++++++++++--------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/collectd.conf.in b/src/collectd.conf.in index 982cba9f..8c5f1e3e 100644 --- a/src/collectd.conf.in +++ b/src/collectd.conf.in @@ -532,6 +532,7 @@ # ProcessType "secondary" # FilePrefix "rte" # +# SharedMemObj "dpdk_collectd_stats_0" # EnabledPortMask 0xffff # PortName "interface1" # PortName "interface2" diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 9b32a781..a733aa81 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -2398,6 +2398,7 @@ B FilePrefix "rte" SocketMemory "1024" + SharedMemObj "dpdk_collectd_stats_0" EnabledPortMask 0xffff PortName "interface1" PortName "interface2" @@ -2434,7 +2435,12 @@ sockets in MB. This is an optional value. =back -=over 4 +=over 3 + +=item B I +A string containing the name of the shared memory object that should be used to +share stats from the DPDK secondary process to the collectd dpdkstat plugin. +Defaults to dpdk_collectd_stats if no other value is configured. =item B I diff --git a/src/dpdkstat.c b/src/dpdkstat.c index fd110976..4c73eab9 100644 --- a/src/dpdkstat.c +++ b/src/dpdkstat.c @@ -94,12 +94,12 @@ typedef struct dpdk_stats_ctx_s dpdk_stats_ctx_t; #define DPDK_STATS_CTX_GET(a) ((dpdk_stats_ctx_t *)dpdk_helper_priv_get(a)) dpdk_helper_ctx_t *g_hc = NULL; - +static char g_shm_name[DATA_MAX_NAME_LEN] = DPDK_STATS_NAME; +static int dpdk_stats_reinit_helper(); static void dpdk_stats_default_config(void) { dpdk_stats_ctx_t *ec = DPDK_STATS_CTX_GET(g_hc); ec->config.interval = plugin_get_interval(); - for (int i = 0; i < RTE_MAX_ETHPORTS; i++) { ec->config.port_name[i][0] = 0; } @@ -114,16 +114,15 @@ static int dpdk_stats_preinit(void) { return 0; } - int ret = dpdk_helper_init(DPDK_STATS_NAME, sizeof(dpdk_stats_ctx_t), &g_hc); + int ret = dpdk_helper_init(g_shm_name, sizeof(dpdk_stats_ctx_t), &g_hc); if (ret != 0) { char errbuf[ERR_BUF_SIZE]; ERROR("%s: failed to initialize %s helper(error: %s)", DPDK_STATS_PLUGIN, - DPDK_STATS_NAME, sstrerror(errno, errbuf, sizeof(errbuf))); + g_shm_name, sstrerror(errno, errbuf, sizeof(errbuf))); return ret; } dpdk_stats_default_config(); - return ret; } @@ -144,6 +143,12 @@ static int dpdk_stats_config(oconfig_item_t *ci) { ctx->config.enabled_port_mask = child->values[0].value.number; DEBUG("%s: Enabled Port Mask 0x%X", DPDK_STATS_PLUGIN, ctx->config.enabled_port_mask); + } else if (strcasecmp("SharedMemObj", child->key) == 0) { + cf_util_get_string_buffer(child, g_shm_name, + sizeof(g_shm_name)); + DEBUG("%s: Shared memory object %s", DPDK_STATS_PLUGIN, + g_shm_name); + dpdk_stats_reinit_helper(); } else if (strcasecmp("EAL", child->key) == 0) { ret = dpdk_helper_eal_config_parse(g_hc, child); if (ret) @@ -444,11 +449,11 @@ static int dpdk_stats_reinit_helper() { g_hc = NULL; int ret; - ret = dpdk_helper_init(DPDK_STATS_NAME, data_size, &g_hc); + ret = dpdk_helper_init(g_shm_name, data_size, &g_hc); if (ret != 0) { char errbuf[ERR_BUF_SIZE]; ERROR("%s: failed to initialize %s helper(error: %s)", DPDK_STATS_PLUGIN, - DPDK_STATS_NAME, sstrerror(errno, errbuf, sizeof(errbuf))); + g_shm_name, sstrerror(errno, errbuf, sizeof(errbuf))); return ret; } @@ -492,7 +497,6 @@ static int dpdk_stats_read(user_data_t *ud) { static int dpdk_stats_init(void) { DPDK_STATS_TRACE(); - int ret = 0; ret = dpdk_stats_preinit(); @@ -512,7 +516,7 @@ static int dpdk_stats_shutdown(void) { g_hc = NULL; if (ret != 0) { ERROR("%s: failed to cleanup %s helper", DPDK_STATS_PLUGIN, - DPDK_STATS_NAME); + g_shm_name); return ret; } -- 2.11.0