Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp1789064imm; Mon, 3 Sep 2018 09:26:44 -0700 (PDT) X-Google-Smtp-Source: ANB0Vda7+rvhi5TKb/kYPNbeQSXmpYFtrkxC0a2KrT/9aR9Dx4cSZbMklb6ReDhQqzf3br649CMS X-Received: by 2002:a62:2646:: with SMTP id m67-v6mr30451784pfm.254.1535992004547; Mon, 03 Sep 2018 09:26:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535992004; cv=none; d=google.com; s=arc-20160816; b=MDMbtKS7f9PEG24f2oWtavpebnGaJKbjDNSygg1GyYDD5KvpYR6SLg0H+XdogWxL05 tWcDlolqR/IDYJgvtrdLZddfJRKwEDRgPMF7l9wNZZZdxi9LeWFG7sgsPXMQh1EJamTE nNcJKI0hJi1kQwUz9KpKQ+UftkT5zBH+zMdAuQraRjF5oBFG3c73wWlCUMjsa6/qXsxt AFkJZQN/a7YBakX75sRjC6v2+1f74Wc6PFU8UPESQrFx4XnLDReuFFWgbzaBSqHOGASx yxPQ203BtTSY7PnEP5jF0nfjsL0uSx3a1Xc/+32mO8Wkz/OQ3Tf+/fMQV9IdrTlZ8FcJ iOVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=8oP6kLmUH3OW9xC0ivJ/e4o4QUQlhIK8tEiuBqbJLQE=; b=eiiHTbCPrVkNHE+8yECPoOhNr4U8u6+fm95Dtj4Zh/Yi9xGrGv8cKlZ6UZnCEFJuGk IRHV2GFK/3Gz2FIDz9ZEyQSGflEHnlYiz5U8WKaW/pBeQ8peiIFXRReTvsZZZCtt4a6b rpZh3CktLexqJZvXXjCeqXYeYkF+BdWJczB36Qb1D8XW4a/en7+8mEmxOoWCRaF80a6c KLMKdL+AJBkxLOqGWIASvh/51OoOcow7p47H8pr3DGZtnJthdxb08M4YEIyOeFT5QeK2 4rjKW865BW5EEFEjnuzwn7wlnnjcWrW1kqSJxcilrblOSPUSd4AEp9EKvyzaBNi2PEYx yMZg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s24-v6si18411833plq.358.2018.09.03.09.26.29; Mon, 03 Sep 2018 09:26:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727657AbeICUoR (ORCPT + 99 others); Mon, 3 Sep 2018 16:44:17 -0400 Received: from mga05.intel.com ([192.55.52.43]:60079 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727223AbeICUoR (ORCPT ); Mon, 3 Sep 2018 16:44:17 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Sep 2018 09:22:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,325,1531810800"; d="scan'208";a="70244079" Received: from tassilo.jf.intel.com (HELO tassilo.localdomain) ([10.7.201.126]) by orsmga008.jf.intel.com with ESMTP; 03 Sep 2018 09:22:55 -0700 Received: by tassilo.localdomain (Postfix, from userid 1000) id 6A3AB301B66; Mon, 3 Sep 2018 09:22:55 -0700 (PDT) From: Andi Kleen To: acme@kernel.org Cc: jolsa@kernel.org, adrian.hunter@intel.com, kim.phillips@arm.com, linux-kernel@vger.kernel.org, Andi Kleen Subject: [PATCH v4 6/8] perf, tools, script: Make itrace script default to all calls Date: Mon, 3 Sep 2018 09:22:47 -0700 Message-Id: <20180903162249.36304-7-andi@firstfloor.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180903162249.36304-1-andi@firstfloor.org> References: <20180903162249.36304-1-andi@firstfloor.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andi Kleen By default perf script for itrace outputs sampled instructions or branches. In my experience this is confusing to users because it's hard to correlate with real program behavior. The sampling makes sense for tools like report that actually sample to reduce the run time, but run time is normally not a problem for perf script. It's better to give an accurate representation of the program flow. Default perf script to output all calls for itrace. That's a much saner default. The old behavior can be still requested with perf script --itrace=ibxwpe100000 Signed-off-by: Andi Kleen squash! perf, tools, script: Make itrace script default to all calls Fix ETM build failure --- tools/perf/Documentation/itrace.txt | 7 ++++--- tools/perf/builtin-script.c | 5 ++++- tools/perf/util/auxtrace.c | 17 ++++++++++++----- tools/perf/util/auxtrace.h | 5 ++++- tools/perf/util/cs-etm.c | 3 ++- tools/perf/util/intel-bts.c | 3 ++- tools/perf/util/intel-pt.c | 3 ++- 7 files changed, 30 insertions(+), 13 deletions(-) diff --git a/tools/perf/Documentation/itrace.txt b/tools/perf/Documentation/itrace.txt index a3abe04c779d..c2182cbabde3 100644 --- a/tools/perf/Documentation/itrace.txt +++ b/tools/perf/Documentation/itrace.txt @@ -11,10 +11,11 @@ l synthesize last branch entries (use with i or x) s skip initial number of events - The default is all events i.e. the same as --itrace=ibxwpe + The default is all events i.e. the same as --itrace=ibxwpe, + except for perf script where it is --itrace=ce - In addition, the period (default 100000) for instructions events - can be specified in units of: + In addition, the period (default 100000, except for perf script where it is 1) + for instructions events can be specified in units of: i instructions t ticks diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 812269ee9d33..99f69561e1f8 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -3103,7 +3103,10 @@ int cmd_script(int argc, const char **argv) char *rec_script_path = NULL; char *rep_script_path = NULL; struct perf_session *session; - struct itrace_synth_opts itrace_synth_opts = { .set = false, }; + struct itrace_synth_opts itrace_synth_opts = { + .set = false, + .default_no_sample = true, + }; char *script_path = NULL; const char **__argv; int i, j, err = 0; diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c index d056447520a2..4baca3a92b23 100644 --- a/tools/perf/util/auxtrace.c +++ b/tools/perf/util/auxtrace.c @@ -958,16 +958,23 @@ s64 perf_event__process_auxtrace(struct perf_tool *tool, #define PERF_ITRACE_DEFAULT_LAST_BRANCH_SZ 64 #define PERF_ITRACE_MAX_LAST_BRANCH_SZ 1024 -void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts) +void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts, + bool no_sample) { - synth_opts->instructions = true; synth_opts->branches = true; synth_opts->transactions = true; synth_opts->ptwrites = true; synth_opts->pwr_events = true; synth_opts->errors = true; - synth_opts->period_type = PERF_ITRACE_DEFAULT_PERIOD_TYPE; - synth_opts->period = PERF_ITRACE_DEFAULT_PERIOD; + if (no_sample) { + synth_opts->period_type = PERF_ITRACE_PERIOD_INSTRUCTIONS; + synth_opts->period = 1; + synth_opts->calls = true; + } else { + synth_opts->instructions = true; + synth_opts->period_type = PERF_ITRACE_DEFAULT_PERIOD_TYPE; + synth_opts->period = PERF_ITRACE_DEFAULT_PERIOD; + } synth_opts->callchain_sz = PERF_ITRACE_DEFAULT_CALLCHAIN_SZ; synth_opts->last_branch_sz = PERF_ITRACE_DEFAULT_LAST_BRANCH_SZ; synth_opts->initial_skip = 0; @@ -995,7 +1002,7 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str, } if (!str) { - itrace_synth_opts__set_default(synth_opts); + itrace_synth_opts__set_default(synth_opts, false); return 0; } diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h index 041ee64a63bc..71c00bf468a3 100644 --- a/tools/perf/util/auxtrace.h +++ b/tools/perf/util/auxtrace.h @@ -55,6 +55,7 @@ enum itrace_period_type { /** * struct itrace_synth_opts - AUX area tracing synthesis options. * @set: indicates whether or not options have been set + * @default_no_sample: Default to no sampling. * @inject: indicates the event (not just the sample) must be fully synthesized * because 'perf inject' will write it out * @instructions: whether to synthesize 'instructions' events @@ -79,6 +80,7 @@ enum itrace_period_type { */ struct itrace_synth_opts { bool set; + bool default_no_sample; bool inject; bool instructions; bool branches; @@ -527,7 +529,8 @@ int perf_event__process_auxtrace_error(struct perf_tool *tool, struct perf_session *session); int itrace_parse_synth_opts(const struct option *opt, const char *str, int unset); -void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts); +void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts, + bool no_sample); size_t perf_event__fprintf_auxtrace_error(union perf_event *event, FILE *fp); void perf_session__auxtrace_error_inc(struct perf_session *session, diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index 2ae640257fdb..0296405f38b2 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c @@ -1432,7 +1432,8 @@ int cs_etm__process_auxtrace_info(union perf_event *event, if (session->itrace_synth_opts && session->itrace_synth_opts->set) { etm->synth_opts = *session->itrace_synth_opts; } else { - itrace_synth_opts__set_default(&etm->synth_opts); + itrace_synth_opts__set_default(&etm->synth_opts, + etm->synth_opts->default_no_sample); etm->synth_opts.callchain = false; } diff --git a/tools/perf/util/intel-bts.c b/tools/perf/util/intel-bts.c index 7f0c83b6332b..3b3a3d55dca1 100644 --- a/tools/perf/util/intel-bts.c +++ b/tools/perf/util/intel-bts.c @@ -910,7 +910,8 @@ int intel_bts_process_auxtrace_info(union perf_event *event, if (session->itrace_synth_opts && session->itrace_synth_opts->set) { bts->synth_opts = *session->itrace_synth_opts; } else { - itrace_synth_opts__set_default(&bts->synth_opts); + itrace_synth_opts__set_default(&bts->synth_opts, + session->itrace_synth_opts->default_no_sample); if (session->itrace_synth_opts) bts->synth_opts.thread_stack = session->itrace_synth_opts->thread_stack; diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c index aec68908d604..c6c934c8f615 100644 --- a/tools/perf/util/intel-pt.c +++ b/tools/perf/util/intel-pt.c @@ -2554,7 +2554,8 @@ int intel_pt_process_auxtrace_info(union perf_event *event, if (session->itrace_synth_opts && session->itrace_synth_opts->set) { pt->synth_opts = *session->itrace_synth_opts; } else { - itrace_synth_opts__set_default(&pt->synth_opts); + itrace_synth_opts__set_default(&pt->synth_opts, + session->itrace_synth_opts->default_no_sample); if (use_browser != -1) { pt->synth_opts.branches = false; pt->synth_opts.callchain = true; -- 2.17.1