lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Wed, 27 Jan 2021 16:57:40 -0300
From:   Arnaldo Carvalho de Melo <acme@...nel.org>
To:     kan.liang@...ux.intel.com
Cc:     mingo@...nel.org, linux-kernel@...r.kernel.org, jolsa@...hat.com,
        namhyung@...nel.org, ak@...ux.intel.com, yao.jin@...ux.intel.com
Subject: Re: [PATCH] perf stat: Add Topdown metrics events as default events

Em Thu, Jan 21, 2021 at 05:37:52AM -0800, kan.liang@...ux.intel.com escreveu:
> From: Kan Liang <kan.liang@...ux.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@...ux.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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ