xref: /dpdk/lib/eal/common/eal_trace.h (revision 0f1dc8cb671203d52488fd66936f2fe6dcca03cc)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(C) 2020 Marvell International Ltd.
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #ifndef __EAL_TRACE_H
699a2dd95SBruce Richardson #define __EAL_TRACE_H
799a2dd95SBruce Richardson 
899a2dd95SBruce Richardson #include <rte_cycles.h>
999a2dd95SBruce Richardson #include <rte_log.h>
1099a2dd95SBruce Richardson #include <rte_malloc.h>
1199a2dd95SBruce Richardson #include <rte_spinlock.h>
1299a2dd95SBruce Richardson #include <rte_trace.h>
1399a2dd95SBruce Richardson #include <rte_trace_point.h>
1499a2dd95SBruce Richardson #include <rte_uuid.h>
1599a2dd95SBruce Richardson 
1699a2dd95SBruce Richardson #include "eal_private.h"
1799a2dd95SBruce Richardson #include "eal_thread.h"
1899a2dd95SBruce Richardson 
19*0f1dc8cbSTyler Retzlaff #define trace_err(...) \
20*0f1dc8cbSTyler Retzlaff 	RTE_LOG_LINE_PREFIX(ERR, EAL, "%s():%u ", __func__ RTE_LOG_COMMA __LINE__, __VA_ARGS__)
2199a2dd95SBruce Richardson 
22*0f1dc8cbSTyler Retzlaff #define trace_crit(...) \
23*0f1dc8cbSTyler Retzlaff 	RTE_LOG_LINE_PREFIX(CRIT, EAL, "%s():%u ", __func__ RTE_LOG_COMMA __LINE__, __VA_ARGS__)
2499a2dd95SBruce Richardson 
2599a2dd95SBruce Richardson #define TRACE_CTF_MAGIC 0xC1FC1FC1
2699a2dd95SBruce Richardson #define TRACE_MAX_ARGS	32
2799a2dd95SBruce Richardson 
2899a2dd95SBruce Richardson struct trace_point {
2999a2dd95SBruce Richardson 	STAILQ_ENTRY(trace_point) next;
3099a2dd95SBruce Richardson 	rte_trace_point_t *handle;
31477cc313SDavid Marchand 	const char *name;
3299a2dd95SBruce Richardson 	char *ctf_field;
3399a2dd95SBruce Richardson };
3499a2dd95SBruce Richardson 
3599a2dd95SBruce Richardson enum trace_area_e {
3699a2dd95SBruce Richardson 	TRACE_AREA_HEAP,
3799a2dd95SBruce Richardson 	TRACE_AREA_HUGEPAGE,
3899a2dd95SBruce Richardson };
3999a2dd95SBruce Richardson 
4099a2dd95SBruce Richardson struct thread_mem_meta {
4199a2dd95SBruce Richardson 	void *mem;
4299a2dd95SBruce Richardson 	enum trace_area_e area;
4399a2dd95SBruce Richardson };
4499a2dd95SBruce Richardson 
4599a2dd95SBruce Richardson struct trace_arg {
4699a2dd95SBruce Richardson 	STAILQ_ENTRY(trace_arg) next;
4799a2dd95SBruce Richardson 	char *val;
4899a2dd95SBruce Richardson };
4999a2dd95SBruce Richardson 
5099a2dd95SBruce Richardson struct trace {
51eb870201SDavid Marchand 	char *dir;
5299a2dd95SBruce Richardson 	int register_errno;
532a7a42a5STyler Retzlaff 	RTE_ATOMIC(uint32_t) status;
5499a2dd95SBruce Richardson 	enum rte_trace_mode mode;
5599a2dd95SBruce Richardson 	rte_uuid_t uuid;
5699a2dd95SBruce Richardson 	uint32_t buff_len;
5799a2dd95SBruce Richardson 	STAILQ_HEAD(, trace_arg) args;
5899a2dd95SBruce Richardson 	uint32_t nb_trace_points;
5999a2dd95SBruce Richardson 	uint32_t nb_trace_mem_list;
6099a2dd95SBruce Richardson 	struct thread_mem_meta *lcore_meta;
6199a2dd95SBruce Richardson 	uint64_t epoch_sec;
6299a2dd95SBruce Richardson 	uint64_t epoch_nsec;
6399a2dd95SBruce Richardson 	uint64_t uptime_ticks;
6499a2dd95SBruce Richardson 	char *ctf_meta;
6599a2dd95SBruce Richardson 	uint32_t ctf_meta_offset_freq;
6699a2dd95SBruce Richardson 	uint32_t ctf_meta_offset_freq_off_s;
6799a2dd95SBruce Richardson 	uint32_t ctf_meta_offset_freq_off;
682a7a42a5STyler Retzlaff 	RTE_ATOMIC(uint16_t) ctf_fixup_done;
6999a2dd95SBruce Richardson 	rte_spinlock_t lock;
7099a2dd95SBruce Richardson };
7199a2dd95SBruce Richardson 
7299a2dd95SBruce Richardson /* Helper functions */
7399a2dd95SBruce Richardson static inline uint16_t
trace_id_get(rte_trace_point_t * trace)7499a2dd95SBruce Richardson trace_id_get(rte_trace_point_t *trace)
7599a2dd95SBruce Richardson {
7699a2dd95SBruce Richardson 	return (*trace & __RTE_TRACE_FIELD_ID_MASK) >>
7799a2dd95SBruce Richardson 		__RTE_TRACE_FIELD_ID_SHIFT;
7899a2dd95SBruce Richardson }
7999a2dd95SBruce Richardson 
8099a2dd95SBruce Richardson static inline size_t
trace_mem_sz(uint32_t len)8199a2dd95SBruce Richardson trace_mem_sz(uint32_t len)
8299a2dd95SBruce Richardson {
8399a2dd95SBruce Richardson 	return len + sizeof(struct __rte_trace_header);
8499a2dd95SBruce Richardson }
8599a2dd95SBruce Richardson 
8699a2dd95SBruce Richardson /* Trace object functions */
8799a2dd95SBruce Richardson struct trace *trace_obj_get(void);
8899a2dd95SBruce Richardson 
8999a2dd95SBruce Richardson /* Trace point list functions */
9099a2dd95SBruce Richardson STAILQ_HEAD(trace_point_head, trace_point);
9199a2dd95SBruce Richardson struct trace_point_head *trace_list_head_get(void);
9299a2dd95SBruce Richardson 
9399a2dd95SBruce Richardson /* Util functions */
9499a2dd95SBruce Richardson const char *trace_mode_to_string(enum rte_trace_mode mode);
9599a2dd95SBruce Richardson const char *trace_area_to_string(enum trace_area_e area);
9699a2dd95SBruce Richardson int trace_args_apply(const char *arg);
9799a2dd95SBruce Richardson void trace_bufsz_args_apply(void);
9899a2dd95SBruce Richardson bool trace_has_duplicate_entry(void);
9999a2dd95SBruce Richardson void trace_uuid_generate(void);
10099a2dd95SBruce Richardson int trace_metadata_create(void);
10199a2dd95SBruce Richardson void trace_metadata_destroy(void);
10299a2dd95SBruce Richardson char *trace_metadata_fixup_field(const char *field);
10399a2dd95SBruce Richardson int trace_epoch_time_save(void);
10499a2dd95SBruce Richardson void trace_mem_free(void);
10599a2dd95SBruce Richardson void trace_mem_per_thread_free(void);
10699a2dd95SBruce Richardson 
10799a2dd95SBruce Richardson /* EAL interface */
10899a2dd95SBruce Richardson int eal_trace_init(void);
10999a2dd95SBruce Richardson void eal_trace_fini(void);
11099a2dd95SBruce Richardson int eal_trace_args_save(const char *val);
11199a2dd95SBruce Richardson void eal_trace_args_free(void);
11299a2dd95SBruce Richardson int eal_trace_dir_args_save(const char *val);
11399a2dd95SBruce Richardson int eal_trace_mode_args_save(const char *val);
11499a2dd95SBruce Richardson int eal_trace_bufsz_args_save(const char *val);
11599a2dd95SBruce Richardson 
11699a2dd95SBruce Richardson #endif /* __EAL_TRACE_H */
117