Re: [PATCH 09/17] perf tools: Detect avalibility of write_backward

From: Arnaldo Carvalho de Melo
Date: Fri May 13 2016 - 09:09:09 EST


Em Fri, May 13, 2016 at 07:56:06AM +0000, Wang Nan escreveu:
> Detect avalibility of write_backward and save the result into
> record_opts. With write_backward the start pointer of a ring
> buffer mapped read only can be found reliably.

We have perf_missing_features for that, please try to use it.

- Arnaldo

> Signed-off-by: Wang Nan <wangnan0@xxxxxxxxxx>
> Signed-off-by: He Kuang <hekuang@xxxxxxxxxx>
> Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
> Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@xxxxxxxxxxx>
> Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
> Cc: Zefan Li <lizefan@xxxxxxxxxx>
> Cc: pi3orama@xxxxxxx
> ---
> tools/perf/perf.h | 1 +
> tools/perf/util/record.c | 11 +++++++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/tools/perf/perf.h b/tools/perf/perf.h
> index cd8f1b1..c35bcfd 100644
> --- a/tools/perf/perf.h
> +++ b/tools/perf/perf.h
> @@ -72,6 +72,7 @@ struct record_opts {
> bool sample_transaction;
> unsigned initial_delay;
> bool use_clockid;
> + bool has_write_backward;
> clockid_t clockid;
> unsigned int proc_map_timeout;
> };
> diff --git a/tools/perf/util/record.c b/tools/perf/util/record.c
> index 481792c..bb871d8 100644
> --- a/tools/perf/util/record.c
> +++ b/tools/perf/util/record.c
> @@ -85,6 +85,11 @@ static void perf_probe_comm_exec(struct perf_evsel *evsel)
> evsel->attr.comm_exec = 1;
> }
>
> +static void perf_probe_write_backward(struct perf_evsel *evsel)
> +{
> + evsel->attr.write_backward = 1;
> +}
> +
> static void perf_probe_context_switch(struct perf_evsel *evsel)
> {
> evsel->attr.context_switch = 1;
> @@ -105,6 +110,11 @@ bool perf_can_record_switch_events(void)
> return perf_probe_api(perf_probe_context_switch);
> }
>
> +static bool perf_can_write_backward(void)
> +{
> + return perf_probe_api(perf_probe_write_backward);
> +}
> +
> bool perf_can_record_cpu_wide(void)
> {
> struct perf_event_attr attr = {
> @@ -236,6 +246,7 @@ static int record_opts__config_freq(struct record_opts *opts)
>
> int record_opts__config(struct record_opts *opts)
> {
> + opts->has_write_backward = perf_can_write_backward();
> return record_opts__config_freq(opts);
> }
>
> --
> 1.8.3.4