[dpdk-dev] [PATCH v7 06/32] eal/trace: get bootup timestamp for trace
jerinj at marvell.com
jerinj at marvell.com
Wed Apr 22 21:03:23 CEST 2020
From: Jerin Jacob <jerinj at marvell.com>
Find epoch_sec, epoch_nsec and uptime_ticks time information
on eal_trace_init()/bootup to derive the time in the trace.
Signed-off-by: Jerin Jacob <jerinj at marvell.com>
---
lib/librte_eal/common/eal_common_trace.c | 3 +++
.../common/eal_common_trace_utils.c | 22 +++++++++++++++++++
lib/librte_eal/common/eal_trace.h | 5 +++++
3 files changed, 30 insertions(+)
diff --git a/lib/librte_eal/common/eal_common_trace.c b/lib/librte_eal/common/eal_common_trace.c
index e270808d2..c02be897a 100644
--- a/lib/librte_eal/common/eal_common_trace.c
+++ b/lib/librte_eal/common/eal_common_trace.c
@@ -59,6 +59,9 @@ eal_trace_init(void)
if (trace_mkdir())
goto fail;
+ /* Save current epoch timestamp for future use */
+ if (trace_epoch_time_save() < 0)
+ goto fail;
rte_trace_mode_set(trace.mode);
diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/librte_eal/common/eal_common_trace_utils.c
index d2ab8f845..f7700934b 100644
--- a/lib/librte_eal/common/eal_common_trace_utils.c
+++ b/lib/librte_eal/common/eal_common_trace_utils.c
@@ -98,6 +98,28 @@ trace_session_name_generate(char *trace_dir)
return -rte_errno;
}
+int
+trace_epoch_time_save(void)
+{
+ struct trace *trace = trace_obj_get();
+ struct timespec epoch = { 0, 0 };
+ uint64_t avg, start, end;
+
+ start = rte_get_tsc_cycles();
+ if (clock_gettime(CLOCK_REALTIME, &epoch) < 0) {
+ trace_err("failed to get the epoch time");
+ return -1;
+ }
+ end = rte_get_tsc_cycles();
+ avg = (start + end) >> 1;
+
+ trace->epoch_sec = (uint64_t) epoch.tv_sec;
+ trace->epoch_nsec = (uint64_t) epoch.tv_nsec;
+ trace->uptime_ticks = avg;
+
+ return 0;
+}
+
static int
trace_dir_default_path_get(char *dir_path)
{
diff --git a/lib/librte_eal/common/eal_trace.h b/lib/librte_eal/common/eal_trace.h
index deb57dd4c..493163c1c 100644
--- a/lib/librte_eal/common/eal_trace.h
+++ b/lib/librte_eal/common/eal_trace.h
@@ -5,6 +5,7 @@
#ifndef __EAL_TRACE_H
#define __EAL_TRACE_H
+#include <rte_cycles.h>
#include <rte_spinlock.h>
#include <rte_trace.h>
#include <rte_trace_point.h>
@@ -39,6 +40,9 @@ struct trace {
rte_uuid_t uuid;
uint32_t buff_len;
uint32_t nb_trace_points;
+ uint64_t epoch_sec;
+ uint64_t epoch_nsec;
+ uint64_t uptime_ticks;
rte_spinlock_t lock;
};
@@ -61,6 +65,7 @@ struct trace_point_head *trace_list_head_get(void);
bool trace_has_duplicate_entry(void);
void trace_uuid_generate(void);
int trace_mkdir(void);
+int trace_epoch_time_save(void);
/* EAL interface */
int eal_trace_init(void);
--
2.25.1
More information about the dev
mailing list