All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Liang, Kan" <kan.liang@intel.com>
To: Wang Nan <wangnan0@huawei.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"acme@kernel.org" <acme@kernel.org>,
	"jolsa@redhat.com" <jolsa@redhat.com>,
	"namhyung@kernel.org" <namhyung@kernel.org>
Subject: RE: [PATCH 2/2] perf record: Replace 'overwrite' by 'flightrecorder' for better naming
Date: Wed, 1 Nov 2017 13:26:37 +0000	[thread overview]
Message-ID: <37D7C6CF3E00A74B8858931C1DB2F077537DC1C0@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <20171101055327.141281-3-wangnan0@huawei.com>

> The meaning of perf record's "overwrite" option and many "overwrite" in
> source code are not clear. In perf's code, the 'overwrite' has 2 meanings:
>  1. Make ringbuffer readonly (perf_evlist__mmap_ex's argument).
>  2. Set evsel's "backward" attribute (in apply_config_terms).
> 
> perf record doesn't use meaning 1 at all, but have a overwrite option, its
> real meaning is setting backward.
>

I don't understand here.
'overwrite' has 2 meanings. perf record only support 1.
It should be a bug, and need to be fixed.
Why do we need a new mode? 

I think a new mode just make the codes more complex.

Thanks,
Kan

> This patch separates these two concepts, introduce 'flightrecorder' mode
> which is what we really want. It combines these 2 concept together, wraps
> them into a record mode. In flight recorder mode, perf only dumps data
> before
> something happen.
> 
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> ---
>  tools/perf/Documentation/perf-record.txt |  8 ++++----
>  tools/perf/builtin-record.c              |  4 ++--
>  tools/perf/perf.h                        |  2 +-
>  tools/perf/util/evsel.c                  |  6 +++---
>  tools/perf/util/evsel.h                  |  4 ++--
>  tools/perf/util/parse-events.c           | 20 ++++++++++----------
>  tools/perf/util/parse-events.h           |  4 ++--
>  tools/perf/util/parse-events.l           |  4 ++--
>  8 files changed, 26 insertions(+), 26 deletions(-)
> 
> diff --git a/tools/perf/Documentation/perf-record.txt
> b/tools/perf/Documentation/perf-record.txt
> index 5a626ef..463c2d3 100644
> --- a/tools/perf/Documentation/perf-record.txt
> +++ b/tools/perf/Documentation/perf-record.txt
> @@ -467,19 +467,19 @@ the beginning of record, collect them during
> finalizing an output file.
>  The collected non-sample events reflects the status of the system when
>  record is finished.
> 
> ---overwrite::
> +--flight-recorder::
>  Makes all events use an overwritable ring buffer. An overwritable ring
>  buffer works like a flight recorder: when it gets full, the kernel will
>  overwrite the oldest records, that thus will never make it to the
>  perf.data file.
> 
> -When '--overwrite' and '--switch-output' are used perf records and drops
> +When '--flight-recorder' and '--switch-output' are used perf records and
> drops
>  events until it receives a signal, meaning that something unusual was
>  detected that warrants taking a snapshot of the most current events,
>  those fitting in the ring buffer at that moment.
> 
> -'overwrite' attribute can also be set or canceled for an event using
> -config terms. For example: 'cycles/overwrite/' and 'instructions/no-
> overwrite/'.
> +'flightrecorder' attribute can also be set or canceled separately for an event
> using
> +config terms. For example: 'cycles/flightrecorder/' and 'instructions/no-
> flightrecorder/'.
> 
>  Implies --tail-synthesize.
> 
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index f4d9fc5..315ea09 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -1489,7 +1489,7 @@ static struct option __record_options[] = {
>  			"child tasks do not inherit counters"),
>  	OPT_BOOLEAN(0, "tail-synthesize", &record.opts.tail_synthesize,
>  		    "synthesize non-sample events at the end of output"),
> -	OPT_BOOLEAN(0, "overwrite", &record.opts.overwrite, "use
> overwrite mode"),
> +	OPT_BOOLEAN(0, "flight-recoder", &record.opts.flight_recorder,
> "use flight recoder mode"),
>  	OPT_UINTEGER('F', "freq", &record.opts.user_freq, "profile at this
> frequency"),
>  	OPT_CALLBACK('m', "mmap-pages", &record.opts, "pages[,pages]",
>  		     "number of mmap data pages and AUX area tracing mmap
> pages",
> @@ -1733,7 +1733,7 @@ int cmd_record(int argc, const char **argv)
>  		}
>  	}
> 
> -	if (record.opts.overwrite)
> +	if (record.opts.flight_recorder)
>  		record.opts.tail_synthesize = true;
> 
>  	if (rec->evlist->nr_entries == 0 &&
> diff --git a/tools/perf/perf.h b/tools/perf/perf.h
> index fbb0a9c..a7f7618 100644
> --- a/tools/perf/perf.h
> +++ b/tools/perf/perf.h
> @@ -57,7 +57,7 @@ struct record_opts {
>  	bool	     all_kernel;
>  	bool	     all_user;
>  	bool	     tail_synthesize;
> -	bool	     overwrite;
> +	bool	     flight_recorder;
>  	bool	     ignore_missing_thread;
>  	unsigned int freq;
>  	unsigned int mmap_pages;
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index f894893..0e1e8e8 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -772,8 +772,8 @@ static void apply_config_terms(struct perf_evsel
> *evsel,
>  			 */
>  			attr->inherit = term->val.inherit ? 1 : 0;
>  			break;
> -		case PERF_EVSEL__CONFIG_TERM_OVERWRITE:
> -			attr->write_backward = term->val.overwrite ? 1 : 0;
> +		case PERF_EVSEL__CONFIG_TERM_FLIGHTRECORDER:
> +			attr->write_backward = term->val.flightrecorder ? 1 :
> 0;
>  			break;
>  		default:
>  			break;
> @@ -856,7 +856,7 @@ void perf_evsel__config(struct perf_evsel *evsel,
> struct record_opts *opts,
> 
>  	attr->sample_id_all = perf_missing_features.sample_id_all ? 0 : 1;
>  	attr->inherit	    = !opts->no_inherit;
> -	attr->write_backward = opts->overwrite ? 1 : 0;
> +	attr->write_backward = opts->flight_recorder ? 1 : 0;
> 
>  	perf_evsel__set_sample_bit(evsel, IP);
>  	perf_evsel__set_sample_bit(evsel, TID);
> diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
> index 64782b1..115b637 100644
> --- a/tools/perf/util/evsel.h
> +++ b/tools/perf/util/evsel.h
> @@ -45,7 +45,7 @@ enum {
>  	PERF_EVSEL__CONFIG_TERM_STACK_USER,
>  	PERF_EVSEL__CONFIG_TERM_INHERIT,
>  	PERF_EVSEL__CONFIG_TERM_MAX_STACK,
> -	PERF_EVSEL__CONFIG_TERM_OVERWRITE,
> +	PERF_EVSEL__CONFIG_TERM_FLIGHTRECORDER,
>  	PERF_EVSEL__CONFIG_TERM_DRV_CFG,
>  	PERF_EVSEL__CONFIG_TERM_BRANCH,
>  	PERF_EVSEL__CONFIG_TERM_MAX,
> @@ -63,7 +63,7 @@ struct perf_evsel_config_term {
>  		u64	stack_user;
>  		int	max_stack;
>  		bool	inherit;
> -		bool	overwrite;
> +		bool	flightrecorder;
>  		char	*branch;
>  	} val;
>  };
> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index 04f35db..61ae3d3 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -914,8 +914,8 @@ static const char
> *config_term_names[__PARSE_EVENTS__TERM_TYPE_NR] = {
>  	[PARSE_EVENTS__TERM_TYPE_NOINHERIT]		= "no-inherit",
>  	[PARSE_EVENTS__TERM_TYPE_INHERIT]		= "inherit",
>  	[PARSE_EVENTS__TERM_TYPE_MAX_STACK]		= "max-stack",
> -	[PARSE_EVENTS__TERM_TYPE_OVERWRITE]		= "overwrite",
> -	[PARSE_EVENTS__TERM_TYPE_NOOVERWRITE]		= "no-
> overwrite",
> +	[PARSE_EVENTS__TERM_TYPE_FLIGHTRECORDER]	=
> "flightrecorder",
> +	[PARSE_EVENTS__TERM_TYPE_NOFLIGHTRECORDER]	= "no-
> flightrecorder",
>  	[PARSE_EVENTS__TERM_TYPE_DRV_CFG]		= "driver-
> config",
>  };
> 
> @@ -1013,10 +1013,10 @@ do {
> 				   \
>  	case PARSE_EVENTS__TERM_TYPE_NOINHERIT:
>  		CHECK_TYPE_VAL(NUM);
>  		break;
> -	case PARSE_EVENTS__TERM_TYPE_OVERWRITE:
> +	case PARSE_EVENTS__TERM_TYPE_FLIGHTRECORDER:
>  		CHECK_TYPE_VAL(NUM);
>  		break;
> -	case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE:
> +	case PARSE_EVENTS__TERM_TYPE_NOFLIGHTRECORDER:
>  		CHECK_TYPE_VAL(NUM);
>  		break;
>  	case PARSE_EVENTS__TERM_TYPE_NAME:
> @@ -1072,8 +1072,8 @@ static int config_term_tracepoint(struct
> perf_event_attr *attr,
>  	case PARSE_EVENTS__TERM_TYPE_INHERIT:
>  	case PARSE_EVENTS__TERM_TYPE_NOINHERIT:
>  	case PARSE_EVENTS__TERM_TYPE_MAX_STACK:
> -	case PARSE_EVENTS__TERM_TYPE_OVERWRITE:
> -	case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE:
> +	case PARSE_EVENTS__TERM_TYPE_FLIGHTRECORDER:
> +	case PARSE_EVENTS__TERM_TYPE_NOFLIGHTRECORDER:
>  		return config_term_common(attr, term, err);
>  	default:
>  		if (err) {
> @@ -1149,11 +1149,11 @@ do {
> 			\
>  		case PARSE_EVENTS__TERM_TYPE_MAX_STACK:
>  			ADD_CONFIG_TERM(MAX_STACK, max_stack, term-
> >val.num);
>  			break;
> -		case PARSE_EVENTS__TERM_TYPE_OVERWRITE:
> -			ADD_CONFIG_TERM(OVERWRITE, overwrite, term-
> >val.num ? 1 : 0);
> +		case PARSE_EVENTS__TERM_TYPE_FLIGHTRECORDER:
> +			ADD_CONFIG_TERM(FLIGHTRECORDER,
> flightrecorder, term->val.num ? 1 : 0);
>  			break;
> -		case PARSE_EVENTS__TERM_TYPE_NOOVERWRITE:
> -			ADD_CONFIG_TERM(OVERWRITE, overwrite, term-
> >val.num ? 0 : 1);
> +		case PARSE_EVENTS__TERM_TYPE_NOFLIGHTRECORDER:
> +			ADD_CONFIG_TERM(FLIGHTRECORDER,
> flightrecorder, term->val.num ? 0 : 1);
>  			break;
>  		case PARSE_EVENTS__TERM_TYPE_DRV_CFG:
>  			ADD_CONFIG_TERM(DRV_CFG, drv_cfg, term-
> >val.str);
> diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
> index 3909ca0..cd0b4eae 100644
> --- a/tools/perf/util/parse-events.h
> +++ b/tools/perf/util/parse-events.h
> @@ -70,8 +70,8 @@ enum {
>  	PARSE_EVENTS__TERM_TYPE_NOINHERIT,
>  	PARSE_EVENTS__TERM_TYPE_INHERIT,
>  	PARSE_EVENTS__TERM_TYPE_MAX_STACK,
> -	PARSE_EVENTS__TERM_TYPE_NOOVERWRITE,
> -	PARSE_EVENTS__TERM_TYPE_OVERWRITE,
> +	PARSE_EVENTS__TERM_TYPE_NOFLIGHTRECORDER,
> +	PARSE_EVENTS__TERM_TYPE_FLIGHTRECORDER,
>  	PARSE_EVENTS__TERM_TYPE_DRV_CFG,
>  	__PARSE_EVENTS__TERM_TYPE_NR,
>  };
> diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
> index 38a42bd..7710d6d 100644
> --- a/tools/perf/util/parse-events.l
> +++ b/tools/perf/util/parse-events.l
> @@ -251,8 +251,8 @@ stack-size		{ return term(yyscanner,
> PARSE_EVENTS__TERM_TYPE_STACKSIZE); }
>  max-stack		{ return term(yyscanner,
> PARSE_EVENTS__TERM_TYPE_MAX_STACK); }
>  inherit			{ return term(yyscanner,
> PARSE_EVENTS__TERM_TYPE_INHERIT); }
>  no-inherit		{ return term(yyscanner,
> PARSE_EVENTS__TERM_TYPE_NOINHERIT); }
> -overwrite		{ return term(yyscanner,
> PARSE_EVENTS__TERM_TYPE_OVERWRITE); }
> -no-overwrite		{ return term(yyscanner,
> PARSE_EVENTS__TERM_TYPE_NOOVERWRITE); }
> +flightrecorder		{ return term(yyscanner,
> PARSE_EVENTS__TERM_TYPE_FLIGHTRECORDER); }
> +no-flightrecorder	{ return term(yyscanner,
> PARSE_EVENTS__TERM_TYPE_NOFLIGHTRECORDER); }
>  ,			{ return ','; }
>  "/"			{ BEGIN(INITIAL); return '/'; }
>  {name_minus}		{ return str(yyscanner, PE_NAME); }
> --
> 2.10.1

  parent reply	other threads:[~2017-11-01 13:26 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-01  5:53 [PATCH 0/2] perf record: Fix --overwrite and clarify concepts Wang Nan
2017-11-01  5:53 ` [PATCH 1/2] perf mmap: Fix perf backward recording Wang Nan
2017-11-01  9:49   ` Namhyung Kim
2017-11-01 10:32     ` Wangnan (F)
2017-11-01 12:00       ` Namhyung Kim
2017-11-01 12:10         ` Wangnan (F)
2017-11-01 12:39           ` Jiri Olsa
2017-11-01 12:56             ` Wangnan (F)
2017-11-02 15:12               ` Jiri Olsa
2017-11-01 13:57           ` Liang, Kan
2017-11-01 16:12             ` Wangnan (F)
2017-11-01 16:22               ` Liang, Kan
2017-11-02  5:34                 ` Namhyung Kim
2017-11-02 13:25                   ` Liang, Kan
2017-11-02 14:59                     ` Jiri Olsa
2017-11-01  5:53 ` [PATCH 2/2] perf record: Replace 'overwrite' by 'flightrecorder' for better naming Wang Nan
2017-11-01 10:03   ` Namhyung Kim
2017-11-01 10:17     ` Wangnan (F)
2017-11-01 12:03       ` Namhyung Kim
2017-11-01 13:26   ` Liang, Kan [this message]
2017-11-01 14:05     ` Wangnan (F)
2017-11-01 14:22       ` Liang, Kan
2017-11-01 14:44         ` Wangnan (F)
2017-11-01 15:04           ` Liang, Kan
2017-11-01 16:00             ` Wangnan (F)
2017-11-01 16:13               ` Liang, Kan

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=37D7C6CF3E00A74B8858931C1DB2F077537DC1C0@SHSMSX103.ccr.corp.intel.com \
    --to=kan.liang@intel.com \
    --cc=acme@kernel.org \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namhyung@kernel.org \
    --cc=wangnan0@huawei.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.