mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Tom Zanussi <zanussi@kernel.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v2] tracing/histogram: Rename "cpu" to "common_cpu"
Date: Thu, 22 Jul 2021 09:40:41 +0900	[thread overview]
Message-ID: <20210722094041.53ef38491d70818310804c90@kernel.org> (raw)
In-Reply-To: <20210720233336.72b01525@oasis.local.home>

On Tue, 20 Jul 2021 23:33:36 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:

> From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
> 
> Currently the histogram logic allows the user to write "cpu" in as an
> event field, and it will record the CPU that the event happened on.
> 
> The problem with this is that there's a lot of events that have "cpu"
> as a real field, and using "cpu" as the CPU it ran on, makes it
> impossible to run histograms on the "cpu" field of events.
> 
> For example, if I want to have a histogram on the count of the
> workqueue_queue_work event on its cpu field, running:
> 
>  ># echo 'hist:keys=cpu' > events/workqueue/workqueue_queue_work/trigger
> 
> Gives a misleading and wrong result.
> 
> Change the command to "common_cpu" as no event should have "common_*"
> fields as that's a reserved name for fields used by all events. And
> this makes sense here as common_cpu would be a field used by all events.
> 
> Now we can even do:
> 
>  ># echo 'hist:keys=common_cpu,cpu if cpu < 100' > events/workqueue/workqueue_queue_work/trigger
>  ># cat events/workqueue/workqueue_queue_work/hist
>  # event histogram
>  #
>  # trigger info: hist:keys=common_cpu,cpu:vals=hitcount:sort=hitcount:size=2048 if cpu < 100 [active]
>  #
> 
>  { common_cpu:          0, cpu:          2 } hitcount:          1
>  { common_cpu:          0, cpu:          4 } hitcount:          1
>  { common_cpu:          7, cpu:          7 } hitcount:          1
>  { common_cpu:          0, cpu:          7 } hitcount:          1
>  { common_cpu:          0, cpu:          1 } hitcount:          1
>  { common_cpu:          0, cpu:          6 } hitcount:          2
>  { common_cpu:          0, cpu:          5 } hitcount:          2
>  { common_cpu:          1, cpu:          1 } hitcount:          4
>  { common_cpu:          6, cpu:          6 } hitcount:          4
>  { common_cpu:          5, cpu:          5 } hitcount:         14
>  { common_cpu:          4, cpu:          4 } hitcount:         26
>  { common_cpu:          0, cpu:          0 } hitcount:         39
>  { common_cpu:          2, cpu:          2 } hitcount:        184
> 
> Now for backward compatibility, I added a trick. If "cpu" is used, and
> the field is not found, it will fall back to "common_cpu" and work as
> it did before. This way, it will still work for old programs that use
> "cpu" to get the actual CPU, but if the event has a "cpu" as a field, it
> will get that event's "cpu" field, which is probably what it wants
> anyway.
> 
> I updated the tracefs/README to include documentation about both the
> common_timestamp and the common_cpu. This way, if that text is present in
> the README, then an application can know that common_cpu is supported over
> just plain "cpu".
> 

This looks good to me.

Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>

Thank you,

> Cc: stable@vger.kernel.org
> Fixes: 8b7622bf94a44 ("tracing: Add cpu field for hist triggers")
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> ---
> Changes since v1:
>    Added the README text about common_cpu and common_timestamp so
>    that user space can know that it is supported.
> 
>  Documentation/trace/histogram.rst |  2 +-
>  kernel/trace/trace.c              |  4 ++++
>  kernel/trace/trace_events_hist.c  | 22 ++++++++++++++++------
>  3 files changed, 21 insertions(+), 7 deletions(-)
> 
> diff --git a/Documentation/trace/histogram.rst b/Documentation/trace/histogram.rst
> index b71e09f745c3..f99be8062bc8 100644
> --- a/Documentation/trace/histogram.rst
> +++ b/Documentation/trace/histogram.rst
> @@ -191,7 +191,7 @@ Documentation written by Tom Zanussi
>                                  with the event, in nanoseconds.  May be
>  			        modified by .usecs to have timestamps
>  			        interpreted as microseconds.
> -    cpu                    int  the cpu on which the event occurred.
> +    common_cpu             int  the cpu on which the event occurred.
>      ====================== ==== =======================================
>  
>  Extended error information
> diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
> index 14f56e9fa001..af77452135ff 100644
> --- a/kernel/trace/trace.c
> +++ b/kernel/trace/trace.c
> @@ -5619,6 +5619,10 @@ static const char readme_msg[] =
>  	"\t            [:name=histname1]\n"
>  	"\t            [:<handler>.<action>]\n"
>  	"\t            [if <filter>]\n\n"
> +	"\t    Note, special fields can be used as well:
> +	"\t            common_timestamp - to record current timestamp\n"
> +	"\t            common_cpu - to record the CPU the event happened on\n"
> +	"\n"
>  	"\t    When a matching event is hit, an entry is added to a hash\n"
>  	"\t    table using the key(s) and value(s) named, and the value of a\n"
>  	"\t    sum called 'hitcount' is incremented.  Keys and values\n"
> diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
> index 16a9dfc9fffc..34325f41ebc0 100644
> --- a/kernel/trace/trace_events_hist.c
> +++ b/kernel/trace/trace_events_hist.c
> @@ -1111,7 +1111,7 @@ static const char *hist_field_name(struct hist_field *field,
>  		 field->flags & HIST_FIELD_FL_ALIAS)
>  		field_name = hist_field_name(field->operands[0], ++level);
>  	else if (field->flags & HIST_FIELD_FL_CPU)
> -		field_name = "cpu";
> +		field_name = "common_cpu";
>  	else if (field->flags & HIST_FIELD_FL_EXPR ||
>  		 field->flags & HIST_FIELD_FL_VAR_REF) {
>  		if (field->system) {
> @@ -1991,14 +1991,24 @@ parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file,
>  		hist_data->enable_timestamps = true;
>  		if (*flags & HIST_FIELD_FL_TIMESTAMP_USECS)
>  			hist_data->attrs->ts_in_usecs = true;
> -	} else if (strcmp(field_name, "cpu") == 0)
> +	} else if (strcmp(field_name, "common_cpu") == 0)
>  		*flags |= HIST_FIELD_FL_CPU;
>  	else {
>  		field = trace_find_event_field(file->event_call, field_name);
>  		if (!field || !field->size) {
> -			hist_err(tr, HIST_ERR_FIELD_NOT_FOUND, errpos(field_name));
> -			field = ERR_PTR(-EINVAL);
> -			goto out;
> +			/*
> +			 * For backward compatibility, if field_name
> +			 * was "cpu", then we treat this the same as
> +			 * common_cpu.
> +			 */
> +			if (strcmp(field_name, "cpu") == 0) {
> +				*flags |= HIST_FIELD_FL_CPU;
> +			} else {
> +				hist_err(tr, HIST_ERR_FIELD_NOT_FOUND,
> +					 errpos(field_name));
> +				field = ERR_PTR(-EINVAL);
> +				goto out;
> +			}
>  		}
>  	}
>   out:
> @@ -5085,7 +5095,7 @@ static void hist_field_print(struct seq_file *m, struct hist_field *hist_field)
>  		seq_printf(m, "%s=", hist_field->var.name);
>  
>  	if (hist_field->flags & HIST_FIELD_FL_CPU)
> -		seq_puts(m, "cpu");
> +		seq_puts(m, "common_cpu");
>  	else if (field_name) {
>  		if (hist_field->flags & HIST_FIELD_FL_VAR_REF ||
>  		    hist_field->flags & HIST_FIELD_FL_ALIAS)
> -- 
> 2.31.1
> 


-- 
Masami Hiramatsu <mhiramat@kernel.org>

      reply	other threads:[~2021-07-22  0:40 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-21  3:33 Steven Rostedt
2021-07-22  0:40 ` Masami Hiramatsu [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210722094041.53ef38491d70818310804c90@kernel.org \
    --to=mhiramat@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=zanussi@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®