1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2018 Intel Corporation
9 #include <rte_ethdev.h>
10 #include <rte_metrics.h>
11 #include <rte_option.h>
13 #include "rte_telemetry.h"
14 #include "rte_telemetry_internal.h"
18 static telemetry_impl *static_telemetry;
21 rte_telemetry_run(void *userdata)
23 struct telemetry_impl *telemetry = userdata;
25 if (telemetry == NULL) {
26 TELEMETRY_LOG_WARN("TELEMETRY could not be initialised");
34 *rte_telemetry_run_thread_func(void *userdata)
37 struct telemetry_impl *telemetry = userdata;
39 if (telemetry == NULL) {
40 TELEMETRY_LOG_ERR("%s passed a NULL instance", __func__);
44 while (telemetry->thread_status) {
45 rte_telemetry_run(telemetry);
46 ret = usleep(SLEEP_TIME);
48 TELEMETRY_LOG_ERR("Calling thread could not be put to sleep");
53 int32_t __rte_experimental
58 const char *telemetry_ctrl_thread = "telemetry";
60 if (static_telemetry) {
61 TELEMETRY_LOG_WARN("TELEMETRY structure already initialised");
65 static_telemetry = calloc(1, sizeof(struct telemetry_impl));
66 if (static_telemetry == NULL) {
67 TELEMETRY_LOG_ERR("Memory could not be allocated");
71 static_telemetry->socket_id = rte_socket_id();
72 rte_metrics_init(static_telemetry->socket_id);
74 ret = pthread_attr_init(&attr);
76 TELEMETRY_LOG_ERR("Pthread attribute init failed");
80 ret = rte_ctrl_thread_create(&static_telemetry->thread_id,
81 telemetry_ctrl_thread, &attr, rte_telemetry_run_thread_func,
82 (void *)static_telemetry);
83 static_telemetry->thread_status = 1;
86 ret = rte_telemetry_cleanup();
88 TELEMETRY_LOG_ERR("TELEMETRY cleanup failed");
95 int32_t __rte_experimental
96 rte_telemetry_cleanup(void)
98 struct telemetry_impl *telemetry = static_telemetry;
99 telemetry->thread_status = 0;
100 pthread_join(telemetry->thread_id, NULL);
102 static_telemetry = NULL;
106 int telemetry_log_level;
108 static struct rte_option option = {
109 .opt_str = "--telemetry",
110 .cb = &rte_telemetry_init,
114 RTE_INIT(rte_telemetry_register)
116 telemetry_log_level = rte_log_register("lib.telemetry");
117 if (telemetry_log_level >= 0)
118 rte_log_set_level(telemetry_log_level, RTE_LOG_ERR);
120 rte_option_register(&option);