eal: add telemetry as dependency

This patch moves telemetry further down the build, and adds it as a
dependency for EAL. Telemetry V2 is now configured to build by default,
and the legacy support is built when the telemetry config flag is set.

Telemetry now has EAL flags, shown below:
"--telemetry" = Enables telemetry (this is default if no flags given)
"--no-telemetry" = Disables telemetry

When telemetry is enabled, it will attempt to open the new socket
version, and also the legacy support socket (this will depend on Jansson
external dependency and telemetry config flag, as before).

Signed-off-by: Ciara Power <ciara.power@intel.com>
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Reviewed-by: Keith Wiles <keith.wiles@intel.com>
This commit is contained in:
Ciara Power 2020-04-30 17:01:34 +01:00 committed by Thomas Monjalon
parent 63e7cb1bf1
commit eeb486f3ba
27 changed files with 69 additions and 82 deletions

View File

@ -929,7 +929,7 @@ CONFIG_RTE_LIBRTE_BITRATE=y
CONFIG_RTE_LIBRTE_LATENCY_STATS=y
#
# Compile librte_telemetry
# Compile librte_telemetry legacy support
#
CONFIG_RTE_LIBRTE_TELEMETRY=n

View File

@ -60,7 +60,7 @@ else
CFLAGS += -DALLOW_EXPERIMENTAL_API
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
LDLIBS += -lm
LDLIBS += -lm -lrte_telemetry
# workaround for a gcc bug with noreturn attribute
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12603
@ -68,10 +68,6 @@ ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
CFLAGS_main.o += -Wno-return-type
endif
ifeq ($(CONFIG_RTE_LIBRTE_TELEMETRY),y)
LDLIBS += -lrte_telemetry
endif
include $(RTE_SDK)/mk/rte.extapp.mk
endif
endif

View File

@ -46,9 +46,7 @@
#include <rte_spinlock.h>
#include <rte_power_empty_poll.h>
#include <rte_metrics.h>
#ifdef RTE_LIBRTE_TELEMETRY
#include <rte_telemetry.h>
#endif
#include "perf_core.h"
#include "main.h"
@ -2116,7 +2114,7 @@ update_telemetry(__rte_unused struct rte_timer *tim,
if (ret < 0)
RTE_LOG(WARNING, POWER, "failed to update metrcis\n");
}
#ifdef RTE_LIBRTE_TELEMETRY
static int
handle_app_stats(const char *cmd __rte_unused,
const char *params __rte_unused,
@ -2132,7 +2130,7 @@ handle_app_stats(const char *cmd __rte_unused,
values[i]);
return 0;
}
#endif
static void
telemetry_setup_timer(void)
{
@ -2532,11 +2530,9 @@ main(int argc, char **argv)
rte_spinlock_init(&stats[lcore_id].telemetry_lock);
}
rte_timer_init(&telemetry_timer);
#ifdef RTE_LIBRTE_TELEMETRY
rte_telemetry_register_cmd("/l3fwd-power/stats",
handle_app_stats,
"Returns global power stats. Parameters: None");
#endif
rte_eal_mp_remote_launch(main_telemetry_loop, NULL,
SKIP_MASTER);
}

View File

@ -12,11 +12,7 @@ if not dpdk_conf.has('RTE_LIBRTE_POWER')
endif
allow_experimental_apis = true
deps += ['power', 'timer', 'lpm', 'hash', 'metrics']
deps += ['power', 'timer', 'lpm', 'hash', 'metrics', 'telemetry']
sources = files(
'main.c', 'perf_core.c'
)
if dpdk_conf.has('RTE_LIBRTE_TELEMETRY')
deps += ['telemetry']
endif

View File

@ -4,8 +4,9 @@
include $(RTE_SDK)/mk/rte.vars.mk
DIRS-$(CONFIG_RTE_LIBRTE_KVARGS) += librte_kvargs
DIRS-y += librte_telemetry
DIRS-$(CONFIG_RTE_LIBRTE_EAL) += librte_eal
DEPDIRS-librte_eal := librte_kvargs
DEPDIRS-librte_eal := librte_kvargs librte_telemetry
DIRS-$(CONFIG_RTE_LIBRTE_PCI) += librte_pci
DEPDIRS-librte_pci := librte_eal
DIRS-$(CONFIG_RTE_LIBRTE_RING) += librte_ring
@ -22,8 +23,6 @@ DIRS-$(CONFIG_RTE_LIBRTE_CFGFILE) += librte_cfgfile
DEPDIRS-librte_cfgfile := librte_eal
DIRS-$(CONFIG_RTE_LIBRTE_CMDLINE) += librte_cmdline
DEPDIRS-librte_cmdline := librte_eal librte_net
DIRS-$(CONFIG_RTE_LIBRTE_TELEMETRY) += librte_telemetry
DEPDIRS-librte_telemetry := librte_eal
DIRS-$(CONFIG_RTE_LIBRTE_ETHER) += librte_ethdev
DEPDIRS-librte_ethdev := librte_net librte_eal librte_mempool librte_ring
DEPDIRS-librte_ethdev += librte_mbuf

View File

@ -93,6 +93,8 @@ eal_long_options[] = {
{OPT_LEGACY_MEM, 0, NULL, OPT_LEGACY_MEM_NUM },
{OPT_SINGLE_FILE_SEGMENTS, 0, NULL, OPT_SINGLE_FILE_SEGMENTS_NUM},
{OPT_MATCH_ALLOCATIONS, 0, NULL, OPT_MATCH_ALLOCATIONS_NUM},
{OPT_TELEMETRY, 0, NULL, OPT_TELEMETRY_NUM },
{OPT_NO_TELEMETRY, 0, NULL, OPT_NO_TELEMETRY_NUM },
{0, 0, NULL, 0 }
};
@ -1501,6 +1503,11 @@ eal_parse_common_option(int opt, const char *optarg,
return -1;
}
break;
case OPT_TELEMETRY_NUM:
break;
case OPT_NO_TELEMETRY_NUM:
conf->no_telemetry = 1;
break;
/* don't know what to do, leave this to caller */
default:
@ -1769,6 +1776,8 @@ eal_common_usage(void)
" --"OPT_IN_MEMORY" Operate entirely in memory. This will\n"
" disable secondary process support\n"
" --"OPT_BASE_VIRTADDR" Base virtual address\n"
" --"OPT_TELEMETRY" Enable telemetry support (on by default)\n"
" --"OPT_NO_TELEMETRY" Disable telemetry support\n"
"\nEAL options for DEBUG use only:\n"
" --"OPT_HUGE_UNLINK" Unlink hugepage files after init\n"
" --"OPT_NO_HUGE" Use malloc instead of hugetlbfs\n"

View File

@ -82,6 +82,7 @@ struct internal_config {
rte_cpuset_t ctrl_cpuset; /**< cpuset for ctrl threads */
volatile unsigned int init_complete;
/**< indicates whether EAL has completed initialization */
unsigned int no_telemetry; /**< true to disable Telemetry */
};
extern struct internal_config internal_config; /**< Global EAL configuration. */

View File

@ -77,6 +77,10 @@ enum {
OPT_IOVA_MODE_NUM,
#define OPT_MATCH_ALLOCATIONS "match-allocations"
OPT_MATCH_ALLOCATIONS_NUM,
#define OPT_TELEMETRY "telemetry"
OPT_TELEMETRY_NUM,
#define OPT_NO_TELEMETRY "no-telemetry"
OPT_NO_TELEMETRY_NUM,
OPT_LONG_MAX_NUM
};

View File

@ -18,6 +18,7 @@ LDLIBS += -lexecinfo
LDLIBS += -lpthread
LDLIBS += -lgcc_s
LDLIBS += -lrte_kvargs
LDLIBS += -lrte_telemetry
EXPORT_MAP := ../rte_eal_version.map

View File

@ -44,6 +44,7 @@
#include <rte_option.h>
#include <rte_atomic.h>
#include <malloc_heap.h>
#include <rte_telemetry.h>
#include "eal_private.h"
#include "eal_thread.h"
@ -960,6 +961,14 @@ rte_eal_init(int argc, char **argv)
rte_eal_init_alert("Cannot clear runtime directory\n");
return -1;
}
if (!internal_config.no_telemetry) {
const char *error_str;
if (rte_telemetry_init(rte_eal_get_runtime_dir(),
&error_str) != 0) {
rte_eal_init_alert(error_str);
return -1;
}
}
eal_mcfg_complete();

View File

@ -18,4 +18,4 @@ sources += files(
'eal_timer.c',
)
deps += ['kvargs']
deps += ['kvargs', 'telemetry']

View File

@ -19,6 +19,7 @@ LDLIBS += -lpthread
LDLIBS += -lgcc_s
LDLIBS += -lrt
LDLIBS += -lrte_kvargs
LDLIBS += -lrte_telemetry
ifeq ($(CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES),y)
LDLIBS += -lnuma
endif

View File

@ -51,6 +51,7 @@
#include <malloc_heap.h>
#include <rte_vfio.h>
#include <rte_option.h>
#include <rte_telemetry.h>
#include "eal_private.h"
#include "eal_thread.h"
@ -1298,6 +1299,14 @@ rte_eal_init(int argc, char **argv)
rte_eal_init_alert("Cannot clear runtime directory\n");
return -1;
}
if (!internal_config.no_telemetry) {
const char *error_str;
if (rte_telemetry_init(rte_eal_get_runtime_dir(),
&error_str) != 0) {
rte_eal_init_alert(error_str);
return -1;
}
}
eal_mcfg_complete();

View File

@ -21,7 +21,7 @@ sources += files(
'eal_vfio_mp_sync.c',
)
deps += ['kvargs']
deps += ['kvargs', 'telemetry']
if has_libnuma == 1
dpdk_conf.set10('RTE_EAL_NUMA_AWARE_HUGEPAGES', true)
endif

View File

@ -11,7 +11,10 @@ subdir(exec_env)
subdir(arch_subdir)
deps += 'kvargs'
deps += ['kvargs']
if not is_windows
deps += ['telemetry']
endif
if dpdk_conf.has('RTE_USE_LIBBSD')
ext_deps += libbsd
endif

View File

@ -11,7 +11,7 @@ LIB = librte_ethdev.a
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
LDLIBS += -lrte_net -lrte_eal -lrte_mempool -lrte_ring
LDLIBS += -lrte_mbuf -lrte_kvargs -lrte_meter
LDLIBS += -lrte_mbuf -lrte_kvargs -lrte_meter -lrte_telemetry
EXPORT_MAP := rte_ethdev_version.map
@ -24,10 +24,6 @@ SRCS-y += rte_mtr.c
SRCS-y += ethdev_profile.c
SRCS-y += ethdev_trace_points.c
ifeq ($(CONFIG_RTE_LIBRTE_TELEMETRY),y)
LDLIBS += -lrte_telemetry
endif
#
# Export include files
#

View File

@ -27,8 +27,4 @@ headers = files('rte_ethdev.h',
'rte_tm.h',
'rte_tm_driver.h')
deps += ['net', 'kvargs', 'meter']
if dpdk_conf.has('RTE_LIBRTE_TELEMETRY')
deps += ['telemetry']
endif
deps += ['net', 'kvargs', 'meter', 'telemetry']

View File

@ -38,9 +38,7 @@
#include <rte_kvargs.h>
#include <rte_class.h>
#include <rte_ether.h>
#ifdef RTE_LIBRTE_TELEMETRY
#include <rte_telemetry.h>
#endif
#include "rte_ethdev_trace.h"
#include "rte_ethdev.h"
@ -5202,7 +5200,6 @@ rte_eth_devargs_parse(const char *dargs, struct rte_eth_devargs *eth_da)
return result;
}
#ifdef RTE_LIBRTE_TELEMETRY
static int
handle_port_list(const char *cmd __rte_unused,
const char *params __rte_unused,
@ -5295,14 +5292,12 @@ handle_port_link_status(const char *cmd __rte_unused,
"full-duplex" : "half-duplex");
return 0;
}
#endif
RTE_INIT(ethdev_init_log)
{
rte_eth_dev_logtype = rte_log_register("lib.ethdev");
if (rte_eth_dev_logtype >= 0)
rte_log_set_level(rte_eth_dev_logtype, RTE_LOG_INFO);
#ifdef RTE_LIBRTE_TELEMETRY
rte_telemetry_register_cmd("/ethdev/list", handle_port_list,
"Returns list of available ethdev ports. Takes no parameters");
rte_telemetry_register_cmd("/ethdev/xstats", handle_port_xstats,
@ -5310,5 +5305,4 @@ RTE_INIT(ethdev_init_log)
rte_telemetry_register_cmd("/ethdev/link_status",
handle_port_link_status,
"Returns the link status for a port. Parameters: int port_id");
#endif
}

View File

@ -9,11 +9,7 @@ LIB = librte_rawdev.a
# build flags
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
LDLIBS += -lrte_eal
ifeq ($(CONFIG_RTE_LIBRTE_TELEMETRY),y)
LDLIBS += -lrte_telemetry
endif
LDLIBS += -lrte_eal -lrte_telemetry
# library source files
SRCS-y += rte_rawdev.c

View File

@ -4,6 +4,4 @@
sources = files('rte_rawdev.c')
headers = files('rte_rawdev.h', 'rte_rawdev_pmd.h')
if dpdk_conf.has('RTE_LIBRTE_TELEMETRY')
deps += ['telemetry']
endif
deps += ['telemetry']

View File

@ -29,9 +29,7 @@
#include <rte_common.h>
#include <rte_malloc.h>
#include <rte_errno.h>
#ifdef RTE_LIBRTE_TELEMETRY
#include <rte_telemetry.h>
#endif
#include "rte_rawdev.h"
#include "rte_rawdev_pmd.h"
@ -547,7 +545,6 @@ rte_rawdev_pmd_release(struct rte_rawdev *rawdev)
return 0;
}
#ifdef RTE_LIBRTE_TELEMETRY
static int
handle_dev_list(const char *cmd __rte_unused,
const char *params __rte_unused,
@ -615,17 +612,14 @@ handle_dev_xstats(const char *cmd __rte_unused,
free(rawdev_xstats);
return 0;
}
#endif
RTE_INIT(librawdev_init_log)
{
librawdev_logtype = rte_log_register("lib.rawdev");
if (librawdev_logtype >= 0)
rte_log_set_level(librawdev_logtype, RTE_LOG_INFO);
#ifdef RTE_LIBRTE_TELEMETRY
rte_telemetry_register_cmd("/rawdev/list", handle_dev_list,
"Returns list of available rawdev ports. Takes no parameters");
rte_telemetry_register_cmd("/rawdev/xstats", handle_dev_xstats,
"Returns the xstats for a rawdev port. Parameters: int port_id");
#endif
}

View File

@ -13,17 +13,16 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/include
CFLAGS += -I$(RTE_SDK)/lib/librte_eal/$(ARCH_DIR)/include
CFLAGS += -pthread
LDLIBS += -lrte_eal
LDLIBS += -lpthread
EXPORT_MAP := rte_telemetry_version.map
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_TELEMETRY) += telemetry.c
SRCS-$(CONFIG_RTE_LIBRTE_TELEMETRY) += telemetry_data.c
SRCS-$(CONFIG_RTE_LIBRTE_TELEMETRY) += telemetry_legacy.c
SRCS-y += telemetry.c
SRCS-y += telemetry_data.c
SRCS-y += telemetry_legacy.c
# export include files
SYMLINK-$(CONFIG_RTE_LIBRTE_TELEMETRY)-include := rte_telemetry.h
SYMLINK-y-include := rte_telemetry.h
include $(RTE_SDK)/mk/rte.lib.mk

View File

@ -6,4 +6,3 @@ includes = [global_inc]
sources = files('telemetry.c', 'telemetry_data.c', 'telemetry_legacy.c')
headers = files('rte_telemetry.h')
includes += include_directories('../librte_metrics')
dpdk_app_link_libraries += ['telemetry']

View File

@ -250,5 +250,6 @@ rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help);
*/
__rte_experimental
int
rte_telemetry_init(void);
rte_telemetry_init(const char *runtime_dir, const char **err_str);
#endif

View File

@ -14,7 +14,6 @@
#include <rte_common.h>
#include <rte_spinlock.h>
#include <rte_version.h>
#include <rte_option.h>
#include "rte_telemetry.h"
#include "telemetry_json.h"
@ -397,28 +396,16 @@ telemetry_v2_init(const char *runtime_dir)
}
int32_t
rte_telemetry_init(void)
rte_telemetry_init(const char *runtime_dir, const char **err_str)
{
const char *error_str;
if (telemetry_v2_init(rte_eal_get_runtime_dir()) != 0) {
error_str = telemetry_log_error;
printf("Error initialising telemetry - %s", error_str);
if (telemetry_v2_init(runtime_dir) != 0) {
*err_str = telemetry_log_error;
printf("Error initialising telemetry - %s", *err_str);
return -1;
}
if (telemetry_legacy_init(rte_eal_get_runtime_dir()) != 0) {
error_str = telemetry_log_error;
printf("No telemetry legacy support- %s", error_str);
if (telemetry_legacy_init(runtime_dir) != 0) {
*err_str = telemetry_log_error;
printf("No telemetry legacy support- %s", *err_str);
}
return 0;
}
static struct rte_option option = {
.name = "telemetry",
.usage = "Enable telemetry backend",
.cb = &rte_telemetry_init,
.enabled = 0
};
RTE_INIT(telemetry_register_op) {
rte_option_register(&option);
}

View File

@ -10,8 +10,8 @@
# core libs which are widely reused, so their deps are kept to a minimum.
libraries = [
'kvargs', # eal depends on kvargs
'telemetry', # basic info querying
'eal', # everything depends on eal
'telemetry',
'ring',
'rcu', # rcu depends on ring
'mempool', 'mbuf', 'net', 'meter', 'ethdev', 'pci', # core

View File

@ -52,6 +52,9 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_ACL) += -lrte_acl
_LDLIBS-$(CONFIG_RTE_LIBRTE_JOBSTATS) += -lrte_jobstats
_LDLIBS-$(CONFIG_RTE_LIBRTE_METRICS) += --whole-archive
_LDLIBS-$(CONFIG_RTE_LIBRTE_METRICS) += -lrte_metrics
ifeq ($(CONFIG_RTE_LIBRTE_TELEMETRY),y)
_LDLIBS-$(CONFIG_RTE_LIBRTE_METRICS) += -ljansson
endif
_LDLIBS-$(CONFIG_RTE_LIBRTE_METRICS) += --no-whole-archive
_LDLIBS-$(CONFIG_RTE_LIBRTE_BITRATE) += -lrte_bitratestats
_LDLIBS-$(CONFIG_RTE_LIBRTE_LATENCY_STATS) += -lrte_latencystats
@ -74,6 +77,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_HASH) += -lrte_hash
_LDLIBS-$(CONFIG_RTE_LIBRTE_MEMBER) += -lrte_member
_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST) += -lrte_vhost
_LDLIBS-$(CONFIG_RTE_LIBRTE_KVARGS) += -lrte_kvargs
_LDLIBS-y += -lrte_telemetry
_LDLIBS-$(CONFIG_RTE_LIBRTE_MBUF) += -lrte_mbuf
_LDLIBS-$(CONFIG_RTE_LIBRTE_NET) += -lrte_net
_LDLIBS-$(CONFIG_RTE_LIBRTE_ETHER) += -lrte_ethdev
@ -90,7 +94,6 @@ _LDLIBS-$(CONFIG_RTE_DRIVER_MEMPOOL_RING) += -lrte_mempool_ring
_LDLIBS-$(CONFIG_RTE_LIBRTE_OCTEONTX2_MEMPOOL) += -lrte_mempool_octeontx2
_LDLIBS-$(CONFIG_RTE_LIBRTE_RING) += -lrte_ring
_LDLIBS-$(CONFIG_RTE_LIBRTE_PCI) += -lrte_pci
_LDLIBS-$(CONFIG_RTE_LIBRTE_TELEMETRY) += -lrte_telemetry -ljansson
_LDLIBS-$(CONFIG_RTE_LIBRTE_EAL) += -lrte_eal
_LDLIBS-$(CONFIG_RTE_LIBRTE_CMDLINE) += -lrte_cmdline
_LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER) += -lrte_reorder