diff mbox series

[v15,14/18] trace-cmd: Add host trace clock as guest trace argument

Message ID 20191128085409.289684-15-tz.stoyanov@gmail.com (mailing list archive)
State Superseded
Headers show
Series Timestamp synchronization of host - guest tracing session | expand

Commit Message

Tzvetomir Stoyanov (VMware) Nov. 28, 2019, 8:54 a.m. UTC
When tracing host and guest machines, both should use the same
tracing clock for event timestamps. If a clock is specified
as host tracing argument, with option "-C clock_name", the same
is injected as guest tracing argument. If the user wants to use
different tracing clocks, it can specify it using "-C clock_name"
as guest tracing argument. In that case, the one specified by
the user has higher priority.

Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
 tracecmd/trace-record.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

Comments

Slavomir Kaslev Nov. 28, 2019, 2:45 p.m. UTC | #1
On Thu, Nov 28, 2019 at 11:01 AM Tzvetomir Stoyanov (VMware)
<tz.stoyanov@gmail.com> wrote:
>
> When tracing host and guest machines, both should use the same
> tracing clock for event timestamps. If a clock is specified
> as host tracing argument, with option "-C clock_name", the same
> is injected as guest tracing argument. If the user wants to use
> different tracing clocks, it can specify it using "-C clock_name"
> as guest tracing argument. In that case, the one specified by
> the user has higher priority.
>
> Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
> ---
>  tracecmd/trace-record.c | 19 +++++++++++++++++--
>  1 file changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c
> index 49730d6..e7fb1bd 100644
> --- a/tracecmd/trace-record.c
> +++ b/tracecmd/trace-record.c
> @@ -5405,6 +5405,8 @@ static void parse_record_options(int argc,
>         char *sav;
>         int name_counter = 0;
>         int neg_event = 0;
> +       struct buffer_instance *instance;
> +       bool guest_config = false;

guest_config is a bit vague of a name for what it's used here. Maybe
has_clock_arg?

>
>         init_common_record_context(ctx, curr_cmd);
>
> @@ -5562,6 +5564,7 @@ static void parse_record_options(int argc,
>                         break;
>                 case 'C':
>                         ctx->instance->ftrace->clock = optarg;
> +                       guest_config = true;
>                         break;
>                 case 'v':
>                         neg_event = 1;
> @@ -5779,14 +5782,26 @@ static void parse_record_options(int argc,
>
>         /* If --date is specified, prepend it to all guest VM flags */
>         if (ctx->date) {
> -               struct buffer_instance *instance;
> -
>                 for_all_instances(instance) {
>                         if (is_guest(instance))
>                                 add_argv(instance, "--date", true);
>                 }
>         }
>
> +       if (guest_config) {
> +               /* If -C is specified, prepend clock to all guest VM flags */
> +               for_all_instances(instance) {
> +                       if (top_instance.ftrace->clock) {
> +                               if (is_guest(instance)) {
> +                                       add_argv(instance,
> +                                                (char *)top_instance.ftrace->clock,
> +                                                true);
> +                                       add_argv(instance, "-C", true);

Shouldn't those two add_arvgv() calls be swapped?

> +                               }
> +                       }
> +               }
> +       }
> +
>         if (!ctx->filtered && ctx->instance->filter_mod)
>                 add_func(&ctx->instance->filter_funcs,
>                          ctx->instance->filter_mod, "*");
> --
> 2.23.0
>

Cheers,

-- Slavi
Tzvetomir Stoyanov (VMware) Nov. 28, 2019, 3:05 p.m. UTC | #2
On Thu, Nov 28, 2019 at 4:45 PM Slavomir Kaslev
<slavomir.kaslev@gmail.com> wrote:
>
 ...
> > +       struct buffer_instance *instance;
> > +       bool guest_config = false;
>
> guest_config is a bit vague of a name for what it's used here. Maybe
> has_clock_arg?
>
The same flag is used for similar host config, which is applied to
guests - in the following patches from the series.

> >
> >         init_common_record_context(ctx, curr_cmd);
> >
 ...
> > +       if (guest_config) {
> > +               /* If -C is specified, prepend clock to all guest VM flags */
> > +               for_all_instances(instance) {
> > +                       if (top_instance.ftrace->clock) {
> > +                               if (is_guest(instance)) {
> > +                                       add_argv(instance,
> > +                                                (char *)top_instance.ftrace->clock,
> > +                                                true);
> > +                                       add_argv(instance, "-C", true);
>
> Shouldn't those two add_arvgv() calls be swapped?
It is a little bit confusing, add_argv() actually prepends the
arguments - so the last call puts the first argument in the list.
The user specified arguments are always after those. When the args are
parsed in the guest, in case of duplication, the last one wins.

>
> > +                               }
> > +                       }
> > +               }
> > +       }
> > +
> >         if (!ctx->filtered && ctx->instance->filter_mod)
> >                 add_func(&ctx->instance->filter_funcs,
> >                          ctx->instance->filter_mod, "*");
> > --
> > 2.23.0
> >
>
> Cheers,
>
> -- Slavi
diff mbox series

Patch

diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c
index 49730d6..e7fb1bd 100644
--- a/tracecmd/trace-record.c
+++ b/tracecmd/trace-record.c
@@ -5405,6 +5405,8 @@  static void parse_record_options(int argc,
 	char *sav;
 	int name_counter = 0;
 	int neg_event = 0;
+	struct buffer_instance *instance;
+	bool guest_config = false;
 
 	init_common_record_context(ctx, curr_cmd);
 
@@ -5562,6 +5564,7 @@  static void parse_record_options(int argc,
 			break;
 		case 'C':
 			ctx->instance->ftrace->clock = optarg;
+			guest_config = true;
 			break;
 		case 'v':
 			neg_event = 1;
@@ -5779,14 +5782,26 @@  static void parse_record_options(int argc,
 
 	/* If --date is specified, prepend it to all guest VM flags */
 	if (ctx->date) {
-		struct buffer_instance *instance;
-
 		for_all_instances(instance) {
 			if (is_guest(instance))
 				add_argv(instance, "--date", true);
 		}
 	}
 
+	if (guest_config) {
+		/* If -C is specified, prepend clock to all guest VM flags */
+		for_all_instances(instance) {
+			if (top_instance.ftrace->clock) {
+				if (is_guest(instance)) {
+					add_argv(instance,
+						 (char *)top_instance.ftrace->clock,
+						 true);
+					add_argv(instance, "-C", true);
+				}
+			}
+		}
+	}
+
 	if (!ctx->filtered && ctx->instance->filter_mod)
 		add_func(&ctx->instance->filter_funcs,
 			 ctx->instance->filter_mod, "*");