[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170524154024.GC27760@danjae.aot.lge.com>
Date: Thu, 25 May 2017 00:40:24 +0900
From: Namhyung Kim <namhyung@...nel.org>
To: David Carrillo-Cisneros <davidcc@...gle.com>
Cc: linux-kernel@...r.kernel.org,
Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Andi Kleen <ak@...ux.intel.com>, Simon Que <sque@...omium.org>,
Wang Nan <wangnan0@...wei.com>, Jiri Olsa <jolsa@...nel.org>,
He Kuang <hekuang@...wei.com>,
Masami Hiramatsu <mhiramat@...nel.org>,
David Ahern <dsa@...ulusnetworks.com>,
Stephane Eranian <eranian@...gle.com>,
Paul Turner <pjt@...gle.com>, kernel-team@....com
Subject: Re: [PATCH v2 13/13] perf tools: add feature header record to
pipe-mode
On Tue, May 23, 2017 at 12:48:53AM -0700, David Carrillo-Cisneros wrote:
> Add header record types to pipe-mode, reusing the functions
> used in file-mode and leveraging the new struct feat_fd.
>
> Add the perf_event__synthesize_feature event call back to
> process the new header records.
>
> Before this patch:
>
> $ perf record -o - -e cycles sleep 1 | perf report --stdio --header
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.000 MB - ]
> ...
>
> After this patch:
> $ perf record -o - -e cycles sleep 1 | perf report --stdio --header
> # ========
> # captured on: Mon May 22 16:33:43 2017
> # ========
> #
> # hostname : my_hostname
> # os release : 4.11.0-dbx-up_perf
> # perf version : 4.11.rc6.g6277c80
> # arch : x86_64
> # nrcpus online : 72
> # nrcpus avail : 72
> # cpudesc : Intel(R) Xeon(R) CPU E5-2696 v3 @ 2.30GHz
> # cpuid : GenuineIntel,6,63,2
> # total memory : 263457192 kB
> # cmdline : /root/perf record -o - -e cycles -c 100000 sleep 1
> # HEADER_CPU_TOPOLOGY info available, use -I to display
> # HEADER_NUMA_TOPOLOGY info available, use -I to display
> # pmu mappings: intel_bts = 6, uncore_imc_4 = 22, uncore_sbox_1 = 47, uncore_cbox_5 = 33, uncore_ha_0 = 16, uncore_cbox
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.000 MB - ]
> ...
>
> Support added for the subcommands: report, inject, annotate and script.
>
> Signed-off-by: David Carrillo-Cisneros <davidcc@...gle.com>
> ---
[SNIP]
> +struct feature_event {
> + struct perf_event_header header;
> + u64 header_id;
s/header_id/feat_id/ ?
> + char data[]; /* size bytes of raw data specific to the feature */
> +};
> +
> union perf_event {
> struct perf_event_header header;
> struct mmap_event mmap;
[SNIP]
> +int perf_event__process_feature(struct perf_tool *tool,
> + union perf_event *event,
> + struct perf_session *session __maybe_unused)
> +{
> + struct feat_fd fd = { .fd = 0 };
> + struct feature_event *fe = (struct feature_event *)event;
> + int type = fe->header.type;
> + u64 feat = fe->header_id;
> +
> + if (type < 0 || type >= PERF_RECORD_HEADER_MAX) {
> + pr_warning("invalid record type %d\n", type);
> + return 0;
> + }
> + if (feat == HEADER_RESERVED)
> + return -1;
> +
> + if (feat > HEADER_LAST_FEATURE)
> + return 0;
> +
> + if (!feat_ops[feat].process)
> + return 0;
Checking here..
> +
> + /*
> + * no print routine
> + */
> + if (!feat_ops[feat].print)
> + return 0;
> +
> + fd.buf = (void *)fe->data;
> + fd.size = event->header.size - sizeof(event->header);
> + fd.ph = &session->header;
> +
> + if (!tool->show_feat_hdr)
> + return 0;
> +
> + if (!feat_ops[feat].full_only ||
> + tool->show_feat_hdr >= SHOW_FEAT_HEADER_FULL_INFO) {
> + if (feat_ops[feat].process) {
.. and here again.
Thanks,
Namhyung
> + if (feat_ops[feat].process(&fd, NULL))
> + return -1;
> + }
> + feat_ops[feat].print(&fd, stdout);
> + } else {
> + fprintf(stdout, "# %s info available, use -I to display\n",
> + feat_ops[feat].name);
> + }
> +
> + return 0;
> +}
Powered by blists - more mailing lists