diff mbox series

[v3,02/23] trace-cmd: Extend trace-cmd dump subcommand to display the clock

Message ID 20210324130418.436206-3-tz.stoyanov@gmail.com (mailing list archive)
State Superseded
Headers show
Series TSC trace clock to nanosecond conversion | expand

Commit Message

Tzvetomir Stoyanov (VMware) March 24, 2021, 1:03 p.m. UTC
Trace clock, used to record the tracing data is saved in the trace.dat
file. As "trace-cmd dump" command shows the metadata content of the
file, it should display the trace clock also.
Added a new parameter
  "trace-cmd dump --clock"
which shows the clock saved in the file. The clock can be displayed
also with
 "trace-cmd dump --all"

Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
 Documentation/trace-cmd/trace-cmd-dump.1.txt |  2 ++
 tracecmd/trace-dump.c                        | 34 +++++++++++++++++++-
 tracecmd/trace-usage.c                       |  1 +
 3 files changed, 36 insertions(+), 1 deletion(-)

Comments

Steven Rostedt March 24, 2021, 5:57 p.m. UTC | #1
On Wed, 24 Mar 2021 15:03:57 +0200
"Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com> wrote:

> Trace clock, used to record the tracing data is saved in the trace.dat
> file. As "trace-cmd dump" command shows the metadata content of the
> file, it should display the trace clock also.
> Added a new parameter
>   "trace-cmd dump --clock"
> which shows the clock saved in the file. The clock can be displayed
> also with
>  "trace-cmd dump --all"
> 
> Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
> ---
>  Documentation/trace-cmd/trace-cmd-dump.1.txt |  2 ++
>  tracecmd/trace-dump.c                        | 34 +++++++++++++++++++-
>  tracecmd/trace-usage.c                       |  1 +
>  3 files changed, 36 insertions(+), 1 deletion(-)
> 
> diff --git a/Documentation/trace-cmd/trace-cmd-dump.1.txt b/Documentation/trace-cmd/trace-cmd-dump.1.txt
> index 71b8e655..0f8626fa 100644
> --- a/Documentation/trace-cmd/trace-cmd-dump.1.txt
> +++ b/Documentation/trace-cmd/trace-cmd-dump.1.txt
> @@ -46,6 +46,8 @@ OPTIONS
>      Print all options, stored in the file.
>  *--flyrecord*::
>      Print the offset and the size of tracing data per each CPU.
> +*--clock*::
> +    Print the trace clock, used for timestamp of the tracing events, stored in the file.
>  *--all*::
>      Print all meta data from the file.
>  *--help*::
> diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c
> index 6172231e..4bdfd53f 100644
> --- a/tracecmd/trace-dump.c
> +++ b/tracecmd/trace-dump.c
> @@ -24,6 +24,7 @@
>  
>  static struct tep_handle *tep;
>  static unsigned int trace_cpus;
> +static int has_clock;
>  
>  enum dump_items {
>  	SUMMARY		= (1 << 0),
> @@ -37,6 +38,7 @@ enum dump_items {
>  	CMDLINES	= (1 << 8),
>  	OPTIONS		= (1 << 9),
>  	FLYRECORD	= (1 << 10),
> +	CLOCK		= (1 << 11),
>  };
>  
>  enum dump_items verbosity;
> @@ -496,7 +498,7 @@ static void dump_options(int fd)
>  			die("cannot read the option size");
>  
>  		count++;
> -		if (!DUMP_CHECK(OPTIONS)) {
> +		if (!DUMP_CHECK(OPTIONS) && !DUMP_CHECK(CLOCK)) {
>  			lseek64(fd, size, SEEK_CUR);
>  			continue;
>  		}
> @@ -512,6 +514,7 @@ static void dump_options(int fd)
>  			break;
>  		case TRACECMD_OPTION_TRACECLOCK:
>  			dump_option_string(fd, size, "TRACECLOCK");
> +			has_clock = 1;

Shouldn't "trace-cmd dump" also show the clock that's stored in the file,
or will it only show the option?

I'd like to see the file as well, but all I get is:

        [Tracing clock]
                 No tracing clock saved in the file

Which isn't true. It's just not an option.

-- Steve


>  			break;
>  		case TRACECMD_OPTION_UNAME:
>  			dump_option_string(fd, size, "UNAME");
> @@ -556,6 +559,29 @@ static void dump_latency(int fd)
>  	do_print(SUMMARY, "\t[Latency tracing data]\n");
>  }
>  
> +static void dump_clock(int fd)
> +{
> +	long long size;
> +	char *clock;
> +
> +	do_print((SUMMARY | CLOCK), "\t[Tracing clock]\n");
> +	if (!has_clock) {
> +		do_print((SUMMARY | CLOCK), "\t\t No tracing clock saved in the file\n");
> +		return;
> +	}
> +	if (read_file_number(fd, &size, 8))
> +		die("cannot read clock size");
> +	clock = calloc(1, size);
> +	if (!clock)
> +		die("cannot allocate clock %d bytes", size);
> +
> +	if (read_file_bytes(fd, clock, size))
> +		die("cannot read clock %d bytes", size);
> +	clock[size] = 0;
> +	do_print((SUMMARY | CLOCK), "\t\t%s\n", clock);
> +	free(clock);
> +}
> +
>  static void dump_flyrecord(int fd)
>  {
>  	long long cpu_offset;
> @@ -572,6 +598,7 @@ static void dump_flyrecord(int fd)
>  		do_print(FLYRECORD, "\t\t %lld %lld\t[offset, size of cpu %d]\n",
>  			 cpu_offset, cpu_size, i);
>  	}
> +	dump_clock(fd);
>  }
>  
>  static void dump_therest(int fd)
> @@ -626,6 +653,7 @@ static void dump_file(const char *file)
>  }
>  
>  enum {
> +	OPT_clock	= 243,
>  	OPT_all		= 244,
>  	OPT_summary	= 245,
>  	OPT_flyrecord	= 246,
> @@ -666,6 +694,7 @@ void trace_dump(int argc, char **argv)
>  			{"cmd-lines", no_argument, NULL, OPT_cmd_lines},
>  			{"options", no_argument, NULL, OPT_options},
>  			{"flyrecord", no_argument, NULL, OPT_flyrecord},
> +			{"clock", no_argument, NULL, OPT_clock},
>  			{"validate", no_argument, NULL, 'v'},
>  			{"help", no_argument, NULL, '?'},
>  			{NULL, 0, NULL, 0}
> @@ -721,6 +750,9 @@ void trace_dump(int argc, char **argv)
>  		case OPT_head_page:
>  			verbosity |= HEAD_PAGE;
>  			break;
> +		case OPT_clock:
> +			verbosity |= CLOCK;
> +			break;
>  		default:
>  			usage(argv);
>  		}
> diff --git a/tracecmd/trace-usage.c b/tracecmd/trace-usage.c
> index 1a7abd58..22537d20 100644
> --- a/tracecmd/trace-usage.c
> +++ b/tracecmd/trace-usage.c
> @@ -377,6 +377,7 @@ static struct usage_help usage_help[] = {
>  		"          --cmd-lines print information mapping a PID to a process name\n"
>  		"          --options print options\n"
>  		"          --flyrecord information of offset and count of recorded events per CPU\n"
> +		"          --clock trace clock, saved in the file\n"
>  		"          -h, --help show usage information\n"
>  	},
>  	{
Steven Rostedt March 24, 2021, 6:02 p.m. UTC | #2
On Wed, 24 Mar 2021 13:57:28 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:

> Shouldn't "trace-cmd dump" also show the clock that's stored in the file,
> or will it only show the option?
> 
> I'd like to see the file as well, but all I get is:
> 
>         [Tracing clock]
>                  No tracing clock saved in the file
> 
> Which isn't true. It's just not an option.

Or it is at least inconsistent:

[root@bxtest trace-cmd.git]# ./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, 2015 bytes]
        8 [CPUs with tracing data]
        [13 options]
        [Flyrecord tracing data]
        [Tracing clock]
                 No tracing clock saved in the file


[root@bxtest trace-cmd.git]# ./tracecmd/trace-cmd dump --clock
        [Tracing clock]
                [tsc2nsec]


-- Steve
diff mbox series

Patch

diff --git a/Documentation/trace-cmd/trace-cmd-dump.1.txt b/Documentation/trace-cmd/trace-cmd-dump.1.txt
index 71b8e655..0f8626fa 100644
--- a/Documentation/trace-cmd/trace-cmd-dump.1.txt
+++ b/Documentation/trace-cmd/trace-cmd-dump.1.txt
@@ -46,6 +46,8 @@  OPTIONS
     Print all options, stored in the file.
 *--flyrecord*::
     Print the offset and the size of tracing data per each CPU.
+*--clock*::
+    Print the trace clock, used for timestamp of the tracing events, stored in the file.
 *--all*::
     Print all meta data from the file.
 *--help*::
diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c
index 6172231e..4bdfd53f 100644
--- a/tracecmd/trace-dump.c
+++ b/tracecmd/trace-dump.c
@@ -24,6 +24,7 @@ 
 
 static struct tep_handle *tep;
 static unsigned int trace_cpus;
+static int has_clock;
 
 enum dump_items {
 	SUMMARY		= (1 << 0),
@@ -37,6 +38,7 @@  enum dump_items {
 	CMDLINES	= (1 << 8),
 	OPTIONS		= (1 << 9),
 	FLYRECORD	= (1 << 10),
+	CLOCK		= (1 << 11),
 };
 
 enum dump_items verbosity;
@@ -496,7 +498,7 @@  static void dump_options(int fd)
 			die("cannot read the option size");
 
 		count++;
-		if (!DUMP_CHECK(OPTIONS)) {
+		if (!DUMP_CHECK(OPTIONS) && !DUMP_CHECK(CLOCK)) {
 			lseek64(fd, size, SEEK_CUR);
 			continue;
 		}
@@ -512,6 +514,7 @@  static void dump_options(int fd)
 			break;
 		case TRACECMD_OPTION_TRACECLOCK:
 			dump_option_string(fd, size, "TRACECLOCK");
+			has_clock = 1;
 			break;
 		case TRACECMD_OPTION_UNAME:
 			dump_option_string(fd, size, "UNAME");
@@ -556,6 +559,29 @@  static void dump_latency(int fd)
 	do_print(SUMMARY, "\t[Latency tracing data]\n");
 }
 
+static void dump_clock(int fd)
+{
+	long long size;
+	char *clock;
+
+	do_print((SUMMARY | CLOCK), "\t[Tracing clock]\n");
+	if (!has_clock) {
+		do_print((SUMMARY | CLOCK), "\t\t No tracing clock saved in the file\n");
+		return;
+	}
+	if (read_file_number(fd, &size, 8))
+		die("cannot read clock size");
+	clock = calloc(1, size);
+	if (!clock)
+		die("cannot allocate clock %d bytes", size);
+
+	if (read_file_bytes(fd, clock, size))
+		die("cannot read clock %d bytes", size);
+	clock[size] = 0;
+	do_print((SUMMARY | CLOCK), "\t\t%s\n", clock);
+	free(clock);
+}
+
 static void dump_flyrecord(int fd)
 {
 	long long cpu_offset;
@@ -572,6 +598,7 @@  static void dump_flyrecord(int fd)
 		do_print(FLYRECORD, "\t\t %lld %lld\t[offset, size of cpu %d]\n",
 			 cpu_offset, cpu_size, i);
 	}
+	dump_clock(fd);
 }
 
 static void dump_therest(int fd)
@@ -626,6 +653,7 @@  static void dump_file(const char *file)
 }
 
 enum {
+	OPT_clock	= 243,
 	OPT_all		= 244,
 	OPT_summary	= 245,
 	OPT_flyrecord	= 246,
@@ -666,6 +694,7 @@  void trace_dump(int argc, char **argv)
 			{"cmd-lines", no_argument, NULL, OPT_cmd_lines},
 			{"options", no_argument, NULL, OPT_options},
 			{"flyrecord", no_argument, NULL, OPT_flyrecord},
+			{"clock", no_argument, NULL, OPT_clock},
 			{"validate", no_argument, NULL, 'v'},
 			{"help", no_argument, NULL, '?'},
 			{NULL, 0, NULL, 0}
@@ -721,6 +750,9 @@  void trace_dump(int argc, char **argv)
 		case OPT_head_page:
 			verbosity |= HEAD_PAGE;
 			break;
+		case OPT_clock:
+			verbosity |= CLOCK;
+			break;
 		default:
 			usage(argv);
 		}
diff --git a/tracecmd/trace-usage.c b/tracecmd/trace-usage.c
index 1a7abd58..22537d20 100644
--- a/tracecmd/trace-usage.c
+++ b/tracecmd/trace-usage.c
@@ -377,6 +377,7 @@  static struct usage_help usage_help[] = {
 		"          --cmd-lines print information mapping a PID to a process name\n"
 		"          --options print options\n"
 		"          --flyrecord information of offset and count of recorded events per CPU\n"
+		"          --clock trace clock, saved in the file\n"
 		"          -h, --help show usage information\n"
 	},
 	{