On Wed, Mar 24, 2021 at 11:24 PM Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: > > On Wed, 24 Mar 2021 15:04:17 +0200 > "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@xxxxxxxxx> wrote: > > > Save the content of the trace_clock file in the TRACECLOCK option in > > the trace.dat file. The clocks can be printed with "trace-cmd dump > > --options" command. > > These clocks were saved right before the tracing data in the file, but > > this patch set changed that logic. Now only the selected clock is saved > > in the file before the tracing data. > > Having all supported trace clocks in the file is useful for debug > > purposes. Adding clocks in the existing TRACECLOCK option is save and > > will not break the older versions of trace-cmd. > > > > Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@xxxxxxxxx> > > --- > > tracecmd/trace-record.c | 6 +++++- > > 1 file changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c > > index 2fc6723a..f4c27ef1 100644 > > --- a/tracecmd/trace-record.c > > +++ b/tracecmd/trace-record.c > > @@ -4138,6 +4138,7 @@ enum { > > static void add_options(struct tracecmd_output *handle, struct common_record_context *ctx) > > { > > int type = 0; > > + char *clocks; > > > > if (ctx->date2ts) { > > if (ctx->data_flags & DATA_FL_DATE) > > @@ -4149,12 +4150,15 @@ static void add_options(struct tracecmd_output *handle, struct common_record_con > > if (type) > > tracecmd_add_option(handle, type, strlen(ctx->date2ts)+1, ctx->date2ts); > > > > - tracecmd_add_option(handle, TRACECMD_OPTION_TRACECLOCK, 0, NULL); > > + clocks = tracefs_instance_file_read(NULL, "trace_clock", NULL); > > + tracecmd_add_option(handle, TRACECMD_OPTION_TRACECLOCK, > > + clocks ? strlen(clocks)+1 : 0, clocks); > > Strange. Even after applying this patch, I still get: > > # ./tracecmd/trace-cmd dump > > Tracing meta data in file trace.dat: > [Initial format] > 6 [Version] > 0 [Little endian] > 8 [Bytes in a long] > 4096 [Page size, bytes] > [Header page, 205 bytes] > [Header event, 205 bytes] > [Ftrace format, 15 events] > [Events format, 104 systems] > [Kallsyms, 6978379 bytes] > [Trace printk, 4997 bytes] > [Saved command lines, 1987 bytes] > 8 [CPUs with tracing data] > [13 options] > [Flyrecord tracing data] > [Tracing clock] > No tracing clock saved in the file > > > Seems to be that it skips over the options unless you explicitly ask for it. Going to fix it in v4. The way it should work: 1. "trace-cmd dump" && "trace-cmd dump --clock": [Tracing clock] - dump the clock written just before the tracing data. This clock is valid only if there is a TRACECLOCK option in the file. Here is prints "No tracing clock saved in the file" because options are not parsed and TRACECLOCK is not detected, going to fix this. This should be the first user specified clock with "-C ..." option, or the clock of the first trace instance. 2. "trace-cmd dump --options" - dump the content of the TRACECLOCK option, all clocks from "trace_clock" of the top instance, during the trace session. The selected clock here could be different from the one in the previous point, if the top instance is not used in the tracing. The idea is to have all supported clocks here, the selected one is written before the tracing data - that way the old trace-cmd logic will still work. > > -- Steve > > > add_option_hooks(handle); > > add_uname(handle); > > add_version(handle); > > if (!no_top_instance()) > > add_trace_id(handle, &top_instance); > > + free(clocks); > > } > > > > static void write_guest_file(struct buffer_instance *instance) > -- Tzvetomir (Ceco) Stoyanov VMware Open Source Technology Center