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
| ||
|
Date: Wed, 27 Apr 2016 13:00:46 -0700 From: Andi Kleen <andi@...stfloor.org> To: acme@...nel.org Cc: peterz@...radead.org, jolsa@...nel.org, linux-kernel@...r.kernel.org, Andi Kleen <ak@...ux.intel.com> Subject: [PATCH 06/11] perf, tools, stat: Force --per-core mode for .aggr-per-core aliases From: Andi Kleen <ak@...ux.intel.com> When an event alias is used that the kernel marked as .aggr-per-core, force --per-core mode (and also require -a and forbid cgroups or per thread mode). This in term means, --topdown forces --per-core mode. This is needed for TopDown in SMT mode, because it needs to measure all threads in a core together and merge the values to compute the correct percentages of how the pipeline is limited. We do this if any alias is aggr-per-core. The main stat code does the necessary checks and forces per core mode. v2: Rename agg-per-core to aggr-per-core v3: Split patch into parse and use Signed-off-by: Andi Kleen <ak@...ux.intel.com> --- tools/perf/builtin-stat.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 1f19f2f999c8..447a434d23bc 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -2156,6 +2156,7 @@ static int __cmd_report(int argc, const char **argv) int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) { + struct perf_evsel *counter; const char * const stat_usage[] = { "perf stat [<options>] [<command>]", NULL @@ -2299,6 +2300,23 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused) if (add_default_attributes()) goto out; + evlist__for_each (evsel_list, counter) { + /* Enable per core mode if only a single event requires it. */ + if (counter->aggr_per_core) { + if (stat_config.aggr_mode != AGGR_GLOBAL && + stat_config.aggr_mode != AGGR_CORE) { + pr_err("per core event configuration requires per core mode\n"); + goto out; + } + stat_config.aggr_mode = AGGR_CORE; + if (nr_cgroups || !target__has_cpu(&target)) { + pr_err("per core event configuration requires system-wide mode (-a)\n"); + goto out; + } + break; + } + } + target__validate(&target); if (perf_evlist__create_maps(evsel_list, &target) < 0) { -- 2.5.5
Powered by blists - more mailing lists