tracecmd_get_first_ts(3)
Handle time stamps from a trace file.
Description
LIBTRACECMD
NAME
tracecmd_get_first_ts, tracecmd_add_ts_offset - Handle time stamps from a trace file.
SYNOPSIS
#include <trace-cmd.h>
unsigned long
long tracecmd_get_first_ts(struct tracecmd_input
*handle);
void tracecmd_add_ts_offset(struct tracecmd_input
*handle, long long offset);
DESCRIPTION
This set of APIs can be used to read tracing data from a trace file opened with tracecmd_open()(3), tracecmd_open_fd()(3) or tracecmd_open_head()(3).
The tracecmd_get_first_ts() function returns the time stamp of the first record in the handle.
The tracecmd_add_ts_offset() function adds an offset to each of the records in the handle that represents a trace file. This is useful for associating two different tracing files by their offset (for example a trace file from a host and a trace file from a guest that were not synchronized when created).
RETURN VALUE
The tracecmd_get_first_ts() function returns the timestamp of the first record in a trace file for the given handle.
EXAMPLE
#include
<stdlib.h>
#include <trace-cmd.h>
static int
print_events(struct tracecmd_input *handle, struct
tep_record *record, int cpu, void *data)
{
static struct trace_seq seq;
struct tep_handle *tep = tracecmd_get_tep(handle);
const char *file = tracecmd_get_private(handle);
if
(!seq.buffer)
trace_seq_init(&seq);
trace_seq_reset(&seq);
trace_seq_printf(&seq, "%s: ", file);
tep_print_event(tep, &seq, record, "%6.1000d [%03d]
%s-%d %s: %s\n",
TEP_PRINT_TIME, TEP_PRINT_CPU, TEP_PRINT_COMM,
TEP_PRINT_PID,
TEP_PRINT_NAME, TEP_PRINT_INFO);
trace_seq_terminate(&seq);
trace_seq_do_printf(&seq);
return 0;
}
int main(int
argc, char **argv)
{
struct tracecmd_input **handles = NULL;
unsigned long long ts, first_ts = 0;
int nr_handles = 0;
int i;
if (argc <
2) {
printf("usage: %s trace.dat [trace.dat ...]\n",
argv[0]);
exit(-1);
}
for (i = 1; i
< argc; i++) {
handles = realloc(handles, sizeof(*handles) * (nr_handles +
1));
if (!handles)
exit(-1);
handles[nr_handles] = tracecmd_open(argv[i], 0);
if (!handles[nr_handles])
exit(-1);
tracecmd_set_private(handles[nr_handles], argv[i]);
ts = tracecmd_get_first_ts(handles[nr_handles]);
if (!first_ts || ts < first_ts)
first_ts = ts;
nr_handles++;
}
/* Set the time
stamp to start at the first record found */
for (i = 0; i < nr_handles; i++)
tracecmd_add_ts_offset(handles[i], -first_ts);
tracecmd_iterate_events_multi(handles, nr_handles, print_events, NULL);
for (i = 0; i
< nr_handles; i++)
tracecmd_close(handles[i]);
free(handles);
}
FILES
trace-cmd.h
Header file to include in order to have access to the
library APIs.
-ltracecmd
Linker switch to add when building a program that uses the
library.
SEE ALSO
libtracefs(3), libtraceevent(3), trace-cmd(1) trace-cmd.dat(5)
AUTHOR
Steven
Rostedt
<rostedt@goodmis.org
[1]
>
Tzvetomir Stoyanov
<tz.stoyanov@gmail.com
[2]
>
REPORTING BUGS
Report bugs to <linux-trace-devel@vger.kernel.org [3] >
LICENSE
libtracecmd is Free Software licensed under the GNU LGPL 2.1
RESOURCES
https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/
COPYING
Copyright (C) 2020 VMware, Inc. Free use of this software is granted under the terms of the GNU Public License (GPL).
NOTES
|
1. |
rostedt@goodmis.org |
mailto:rostedt@goodmis.org
|
2. |
tz.stoyanov@gmail.com |
mailto:tz.stoyanov@gmail.com
|
3. |
linux-trace-devel@vger.kernel.org |
mailto:linux-trace-devel@vger.kernel.org
See Also
- libtracefs(3)
- libtraceevent(3)
- cmd(1)
- dat(5)