@@ -441,6 +441,7 @@ void tracecmd_plog_error(const char *fmt, ...);
int tracecmd_set_logfile(char *logfile);
/* --- System --- */
+unsigned long long tracecmd_generate_traceid(void);
int tracecmd_count_cpus(void);
/* --- Hack! --- */
@@ -18,6 +18,8 @@
#include <sys/mount.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/sysinfo.h>
+#include <time.h>
#include "trace-cmd.h"
#include "event-utils.h"
@@ -1299,3 +1301,32 @@ error:
tracecmd_put_tracing_file(path);
return ret;
}
+
+#define FNV_64_PRIME 0x100000001b3ULL
+unsigned long long tracecmd_generate_traceid(void)
+{
+ unsigned long long hash = 0;
+ unsigned char *ustr;
+ struct sysinfo sinfo;
+ struct timespec ts;
+ char *str = NULL;
+
+ clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
+ sysinfo(&sinfo);
+ asprintf(&str, "%ld %ld %ld %ld %ld %ld %ld %ld %d",
+ ts.tv_sec, ts.tv_nsec,
+ sinfo.loads[0], sinfo.loads[1], sinfo.loads[2],
+ sinfo.freeram, sinfo.sharedram, sinfo.freeswap,
+ sinfo.procs);
+ if (!str)
+ return 0;
+ ustr = (unsigned char *)str;
+ hash = 0;
+ while (*ustr) {
+ hash ^= (unsigned long long)*ustr++;
+ hash *= FNV_64_PRIME;
+ }
+
+ free(str);
+ return hash;
+}
@@ -182,6 +182,7 @@ struct pid_addr_maps {
struct buffer_instance {
struct buffer_instance *next;
struct tracecmd_instance *ftrace;
+ unsigned long long trace_id;
char *cpumask;
struct event_list *events;
struct event_list **event_next;
@@ -5062,6 +5062,7 @@ void init_top_instance(void)
top_instance.ftrace = tracecmd_create_instance(NULL);
top_instance.cpu_count = tracecmd_count_cpus();
top_instance.flags = BUFFER_FL_KEEP;
+ top_instance.trace_id = tracecmd_generate_traceid();
tracecmd_init_instance(&top_instance);
}
A new libtracecmd API is implemented: unsigned long long tracecmd_generate_traceid(void); At trace-cmd init phase a unique ID, used for the current tracing session. Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com> --- include/trace-cmd/trace-cmd.h | 1 + lib/trace-cmd/trace-util.c | 31 +++++++++++++++++++++++++++++++ tracecmd/include/trace-local.h | 1 + tracecmd/trace-record.c | 1 + 4 files changed, 34 insertions(+)