* [PATCH] trace-cmd: Append metadata about trace-cmd's version when recording @ 2019-06-04 12:14 Slavomir Kaslev 2019-06-04 12:24 ` Steven Rostedt 0 siblings, 1 reply; 5+ messages in thread From: Slavomir Kaslev @ 2019-06-04 12:14 UTC (permalink / raw) To: rostedt; +Cc: linux-trace-devel, ykaradzhov, tstoyanov, slavomir.kaslev Add metadata when recording to the output trace about trace-cmd's version and git commit. When debugging this can be useful to know which version of trace-cmd recorded this trace.dat file. Suggested-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Link: https://bugzilla.kernel.org/show_bug.cgi?id=203547 Signed-off-by: Slavomir Kaslev <kaslevs@vmware.com> --- Makefile | 3 +++ include/trace-cmd/trace-cmd.h | 1 + tracecmd/trace-record.c | 17 ++++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index cde45f8..2062d97 100644 --- a/Makefile +++ b/Makefile @@ -238,6 +238,9 @@ endif override CFLAGS += $(INCLUDES) $(PLUGIN_DIR_SQ) $(VAR_DIR) override CFLAGS += $(udis86-flags) $(blk-flags) +# Append version define +override CFLAGS += -DTRACECMD_VERSION=\"$(TRACECMD_VERSION)\" +override CFLAGS += -DTRACECMD_VERSION_GIT=\"$(shell git log -1 --pretty=format:"%H")\" CMD_TARGETS = trace-cmd $(BUILD_PYTHON) diff --git a/include/trace-cmd/trace-cmd.h b/include/trace-cmd/trace-cmd.h index ceb03f4..ca9fc44 100644 --- a/include/trace-cmd/trace-cmd.h +++ b/include/trace-cmd/trace-cmd.h @@ -81,6 +81,7 @@ enum { TRACECMD_OPTION_HOOK, TRACECMD_OPTION_OFFSET, TRACECMD_OPTION_CPUCOUNT, + TRACECMD_OPTION_VERSION, }; enum { diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c index 4523128..4c4840b 100644 --- a/tracecmd/trace-record.c +++ b/tracecmd/trace-record.c @@ -3145,6 +3145,21 @@ static void add_uname(struct tracecmd_output *handle) free(str); } +static void add_version(struct tracecmd_output *handle) +{ + char *str; + int len; + + len = strlen(TRACECMD_VERSION) + strlen(TRACECMD_VERSION_GIT) + 2; + str = malloc(len); + if (!str) + return; + + sprintf(str, "%s %s", TRACECMD_VERSION, TRACECMD_VERSION_GIT); + tracecmd_add_option(handle, TRACECMD_OPTION_VERSION, len, str); + free(str); +} + static void print_stat(struct buffer_instance *instance) { int cpu; @@ -3182,7 +3197,7 @@ static void add_options(struct tracecmd_output *handle, struct common_record_con tracecmd_add_option(handle, TRACECMD_OPTION_TRACECLOCK, 0, NULL); add_option_hooks(handle); add_uname(handle); - + add_version(handle); } static void record_data(struct common_record_context *ctx) -- 2.20.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] trace-cmd: Append metadata about trace-cmd's version when recording 2019-06-04 12:14 [PATCH] trace-cmd: Append metadata about trace-cmd's version when recording Slavomir Kaslev @ 2019-06-04 12:24 ` Steven Rostedt 2019-06-04 12:48 ` Slavomir Kaslev 0 siblings, 1 reply; 5+ messages in thread From: Steven Rostedt @ 2019-06-04 12:24 UTC (permalink / raw) To: Slavomir Kaslev; +Cc: linux-trace-devel, ykaradzhov, tstoyanov, slavomir.kaslev On Tue, 4 Jun 2019 15:14:41 +0300 Slavomir Kaslev <kaslevs@vmware.com> wrote: > Add metadata when recording to the output trace about trace-cmd's version and > git commit. When debugging this can be useful to know which version of trace-cmd > recorded this trace.dat file. Awesome! Some nits below... > > Suggested-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > Link: https://bugzilla.kernel.org/show_bug.cgi?id=203547 > Signed-off-by: Slavomir Kaslev <kaslevs@vmware.com> > --- > Makefile | 3 +++ > include/trace-cmd/trace-cmd.h | 1 + > tracecmd/trace-record.c | 17 ++++++++++++++++- > 3 files changed, 20 insertions(+), 1 deletion(-) > > diff --git a/Makefile b/Makefile > index cde45f8..2062d97 100644 > --- a/Makefile > +++ b/Makefile > @@ -238,6 +238,9 @@ endif > override CFLAGS += $(INCLUDES) $(PLUGIN_DIR_SQ) $(VAR_DIR) > override CFLAGS += $(udis86-flags) $(blk-flags) > > +# Append version define > +override CFLAGS += -DTRACECMD_VERSION=\"$(TRACECMD_VERSION)\" > +override CFLAGS += -DTRACECMD_VERSION_GIT=\"$(shell git log -1 --pretty=format:"%H")\" > > CMD_TARGETS = trace-cmd $(BUILD_PYTHON) > > diff --git a/include/trace-cmd/trace-cmd.h b/include/trace-cmd/trace-cmd.h > index ceb03f4..ca9fc44 100644 > --- a/include/trace-cmd/trace-cmd.h > +++ b/include/trace-cmd/trace-cmd.h > @@ -81,6 +81,7 @@ enum { > TRACECMD_OPTION_HOOK, > TRACECMD_OPTION_OFFSET, > TRACECMD_OPTION_CPUCOUNT, > + TRACECMD_OPTION_VERSION, > }; > > enum { > diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c > index 4523128..4c4840b 100644 > --- a/tracecmd/trace-record.c > +++ b/tracecmd/trace-record.c > @@ -3145,6 +3145,21 @@ static void add_uname(struct tracecmd_output *handle) > free(str); > } > > +static void add_version(struct tracecmd_output *handle) > +{ > + char *str; > + int len; > + > + len = strlen(TRACECMD_VERSION) + strlen(TRACECMD_VERSION_GIT) + 2; > + str = malloc(len); > + if (!str) > + return; > + > + sprintf(str, "%s %s", TRACECMD_VERSION, TRACECMD_VERSION_GIT); The above should use asprintf(): ret = asprintf(&str, "%s %s", TRACECMD_VERSION, TRACE_cMD_VERSION_GIT); if (ret < 0) return; But other than that, looks good! -- Steve > + tracecmd_add_option(handle, TRACECMD_OPTION_VERSION, len, str); > + free(str); > +} > + > static void print_stat(struct buffer_instance *instance) > { > int cpu; > @@ -3182,7 +3197,7 @@ static void add_options(struct tracecmd_output *handle, struct common_record_con > tracecmd_add_option(handle, TRACECMD_OPTION_TRACECLOCK, 0, NULL); > add_option_hooks(handle); > add_uname(handle); > - > + add_version(handle); > } > > static void record_data(struct common_record_context *ctx) ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] trace-cmd: Append metadata about trace-cmd's version when recording 2019-06-04 12:24 ` Steven Rostedt @ 2019-06-04 12:48 ` Slavomir Kaslev 2019-06-11 1:27 ` [PATCH] trace-cmd: Add trace-cmd report --version to extract version info Steven Rostedt 0 siblings, 1 reply; 5+ messages in thread From: Slavomir Kaslev @ 2019-06-04 12:48 UTC (permalink / raw) To: rostedt; +Cc: linux-trace-devel, ykaradzhov, tstoyanov, slavomir.kaslev Add metadata when recording to the output trace about trace-cmd's version and git commit. When debugging this can be useful to know which version of trace-cmd recorded this trace.dat file. Suggested-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Link: https://bugzilla.kernel.org/show_bug.cgi?id=203547 Signed-off-by: Slavomir Kaslev <kaslevs@vmware.com> --- Makefile | 3 +++ include/trace-cmd/trace-cmd.h | 1 + tracecmd/trace-record.c | 15 ++++++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index cde45f8..2062d97 100644 --- a/Makefile +++ b/Makefile @@ -238,6 +238,9 @@ endif override CFLAGS += $(INCLUDES) $(PLUGIN_DIR_SQ) $(VAR_DIR) override CFLAGS += $(udis86-flags) $(blk-flags) +# Append version define +override CFLAGS += -DTRACECMD_VERSION=\"$(TRACECMD_VERSION)\" +override CFLAGS += -DTRACECMD_VERSION_GIT=\"$(shell git log -1 --pretty=format:"%H")\" CMD_TARGETS = trace-cmd $(BUILD_PYTHON) diff --git a/include/trace-cmd/trace-cmd.h b/include/trace-cmd/trace-cmd.h index ceb03f4..ca9fc44 100644 --- a/include/trace-cmd/trace-cmd.h +++ b/include/trace-cmd/trace-cmd.h @@ -81,6 +81,7 @@ enum { TRACECMD_OPTION_HOOK, TRACECMD_OPTION_OFFSET, TRACECMD_OPTION_CPUCOUNT, + TRACECMD_OPTION_VERSION, }; enum { diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c index 4523128..c38d279 100644 --- a/tracecmd/trace-record.c +++ b/tracecmd/trace-record.c @@ -3145,6 +3145,19 @@ static void add_uname(struct tracecmd_output *handle) free(str); } +static void add_version(struct tracecmd_output *handle) +{ + char *str; + int len; + + len = asprintf(&str, "%s %s", TRACECMD_VERSION, TRACECMD_VERSION_GIT); + if (len < 0) + return; + + tracecmd_add_option(handle, TRACECMD_OPTION_VERSION, len+1, str); + free(str); +} + static void print_stat(struct buffer_instance *instance) { int cpu; @@ -3182,7 +3195,7 @@ static void add_options(struct tracecmd_output *handle, struct common_record_con tracecmd_add_option(handle, TRACECMD_OPTION_TRACECLOCK, 0, NULL); add_option_hooks(handle); add_uname(handle); - + add_version(handle); } static void record_data(struct common_record_context *ctx) -- 2.20.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH] trace-cmd: Add trace-cmd report --version to extract version info 2019-06-04 12:48 ` Slavomir Kaslev @ 2019-06-11 1:27 ` Steven Rostedt 2019-06-11 12:40 ` Slavomir Kaslev 0 siblings, 1 reply; 5+ messages in thread From: Steven Rostedt @ 2019-06-11 1:27 UTC (permalink / raw) To: Slavomir Kaslev; +Cc: linux-trace-devel, ykaradzhov, tstoyanov, slavomir.kaslev From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> Now that the trace.dat file can save the version of the executable that was used to create it, save that information. This will be useful if a user has a problem with a trace.dat file. It can let the developers know what version was used to create it. We need a way to extract this information. Adding a new "--version" to trace-cmd report will display the saved version in the trace.dat file if it exists. Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> --- Documentation/trace-cmd-report.1.txt | 4 ++++ include/trace-cmd/trace-cmd.h | 1 + lib/trace-cmd/trace-input.c | 19 +++++++++++++++++++ tracecmd/trace-read.c | 12 ++++++++++++ tracecmd/trace-usage.c | 1 + 5 files changed, 37 insertions(+) diff --git a/Documentation/trace-cmd-report.1.txt b/Documentation/trace-cmd-report.1.txt index 20d6b7ab..87f4d7a1 100644 --- a/Documentation/trace-cmd-report.1.txt +++ b/Documentation/trace-cmd-report.1.txt @@ -248,6 +248,10 @@ OPTIONS If the trace.dat file recorded uname during the run, this will retrieve that information. +*--version*:: + If the trace.dat file recorded the version of the executable used to create + it, report that version. + *--ts-offset* offset:: Add (or subtract if negative) an offset for all timestamps of the previous data file specified with *-i*. This is useful to merge sort multiple trace.dat diff --git a/include/trace-cmd/trace-cmd.h b/include/trace-cmd/trace-cmd.h index 8b922102..6f62ab99 100644 --- a/include/trace-cmd/trace-cmd.h +++ b/include/trace-cmd/trace-cmd.h @@ -138,6 +138,7 @@ int tracecmd_init_data(struct tracecmd_input *handle); void tracecmd_print_stats(struct tracecmd_input *handle); void tracecmd_print_uname(struct tracecmd_input *handle); +void tracecmd_print_version(struct tracecmd_input *handle); struct tep_record * tracecmd_read_page_record(struct tep_handle *pevent, void *page, int size, diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c index 264e3c32..61566bad 100644 --- a/lib/trace-cmd/trace-input.c +++ b/lib/trace-cmd/trace-input.c @@ -94,6 +94,7 @@ struct tracecmd_input { double ts2secs; char * cpustats; char * uname; + char * version; struct input_buffer_instance *buffers; int parsing_failures; @@ -2220,6 +2221,9 @@ static int handle_options(struct tracecmd_input *handle) case TRACECMD_OPTION_UNAME: handle->uname = strdup(buf); break; + case TRACECMD_OPTION_VERSION: + handle->version = strdup(buf); + break; case TRACECMD_OPTION_HOOK: hook = tracecmd_create_event_hook(buf); hook->next = handle->hooks; @@ -2598,6 +2602,21 @@ void tracecmd_print_uname(struct tracecmd_input *handle) printf(" uname was not recorded in this file\n"); } +/** + * tracecmd_print_uname - prints the recorded uname if it was recorded + * @handle: input handle for the trace.dat file + * + * Looks for the option TRACECMD_OPTION_VERSION and prints out what's + * stored there, if it is found. Otherwise it prints that none were found. + */ +void tracecmd_print_version(struct tracecmd_input *handle) +{ + if (handle->version) + printf("%s\n", handle->version); + else + printf(" version was not recorded in this file\n"); +} + /** * tracecmd_hooks - return the event hooks that were used in record * @handle: input handle for the trace.dat file diff --git a/tracecmd/trace-read.c b/tracecmd/trace-read.c index dbfb3a54..d22c723b 100644 --- a/tracecmd/trace-read.c +++ b/tracecmd/trace-read.c @@ -1112,6 +1112,7 @@ enum output_type { OUTPUT_NORMAL, OUTPUT_STAT_ONLY, OUTPUT_UNAME_ONLY, + OUTPUT_VERSION_ONLY, }; static void read_data_info(struct list_head *handle_list, enum output_type otype, @@ -1160,6 +1161,8 @@ static void read_data_info(struct list_head *handle_list, enum output_type otype continue; case OUTPUT_UNAME_ONLY: tracecmd_print_uname(handles->handle); + case OUTPUT_VERSION_ONLY: + tracecmd_print_version(handles->handle); continue; } @@ -1386,6 +1389,7 @@ static void add_hook(const char *arg) } enum { + OPT_version = 238, OPT_tsdiff = 239, OPT_ts2secs = 240, OPT_tsoffset = 241, @@ -1427,6 +1431,7 @@ void trace_report (int argc, char **argv) int show_page_size = 0; int show_printk = 0; int show_uname = 0; + int show_version = 0; int latency_format = 0; int show_events = 0; int print_events = 0; @@ -1468,6 +1473,7 @@ void trace_report (int argc, char **argv) {"debug", no_argument, NULL, OPT_debug}, {"profile", no_argument, NULL, OPT_profile}, {"uname", no_argument, NULL, OPT_uname}, + {"version", no_argument, NULL, OPT_version}, {"by-comm", no_argument, NULL, OPT_bycomm}, {"ts-offset", required_argument, NULL, OPT_tsoffset}, {"ts2secs", required_argument, NULL, OPT_ts2secs}, @@ -1618,6 +1624,9 @@ void trace_report (int argc, char **argv) case OPT_uname: show_uname = 1; break; + case OPT_version: + show_version = 1; + break; case OPT_bycomm: trace_profile_set_merge_like_comms(); break; @@ -1767,6 +1776,9 @@ void trace_report (int argc, char **argv) /* yeah yeah, uname overrides stat */ if (show_uname) otype = OUTPUT_UNAME_ONLY; + /* and version overrides uname! */ + if (show_version) + otype = OUTPUT_VERSION_ONLY; read_data_info(&handle_list, otype, global); list_for_each_entry(handles, &handle_list, list) { diff --git a/tracecmd/trace-usage.c b/tracecmd/trace-usage.c index d2a10895..00127299 100644 --- a/tracecmd/trace-usage.c +++ b/tracecmd/trace-usage.c @@ -166,6 +166,7 @@ static struct usage_help usage_help[] = { " --check-events return whether all event formats can be parsed\n" " --stat - show the buffer stats that were reported at the end of the record.\n" " --uname - show uname of the record, if it was saved\n" + " --version - show version used to build the trace-cmd exec that created the file\n" " --profile report stats on where tasks are blocked and such\n" " -G when profiling, set soft and hard irqs as global\n" " -H Allows users to hook two events together for timings\n" -- 2.20.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] trace-cmd: Add trace-cmd report --version to extract version info 2019-06-11 1:27 ` [PATCH] trace-cmd: Add trace-cmd report --version to extract version info Steven Rostedt @ 2019-06-11 12:40 ` Slavomir Kaslev 0 siblings, 0 replies; 5+ messages in thread From: Slavomir Kaslev @ 2019-06-11 12:40 UTC (permalink / raw) To: rostedt@goodmis.org Cc: Yordan Karadzhov, Tzvetomir Stoyanov, linux-trace-devel@vger.kernel.org On Mon, 2019-06-10 at 21:27 -0400, Steven Rostedt wrote: > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> > > Now that the trace.dat file can save the version of the executable > that was > used to create it, save that information. This will be useful if a > user has > a problem with a trace.dat file. It can let the developers know what > version > was used to create it. We need a way to extract this information. > Adding a > new "--version" to trace-cmd report will display the saved version in > the > trace.dat file if it exists. > > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > --- Looks great. Reviewed-by: Slavomir Kaslev <kaslevs@vmware.com> Cheers! -- Slavi ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-06-11 12:40 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-06-04 12:14 [PATCH] trace-cmd: Append metadata about trace-cmd's version when recording Slavomir Kaslev 2019-06-04 12:24 ` Steven Rostedt 2019-06-04 12:48 ` Slavomir Kaslev 2019-06-11 1:27 ` [PATCH] trace-cmd: Add trace-cmd report --version to extract version info Steven Rostedt 2019-06-11 12:40 ` Slavomir Kaslev
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).