The tracepoints added are used to track lcore role and status,
as well as service mapping and service runstates. These
tracepoints are then used in analyses in Trace Compass.

Signed-off-by: Arnaud Fiorini <arnaud.fior...@polymtl.ca>
---
 .mailmap                                 |  1 +
 lib/eal/common/eal_common_thread.c       |  4 ++
 lib/eal/common/eal_common_trace_points.c | 21 +++++++++
 lib/eal/common/rte_service.c             | 18 ++++++-
 lib/eal/include/eal_trace_internal.h     | 60 ++++++++++++++++++++++++
 5 files changed, 103 insertions(+), 1 deletion(-)

diff --git a/.mailmap b/.mailmap
index dc30369117..2a0b132572 100644
--- a/.mailmap
+++ b/.mailmap
@@ -120,6 +120,7 @@ Archana Muniganti <march...@marvell.com> 
<muniganti.arch...@caviumnetworks.com>
 Archit Pandey <architpandeyn...@gmail.com>
 Arkadiusz Kubalewski <arkadiusz.kubalew...@intel.com>
 Arkadiusz Kusztal <arkadiuszx.kusz...@intel.com>
+Arnaud Fiorini <arnaud.fior...@polymtl.ca>
 Arnon Warshavsky <ar...@qwilt.com>
 Arshdeep Kaur <arshdeep.k...@intel.com>
 Artem V. Andreev <artem.andr...@oktetlabs.ru>
diff --git a/lib/eal/common/eal_common_thread.c 
b/lib/eal/common/eal_common_thread.c
index 079a385630..25dbdd68e3 100644
--- a/lib/eal/common/eal_common_thread.c
+++ b/lib/eal/common/eal_common_thread.c
@@ -205,6 +205,8 @@ eal_thread_loop(void *arg)
                                __ATOMIC_ACQUIRE)) == NULL)
                        rte_pause();
 
+               rte_eal_trace_thread_lcore_running(lcore_id, f);
+
                /* call the function and store the return value */
                fct_arg = lcore_config[lcore_id].arg;
                ret = f(fct_arg);
@@ -219,6 +221,8 @@ eal_thread_loop(void *arg)
                 */
                __atomic_store_n(&lcore_config[lcore_id].state, WAIT,
                        __ATOMIC_RELEASE);
+
+               rte_eal_trace_thread_lcore_stopped(lcore_id);
        }
 
        /* never reached */
diff --git a/lib/eal/common/eal_common_trace_points.c 
b/lib/eal/common/eal_common_trace_points.c
index 3f5bf5c55c..0f1240ea3a 100644
--- a/lib/eal/common/eal_common_trace_points.c
+++ b/lib/eal/common/eal_common_trace_points.c
@@ -70,6 +70,27 @@ RTE_TRACE_POINT_REGISTER(rte_eal_trace_thread_remote_launch,
        lib.eal.thread.remote.launch)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_thread_lcore_ready,
        lib.eal.thread.lcore.ready)
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_thread_lcore_running,
+       lib.eal.thread.lcore.running)
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_thread_lcore_stopped,
+       lib.eal.thread.lcore.stopped)
+
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_service_map_lcore,
+       lib.eal.service.map.lcore)
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_service_lcore_state_change,
+       lib.eal.service.lcore.state.change)
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_service_lcore_start,
+       lib.eal.service.lcore.start)
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_service_lcore_stop,
+       lib.eal.service.lcore.stop)
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_service_run_begin,
+       lib.eal.service.run.begin)
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_service_runstate_set,
+       lib.eal.service.run.state.set)
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_service_run_end,
+       lib.eal.service.run.end)
+RTE_TRACE_POINT_REGISTER(rte_eal_trace_service_component_register,
+       lib.eal.service.component.register)
 
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_intr_callback_register,
        lib.eal.intr.register)
diff --git a/lib/eal/common/rte_service.c b/lib/eal/common/rte_service.c
index 42ca1d001d..5daec007aa 100644
--- a/lib/eal/common/rte_service.c
+++ b/lib/eal/common/rte_service.c
@@ -9,6 +9,7 @@
 #include <rte_service.h>
 #include <rte_service_component.h>
 
+#include <eal_trace_internal.h>
 #include <rte_lcore.h>
 #include <rte_branch_prediction.h>
 #include <rte_common.h>
@@ -16,6 +17,7 @@
 #include <rte_atomic.h>
 #include <rte_malloc.h>
 #include <rte_spinlock.h>
+#include <rte_trace_point.h>
 
 #include "eal_private.h"
 
@@ -276,6 +278,8 @@ rte_service_component_register(const struct 
rte_service_spec *spec,
        if (id_ptr)
                *id_ptr = free_slot;
 
+       rte_eal_trace_service_component_register(free_slot, spec->name);
+
        return 0;
 }
 
@@ -336,6 +340,7 @@ rte_service_runstate_set(uint32_t id, uint32_t runstate)
                __atomic_store_n(&s->app_runstate, RUNSTATE_STOPPED,
                        __ATOMIC_RELEASE);
 
+       rte_eal_trace_service_runstate_set(id, runstate);
        return 0;
 }
 
@@ -427,11 +432,15 @@ service_run(uint32_t i, struct core_state *cs, uint64_t 
service_mask,
                if (!rte_spinlock_trylock(&s->execute_lock))
                        return -EBUSY;
 
+               rte_eal_trace_service_run_begin(i, rte_lcore_id());
                service_runner_do_callback(s, cs, i);
                rte_spinlock_unlock(&s->execute_lock);
-       } else
+       } else {
+               rte_eal_trace_service_run_begin(i, rte_lcore_id());
                service_runner_do_callback(s, cs, i);
+       }
 
+       rte_eal_trace_service_run_end(i, rte_lcore_id());
        return 0;
 }
 
@@ -658,6 +667,7 @@ int32_t
 rte_service_map_lcore_set(uint32_t id, uint32_t lcore, uint32_t enabled)
 {
        uint32_t on = enabled > 0;
+       rte_eal_trace_service_map_lcore(id, lcore, enabled);
        return service_update(id, lcore, &on, 0);
 }
 
@@ -683,6 +693,8 @@ set_lcore_state(uint32_t lcore, int32_t state)
 
        /* update per-lcore optimized state tracking */
        lcore_states[lcore].is_service_core = (state == ROLE_SERVICE);
+
+       rte_eal_trace_service_lcore_state_change(lcore, state);
 }
 
 int32_t
@@ -780,6 +792,8 @@ rte_service_lcore_start(uint32_t lcore)
         */
        __atomic_store_n(&cs->runstate, RUNSTATE_RUNNING, __ATOMIC_RELEASE);
 
+       rte_eal_trace_service_lcore_start(lcore);
+
        int ret = rte_eal_remote_launch(service_runner_func, 0, lcore);
        /* returns -EBUSY if the core is already launched, 0 on success */
        return ret;
@@ -824,6 +838,8 @@ rte_service_lcore_stop(uint32_t lcore)
        __atomic_store_n(&lcore_states[lcore].runstate, RUNSTATE_STOPPED,
                __ATOMIC_RELEASE);
 
+       rte_eal_trace_service_lcore_stop(lcore);
+
        return 0;
 }
 
diff --git a/lib/eal/include/eal_trace_internal.h 
b/lib/eal/include/eal_trace_internal.h
index 57d6de2535..9a37a08567 100644
--- a/lib/eal/include/eal_trace_internal.h
+++ b/lib/eal/include/eal_trace_internal.h
@@ -174,6 +174,66 @@ RTE_TRACE_POINT(
        rte_trace_point_emit_u32(lcore_id);
        rte_trace_point_emit_string(cpuset);
 )
+RTE_TRACE_POINT_FP(
+       rte_eal_trace_thread_lcore_running,
+       RTE_TRACE_POINT_ARGS(unsigned int lcore_id, void *f),
+       rte_trace_point_emit_u32(lcore_id);
+       rte_trace_point_emit_ptr(f);
+)
+RTE_TRACE_POINT_FP(
+       rte_eal_trace_thread_lcore_stopped,
+       RTE_TRACE_POINT_ARGS(unsigned int lcore_id),
+       rte_trace_point_emit_u32(lcore_id);
+)
+
+/* Service */
+RTE_TRACE_POINT(
+       rte_eal_trace_service_map_lcore,
+       RTE_TRACE_POINT_ARGS(unsigned int id, unsigned int lcore_id, unsigned 
int enabled),
+       rte_trace_point_emit_u32(id);
+       rte_trace_point_emit_u32(lcore_id);
+       rte_trace_point_emit_u32(enabled);
+)
+RTE_TRACE_POINT(
+       rte_eal_trace_service_lcore_state_change,
+       RTE_TRACE_POINT_ARGS(unsigned int lcore_id, int lcore_state),
+       rte_trace_point_emit_u32(lcore_id);
+       rte_trace_point_emit_i32(lcore_state);
+)
+RTE_TRACE_POINT(
+       rte_eal_trace_service_lcore_start,
+       RTE_TRACE_POINT_ARGS(unsigned int lcore_id),
+       rte_trace_point_emit_u32(lcore_id);
+)
+RTE_TRACE_POINT(
+       rte_eal_trace_service_lcore_stop,
+       RTE_TRACE_POINT_ARGS(unsigned int lcore_id),
+       rte_trace_point_emit_u32(lcore_id);
+)
+RTE_TRACE_POINT_FP(
+       rte_eal_trace_service_run_begin,
+       RTE_TRACE_POINT_ARGS(unsigned int id, unsigned int lcore_id),
+       rte_trace_point_emit_u32(id);
+       rte_trace_point_emit_u32(lcore_id);
+)
+RTE_TRACE_POINT(
+       rte_eal_trace_service_runstate_set,
+       RTE_TRACE_POINT_ARGS(unsigned int id, unsigned int run_state),
+       rte_trace_point_emit_u32(id);
+       rte_trace_point_emit_u32(run_state);
+)
+RTE_TRACE_POINT(
+       rte_eal_trace_service_run_end,
+       RTE_TRACE_POINT_ARGS(unsigned int id, unsigned int lcore_id),
+       rte_trace_point_emit_u32(id);
+       rte_trace_point_emit_u32(lcore_id);
+)
+RTE_TRACE_POINT(
+       rte_eal_trace_service_component_register,
+       RTE_TRACE_POINT_ARGS(int id, const char *service_name),
+       rte_trace_point_emit_i32(id);
+       rte_trace_point_emit_string(service_name);
+)
 
 #ifdef __cplusplus
 }
-- 
2.25.1

Reply via email to