1
2
3
4
5#ifndef __EAL_TRACE_H
6#define __EAL_TRACE_H
7
8#include <rte_cycles.h>
9#include <rte_log.h>
10#include <rte_malloc.h>
11#include <rte_spinlock.h>
12#include <rte_trace.h>
13#include <rte_trace_point.h>
14#include <rte_uuid.h>
15
16#include "eal_private.h"
17#include "eal_thread.h"
18
19#define trace_err(fmt, args...) \
20 RTE_LOG(ERR, EAL, "%s():%u " fmt "\n", __func__, __LINE__, ## args)
21
22#define trace_crit(fmt, args...) \
23 RTE_LOG(CRIT, EAL, "%s():%u " fmt "\n", __func__, __LINE__, ## args)
24
25#define TRACE_PREFIX_LEN 12
26#define TRACE_DIR_STR_LEN (sizeof("YYYY-mm-dd-AM-HH-MM-SS") + TRACE_PREFIX_LEN)
27#define TRACE_POINT_NAME_SIZE 64
28#define TRACE_CTF_MAGIC 0xC1FC1FC1
29#define TRACE_MAX_ARGS 32
30
31struct trace_point {
32 STAILQ_ENTRY(trace_point) next;
33 rte_trace_point_t *handle;
34 char name[TRACE_POINT_NAME_SIZE];
35 char *ctf_field;
36};
37
38enum trace_area_e {
39 TRACE_AREA_HEAP,
40 TRACE_AREA_HUGEPAGE,
41};
42
43struct thread_mem_meta {
44 void *mem;
45 enum trace_area_e area;
46};
47
48struct trace_arg {
49 STAILQ_ENTRY(trace_arg) next;
50 char *val;
51};
52
53struct trace {
54 char dir[PATH_MAX];
55 int dir_offset;
56 int register_errno;
57 bool status;
58 enum rte_trace_mode mode;
59 rte_uuid_t uuid;
60 uint32_t buff_len;
61 STAILQ_HEAD(, trace_arg) args;
62 uint32_t nb_trace_points;
63 uint32_t nb_trace_mem_list;
64 struct thread_mem_meta *lcore_meta;
65 uint64_t epoch_sec;
66 uint64_t epoch_nsec;
67 uint64_t uptime_ticks;
68 char *ctf_meta;
69 uint32_t ctf_meta_offset_freq;
70 uint32_t ctf_meta_offset_freq_off_s;
71 uint32_t ctf_meta_offset_freq_off;
72 uint16_t ctf_fixup_done;
73 rte_spinlock_t lock;
74};
75
76
77static inline uint16_t
78trace_id_get(rte_trace_point_t *trace)
79{
80 return (*trace & __RTE_TRACE_FIELD_ID_MASK) >>
81 __RTE_TRACE_FIELD_ID_SHIFT;
82}
83
84static inline size_t
85trace_mem_sz(uint32_t len)
86{
87 return len + sizeof(struct __rte_trace_header);
88}
89
90
91struct trace *trace_obj_get(void);
92
93
94STAILQ_HEAD(trace_point_head, trace_point);
95struct trace_point_head *trace_list_head_get(void);
96
97
98const char *trace_mode_to_string(enum rte_trace_mode mode);
99const char *trace_area_to_string(enum trace_area_e area);
100int trace_args_apply(const char *arg);
101void trace_bufsz_args_apply(void);
102bool trace_has_duplicate_entry(void);
103void trace_uuid_generate(void);
104int trace_metadata_create(void);
105void trace_metadata_destroy(void);
106char *trace_metadata_fixup_field(const char *field);
107int trace_mkdir(void);
108int trace_epoch_time_save(void);
109void trace_mem_free(void);
110void trace_mem_per_thread_free(void);
111
112
113int eal_trace_init(void);
114void eal_trace_fini(void);
115int eal_trace_args_save(const char *val);
116void eal_trace_args_free(void);
117int eal_trace_dir_args_save(const char *val);
118int eal_trace_mode_args_save(const char *val);
119int eal_trace_bufsz_args_save(const char *val);
120
121#endif
122