From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Thomas Richter <tmricht@linux.ibm.com>
Cc: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
brueckner@linux.vnet.ibm.com, schwidefsky@de.ibm.com,
heiko.carstens@de.ibm.com
Subject: Re: [PATCHv2 3/3] perf report: s390 dump counter set data to file.
Date: Thu, 17 Jan 2019 11:03:56 -0300 [thread overview]
Message-ID: <20190117140356.GL11922@kernel.org> (raw)
In-Reply-To: <20190117093003.96287-4-tmricht@linux.ibm.com>
Em Thu, Jan 17, 2019 at 10:30:03AM +0100, Thomas Richter escreveu:
> Add support for the new s390 PMU device cpum_cf_diag to extract
> the counter set diagnostic data. This data is available as event
> raw data and can be created with this command:
Thanks, applied.
- Arnaldo
> [root@s35lp76 perf]# ./perf record -R -e '{rbd000,rbc000}' --
> ~/mytests/facultaet 2500
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.009 MB perf.data ]
> [root@s35lp76 perf]#
>
> The new event 0xbc000 generated this counter set diagnostic
> trace data. The data can be extracted using command:
>
> [root@s35lp76 perf]# ./perf report --stdio --itrace=d
> #
> # Total Lost Samples: 0
> #
> # Samples: 21 of events 'anon group { rbd000, rbc000 }'
> # Event count (approx.): 21
> #
> # Overhead Command Shared Object Symbol
> # ................ ......... ................. ........................
> #
> 80.95% 0.00% facultaet facultaet [.] facultaet
> 4.76% 0.00% facultaet [kernel.kallsyms] [k] check_chain_key
> 4.76% 0.00% facultaet [kernel.kallsyms] [k] ftrace_likely_update
> 4.76% 0.00% facultaet [kernel.kallsyms] [k] lock_release
> 4.76% 0.00% facultaet libc-2.26.so [.] _dl_addr
> [root@s35lp76 perf]# ll aux*
> -rw-r--r-- 1 root root 3408 Oct 16 12:40 aux.ctr.02
> -rw-r--r-- 1 root root 4096 Oct 16 12:40 aux.smp.02
> [root@s35lp76 perf]#
>
> The files named aux.ctr.## contain the counter set diagnstic
> data and the files named aux.smp.## contain the sampling
> diagnostic data. ## stand for the CPU number the data was
> taken from.
>
> Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
> Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com>
> ---
> tools/perf/util/s390-cpumsf.c | 77 ++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 73 insertions(+), 4 deletions(-)
>
> diff --git a/tools/perf/util/s390-cpumsf.c b/tools/perf/util/s390-cpumsf.c
> index 68b2570304ec..835249c77f56 100644
> --- a/tools/perf/util/s390-cpumsf.c
> +++ b/tools/perf/util/s390-cpumsf.c
> @@ -162,6 +162,7 @@
> #include "auxtrace.h"
> #include "s390-cpumsf.h"
> #include "s390-cpumsf-kernel.h"
> +#include "s390-cpumcf-kernel.h"
> #include "config.h"
>
> struct s390_cpumsf {
> @@ -184,8 +185,58 @@ struct s390_cpumsf_queue {
> struct auxtrace_buffer *buffer;
> int cpu;
> FILE *logfile;
> + FILE *logfile_ctr;
> };
>
> +/* Check if the raw data should be dumped to file. If this is the case and
> + * the file to dump to has not been opened for writing, do so.
> + *
> + * Return 0 on success and greater zero on error so processing continues.
> + */
> +static int s390_cpumcf_dumpctr(struct s390_cpumsf *sf,
> + struct perf_sample *sample)
> +{
> + struct s390_cpumsf_queue *sfq;
> + struct auxtrace_queue *q;
> + int rc = 0;
> +
> + if (!sf->use_logfile || sf->queues.nr_queues <= sample->cpu)
> + return rc;
> +
> + q = &sf->queues.queue_array[sample->cpu];
> + sfq = q->priv;
> + if (!sfq) /* Queue not yet allocated */
> + return rc;
> +
> + if (!sfq->logfile_ctr) {
> + char *name;
> +
> + rc = (sf->logdir)
> + ? asprintf(&name, "%s/aux.ctr.%02x",
> + sf->logdir, sample->cpu)
> + : asprintf(&name, "aux.ctr.%02x", sample->cpu);
> + if (rc > 0)
> + sfq->logfile_ctr = fopen(name, "w");
> + if (sfq->logfile_ctr == NULL) {
> + pr_err("Failed to open counter set log file %s, "
> + "continue...\n", name);
> + rc = 1;
> + }
> + free(name);
> + }
> +
> + if (sfq->logfile_ctr) {
> + /* See comment above for -4 */
> + size_t n = fwrite(sample->raw_data, sample->raw_size - 4, 1,
> + sfq->logfile_ctr);
> + if (n != 1) {
> + pr_err("Failed to write counter set data\n");
> + rc = 1;
> + }
> + }
> + return rc;
> +}
> +
> /* Display s390 CPU measurement facility basic-sampling data entry */
> static bool s390_cpumsf_basic_show(const char *color, size_t pos,
> struct hws_basic_entry *basic)
> @@ -792,7 +843,7 @@ static int s390_cpumsf_lost(struct s390_cpumsf *sf, struct perf_sample *sample)
> }
>
> static int
> -s390_cpumsf_process_event(struct perf_session *session __maybe_unused,
> +s390_cpumsf_process_event(struct perf_session *session,
> union perf_event *event,
> struct perf_sample *sample,
> struct perf_tool *tool)
> @@ -801,6 +852,8 @@ s390_cpumsf_process_event(struct perf_session *session __maybe_unused,
> struct s390_cpumsf,
> auxtrace);
> u64 timestamp = sample->time;
> + struct perf_evsel *ev_bc000;
> +
> int err = 0;
>
> if (dump_trace)
> @@ -811,6 +864,16 @@ s390_cpumsf_process_event(struct perf_session *session __maybe_unused,
> return -EINVAL;
> }
>
> + if (event->header.type == PERF_RECORD_SAMPLE &&
> + sample->raw_size) {
> + /* Handle event with raw data */
> + ev_bc000 = perf_evlist__event2evsel(session->evlist, event);
> + if (ev_bc000 &&
> + ev_bc000->attr.config == PERF_EVENT_CPUM_CF_DIAG)
> + err = s390_cpumcf_dumpctr(sf, sample);
> + return err;
> + }
> +
> if (event->header.type == PERF_RECORD_AUX &&
> event->aux.flags & PERF_AUX_FLAG_TRUNCATED)
> return s390_cpumsf_lost(sf, sample);
> @@ -891,9 +954,15 @@ static void s390_cpumsf_free_queues(struct perf_session *session)
> struct s390_cpumsf_queue *sfq = (struct s390_cpumsf_queue *)
> queues->queue_array[i].priv;
>
> - if (sfq != NULL && sfq->logfile) {
> - fclose(sfq->logfile);
> - sfq->logfile = NULL;
> + if (sfq != NULL) {
> + if (sfq->logfile) {
> + fclose(sfq->logfile);
> + sfq->logfile = NULL;
> + }
> + if (sfq->logfile_ctr) {
> + fclose(sfq->logfile_ctr);
> + sfq->logfile_ctr = NULL;
> + }
> }
> zfree(&queues->queue_array[i].priv);
> }
> --
> 2.14.3
--
- Arnaldo
next prev parent reply other threads:[~2019-01-17 14:03 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-17 9:30 [Patchv2 0/3] perf report: Display CPU Measurement facility counter sets Thomas Richter
2019-01-17 9:30 ` [PATCHv2 1/3] perf report: Display s390 diagnostic " Thomas Richter
2019-01-17 14:00 ` Arnaldo Carvalho de Melo
2019-01-18 8:39 ` Thomas-Mich Richter
2019-01-22 10:15 ` [tip:perf/core] perf report: Display arch specific diagnostic counter sets, starting with s390 tip-bot for Thomas Richter
2019-01-20 18:18 ` [PATCHv2 1/3] perf report: Display s390 diagnostic counter sets Jiri Olsa
2019-01-21 13:13 ` Jiri Olsa
2019-01-21 14:10 ` Thomas-Mich Richter
2019-01-21 14:17 ` Arnaldo Carvalho de Melo
2019-01-21 18:34 ` Jiri Olsa
2019-01-22 0:01 ` Arnaldo Carvalho de Melo
2019-01-21 19:17 ` Arnaldo Carvalho de Melo
2019-01-17 9:30 ` [PATCHv2 2/3] perf report: Display names in " Thomas Richter
2019-01-17 14:02 ` Arnaldo Carvalho de Melo
2019-01-22 10:16 ` [tip:perf/core] " tip-bot for Thomas Richter
2019-01-17 9:30 ` [PATCHv2 3/3] perf report: s390 dump counter set data to file Thomas Richter
2019-01-17 14:03 ` Arnaldo Carvalho de Melo [this message]
2019-01-22 10:16 ` [tip:perf/core] perf report: Dump s390 " tip-bot for Thomas Richter
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=20190117140356.GL11922@kernel.org \
--to=acme@kernel.org \
--cc=brueckner@linux.vnet.ibm.com \
--cc=heiko.carstens@de.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=schwidefsky@de.ibm.com \
--cc=tmricht@linux.ibm.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.