public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: kan.liang@linux.intel.com
Cc: mingo@kernel.org, linux-kernel@vger.kernel.org, jolsa@redhat.com,
	namhyung@kernel.org, ak@linux.intel.com, yao.jin@linux.intel.com
Subject: Re: [PATCH] perf stat: Add Topdown metrics events as default events
Date: Wed, 27 Jan 2021 16:57:40 -0300	[thread overview]
Message-ID: <20210127195740.GB758449@kernel.org> (raw)
In-Reply-To: <20210121133752.118327-1-kan.liang@linux.intel.com>

Em Thu, Jan 21, 2021 at 05:37:52AM -0800, kan.liang@linux.intel.com escreveu:
> From: Kan Liang <kan.liang@linux.intel.com>
> 
> The Topdown Microarchitecture Analysis (TMA) Method is a structured
> analysis methodology to identify critical performance bottlenecks in
> out-of-order processors. From the Ice Lake and later platforms, the
> Topdown information can be retrieved from the dedicated "metrics"
> register, which isn't impacted by other events. Also, the Topdown
> metrics support both per thread/process and per core measuring.
> Adding Topdown metrics events as default events can enrich the default
> measuring information, and would not cost any extra multiplexing.
> 
> Introduce arch_evlist__add_default_attrs() to allow architecture
> specific default events. Add the Topdown metrics events in the X86
> specific arch_evlist__add_default_attrs(). Other architectures can
> add their own default events later separately.
> 
> With the patch,

Thanks, applied.

- Arnaldo
 
>  $perf stat sleep 1
> 
>  Performance counter stats for 'sleep 1':
> 
>            0.82 msec task-clock:u              #    0.001 CPUs utilized
>               0      context-switches:u        #    0.000 K/sec
>               0      cpu-migrations:u          #    0.000 K/sec
>              61      page-faults:u             #    0.074 M/sec
>         319,941      cycles:u                  #    0.388 GHz
>         242,802      instructions:u            #    0.76  insn per cycle
>          54,380      branches:u                #   66.028 M/sec
>           4,043      branch-misses:u           #    7.43% of all branches
>       1,585,555      slots:u                   # 1925.189 M/sec
>         238,941      topdown-retiring:u        #     15.0% retiring
>         410,378      topdown-bad-spec:u        #     25.8% bad speculation
>         634,222      topdown-fe-bound:u        #     39.9% frontend bound
>         304,675      topdown-be-bound:u        #     19.2% backend bound
> 
>        1.001791625 seconds time elapsed
> 
>        0.000000000 seconds user
>        0.001572000 seconds sys
> 
> Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
> ---
>  tools/perf/arch/x86/util/Build    |  1 +
>  tools/perf/arch/x86/util/evlist.c | 15 +++++++++++++++
>  tools/perf/builtin-stat.c         |  3 +++
>  tools/perf/util/evlist.c          |  5 +++++
>  tools/perf/util/evlist.h          |  2 ++
>  5 files changed, 26 insertions(+)
>  create mode 100644 tools/perf/arch/x86/util/evlist.c
> 
> diff --git a/tools/perf/arch/x86/util/Build b/tools/perf/arch/x86/util/Build
> index 347c39b960eb..ce1ec92fecdc 100644
> --- a/tools/perf/arch/x86/util/Build
> +++ b/tools/perf/arch/x86/util/Build
> @@ -6,6 +6,7 @@ perf-y += perf_regs.o
>  perf-y += topdown.o
>  perf-y += machine.o
>  perf-y += event.o
> +perf-y += evlist.o
>  
>  perf-$(CONFIG_DWARF) += dwarf-regs.o
>  perf-$(CONFIG_BPF_PROLOGUE) += dwarf-regs.o
> diff --git a/tools/perf/arch/x86/util/evlist.c b/tools/perf/arch/x86/util/evlist.c
> new file mode 100644
> index 000000000000..8c6732cc7794
> --- /dev/null
> +++ b/tools/perf/arch/x86/util/evlist.c
> @@ -0,0 +1,15 @@
> +// SPDX-License-Identifier: GPL-2.0
> +#include <stdio.h>
> +#include "util/pmu.h"
> +#include "util/evlist.h"
> +#include "util/parse-events.h"
> +
> +#define TOPDOWN_L1_EVENTS	"{slots,topdown-retiring,topdown-bad-spec,topdown-fe-bound,topdown-be-bound}"
> +
> +int arch_evlist__add_default_attrs(struct evlist *evlist)
> +{
> +	if (!pmu_have_event("cpu", "slots"))
> +		return 0;
> +
> +	return parse_events(evlist, TOPDOWN_L1_EVENTS, NULL);
> +}
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index 3c054b8d4677..abcdabaf1701 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -1827,6 +1827,9 @@ static int add_default_attributes(void)
>  		}
>  		if (evlist__add_default_attrs(evsel_list, default_attrs1) < 0)
>  			return -1;
> +
> +		if (arch_evlist__add_default_attrs(evsel_list) < 0)
> +			return -1;
>  	}
>  
>  	/* Detailed events get appended to the event list: */
> diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
> index 05363a7247c4..b38589d8c027 100644
> --- a/tools/perf/util/evlist.c
> +++ b/tools/perf/util/evlist.c
> @@ -303,6 +303,11 @@ int __evlist__add_default_attrs(struct evlist *evlist, struct perf_event_attr *a
>  	return evlist__add_attrs(evlist, attrs, nr_attrs);
>  }
>  
> +__weak int arch_evlist__add_default_attrs(struct evlist *evlist __maybe_unused)
> +{
> +	return 0;
> +}
> +
>  struct evsel *evlist__find_tracepoint_by_id(struct evlist *evlist, int id)
>  {
>  	struct evsel *evsel;
> diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h
> index 1aae75895dea..9eba4958a1e9 100644
> --- a/tools/perf/util/evlist.h
> +++ b/tools/perf/util/evlist.h
> @@ -110,6 +110,8 @@ int __evlist__add_default_attrs(struct evlist *evlist,
>  #define evlist__add_default_attrs(evlist, array) \
>  	__evlist__add_default_attrs(evlist, array, ARRAY_SIZE(array))
>  
> +int arch_evlist__add_default_attrs(struct evlist *evlist);
> +
>  int evlist__add_dummy(struct evlist *evlist);
>  
>  int evlist__add_sb_event(struct evlist *evlist, struct perf_event_attr *attr,
> -- 
> 2.25.1
> 

-- 

- Arnaldo

      parent reply	other threads:[~2021-01-27 20:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-21 13:37 [PATCH] perf stat: Add Topdown metrics events as default events kan.liang
2021-01-21 19:57 ` Arnaldo Carvalho de Melo
2021-01-21 21:58   ` Liang, Kan
2021-01-27 19:57 ` Arnaldo Carvalho de Melo [this message]

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=20210127195740.GB758449@kernel.org \
    --to=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=jolsa@redhat.com \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=yao.jin@linux.intel.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