linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  reply	other threads:[~2019-01-17 14:04 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).