Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp616382ybc; Tue, 19 Nov 2019 06:39:11 -0800 (PST) X-Google-Smtp-Source: APXvYqyyf47zwbfHWqGjdFQrBO9tHsoQWMMrTTwV62QY+L42A+PCeQOzqK/1aLZBgYpKDM78/Zq/ X-Received: by 2002:a19:6d19:: with SMTP id i25mr4177710lfc.178.1574174351570; Tue, 19 Nov 2019 06:39:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574174351; cv=none; d=google.com; s=arc-20160816; b=zZQn58LiP6F9Sly1D8MNI5/AxFOtjimjm2M/mNdB+WU3L3tchS9KhWYsA55TMGDbyM CuuZMy4O/a2ECvaEU5sQwM9rDon6iWKhYjrIZC6vW1dF3Dz3iZxn5UI5eU8YBoDvpoXM VdGs8nWVkYKpCUGPm6tfC4joXHecOWB/lFmY/nHVsJ5Qv5TP4PSssNhzl4d1dmnROvWz ZG9QebeUmKrmu/E4FtrTQqBtfv8b5sVNpZR//egzwU6BaQ5kXAkJ+1Z9W6WczHUZK8WK m6rGwA223ZaHg13pafVAR+9gqKslQ18XgB4G1/Y3+QS7vsJUXYyYqygH+qlJgEMFsyQA o2Mw== 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; bh=P1inn1CFJKju/ARsrbUNI9LMcMoR/Iqk080J+J4SRPs=; b=Sxn+XD3MkpG2FUP0QksJs9Du67FGkvuCysfYvf9j3ClltnuUmgiyYh65Zk7U9iwwmj hgMR0lNViQUSW9nCrJoq7KcjDEYB1QqCsyIMf4gtV4M3gKlGW5AR2YacBeCxoZyW381Y 4RFaP+oct/dBWKYuK0pxyKWvGfcONjPV/i4nps5FiouMMRcd2E3XcRs2d2vVBterjcuN 1NVQjmb3yrqzkagzXPg3Z+ofgcP2EvhsnMbQl+dF0uvtAnbz6QUiEIEpq718oFRZQBOH wzRfOzzB4OaA6BCJpdjQCgWFz1H0ApiSYZFIDveqY88WMGMVrV/C5g68fVsC3JaaUcFz TWPA== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y51si16088210edb.29.2019.11.19.06.38.47; Tue, 19 Nov 2019 06:39:11 -0800 (PST) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728341AbfKSOfX (ORCPT + 99 others); Tue, 19 Nov 2019 09:35:23 -0500 Received: from mga04.intel.com ([192.55.52.120]:64767 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728307AbfKSOfS (ORCPT ); Tue, 19 Nov 2019 09:35:18 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Nov 2019 06:35:18 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,324,1569308400"; d="scan'208";a="215552425" Received: from labuser-ice-lake-client-platform.jf.intel.com ([10.54.55.50]) by fmsmga001.fm.intel.com with ESMTP; 19 Nov 2019 06:35:17 -0800 From: kan.liang@linux.intel.com To: peterz@infradead.org, acme@redhat.com, mingo@kernel.org, linux-kernel@vger.kernel.org Cc: jolsa@kernel.org, namhyung@kernel.org, vitaly.slobodskoy@intel.com, pavel.gerasimov@intel.com, ak@linux.intel.com, eranian@google.com, mpe@ellerman.id.au, Kan Liang Subject: [PATCH V4 11/13] perf top: Add option to enable the LBR stitching approach Date: Tue, 19 Nov 2019 06:34:09 -0800 Message-Id: <20191119143411.3482-12-kan.liang@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191119143411.3482-1-kan.liang@linux.intel.com> References: <20191119143411.3482-1-kan.liang@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kan Liang With the LBR stitching approach, the reconstructed LBR call stack can break the HW limitation. However, it may reconstruct invalid call stacks in some cases, e.g. exception handing such as setjmp/longjmp. Also, it may impact the processing time especially when the number of samples with stitched LBRs are huge. Add an option to enable the approach. The option must be used with --call-graph lbr. Reviewed-by: Andi Kleen Signed-off-by: Kan Liang --- tools/perf/Documentation/perf-top.txt | 9 +++++++++ tools/perf/builtin-top.c | 11 +++++++++++ tools/perf/util/top.h | 1 + 3 files changed, 21 insertions(+) diff --git a/tools/perf/Documentation/perf-top.txt b/tools/perf/Documentation/perf-top.txt index 5596129a71cf..80b57f942a86 100644 --- a/tools/perf/Documentation/perf-top.txt +++ b/tools/perf/Documentation/perf-top.txt @@ -304,6 +304,15 @@ Default is to monitor all CPUS. go straight to the histogram browser, just like 'perf top' with no events explicitely specified does. +--stitch-lbr:: + Show callgraph with stitched LBRs, which may have more complete + callgraph. The option must be used with --call-graph lbr recording. + Disabled by default. In common cases with call stack overflows, + it can recreate better call stacks than the default lbr call stack + output. But this approach is not full proof. There can be cases + where it creates incorrect call stacks from incorrect matches. + The known limitations include exception handing such as + setjmp/longjmp will have calls/returns not match. INTERACTIVE PROMPTING KEYS -------------------------- diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index dc80044bc46f..7c820cfe2f23 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -33,6 +33,7 @@ #include "util/map.h" #include "util/mmap.h" #include "util/session.h" +#include "util/thread.h" #include "util/symbol.h" #include "util/synthetic-events.h" #include "util/top.h" @@ -766,6 +767,9 @@ static void perf_event__process_sample(struct perf_tool *tool, if (machine__resolve(machine, &al, sample) < 0) return; + if (top->stitch_lbr) + al.thread->lbr_stitch_enable = true; + if (!machine->kptr_restrict_warned && symbol_conf.kptr_restrict && al.cpumode == PERF_RECORD_MISC_KERNEL) { @@ -1539,6 +1543,8 @@ int cmd_top(int argc, const char **argv) "number of thread to run event synthesize"), OPT_BOOLEAN(0, "namespaces", &opts->record_namespaces, "Record namespaces events"), + OPT_BOOLEAN(0, "stitch-lbr", &top.stitch_lbr, + "Enable LBR callgraph stitching approach"), OPTS_EVSWITCH(&top.evswitch), OPT_END() }; @@ -1601,6 +1607,11 @@ int cmd_top(int argc, const char **argv) } } + if (top.stitch_lbr && !(callchain_param.record_mode == CALLCHAIN_LBR)) { + pr_err("Error: --stitch-lbr must be used with --call-graph lbr\n"); + goto out_delete_evlist; + } + if (opts->branch_stack && callchain_param.enabled) symbol_conf.show_branchflag_count = true; diff --git a/tools/perf/util/top.h b/tools/perf/util/top.h index f117d4f4821e..45dc84ddff37 100644 --- a/tools/perf/util/top.h +++ b/tools/perf/util/top.h @@ -36,6 +36,7 @@ struct perf_top { bool use_tui, use_stdio; bool vmlinux_warned; bool dump_symtab; + bool stitch_lbr; struct hist_entry *sym_filter_entry; struct evsel *sym_evsel; struct perf_session *session; -- 2.17.1